+7 495 008 8452 пн.-пт. 10:00 – 17:00
Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.


Низкая скорость загрузки страниц отпугивает до 70% пользователей. Это общеизвестный факт. Стратегия решения проблемы понятна, надо сокращать количество загружаемых элементов и уменьшать их «вес». В этой заметке мы рассмотрим один из приемов ускорения загрузки при помощи отложенной загрузки JavaScript и CSS файлов на странице.

1. Доработка заголовка header.php

Разбираем функцию ShowHead на составляющие:

//$APPLICATION->ShowHead();
      
$APPLICATION->ShowMeta("keywords");      // Вывод мета - тега keywords
$APPLICATION->ShowMeta("description");      // Вывод мета - тега description
$APPLICATION->ShowCSS();         // Подключение файлов стилей CSS
      
if($USER->IsAdmin())
   $APPLICATION->ShowHeadStrings();   // Отображает специальные стили, JavaScript


2. . Подключаем вывод скриптов в «подвале» сайта footer.php

$APPLICATION->ShowHeadScripts();      // Вывод скриптов


3. . Вывод скриптов из init.php

Непосредственно вывод будет выполняться из init.php или functions.php

AddEventHandler("main", "OnEndBufferContent", "deleteKernelCss");

function deleteKernelCss(&$content) {
   global $USER, $APPLICATION;
   
   if((is_object($USER) && $USER->IsAuthorized()) || strpos($APPLICATION->GetCurDir(), "/bitrix/")!==false) return;
   if($APPLICATION->GetProperty("save_kernel") == "Y") return;

   $arPatternsToRemove = Array(
      '/<li nk.+?href=".+?kernel_main\/kernel_main\.css\?\d+"[^>]+>/',
   );

   $content = preg_replace($arPatternsToRemove, "", $content);
   $content = preg_replace("/\n{2,}/", "\n\n", $content);
}

AddEventHandler("main", "OnEndBufferContent", "includeCssInline");

function includeCssInline(&$content) {
   global $USER, $APPLICATION;
   
   if((is_object($USER) && $USER->IsAuthorized()) || strpos($APPLICATION->GetCurDir(), "/bitrix/")!==false) return;
   if($APPLICATION->GetProperty("save_kernel") == "Y") return;

   preg_match('/<li nk.+?href="(\/bitrix\/cache\/css\/'.SITE_ID.'\/'.SITE_TEMPLATE_ID.'\/template_[^"]+)"[^>]+>/', $content, $arMatches);
   $sFilePath = "http://".$_SERVER["HTTP_HOST"].$arMatches[1];
   
   $obCache = new CPHPCache;
   $life_time = 0*60;
   
   if($obCache->InitCache($life_time, $sFilePath, "/")) {
      $vars         = $obCache->GetVars();
      $sIncludeCss      = $vars["sIncludeCss"];
      $sIncludeCssClear   = $vars["sIncludeCssClear"];
      
   } else {
      $sIncludeCss      = file_get_contents($sFilePath);
      $sIncludeCssClear   = compressCSS($sIncludeCss);
      
   }
   
   if(false) {
      ?><pre style="font-size:10px;line-height: 8px;">До: <?=strlen($sIncludeCss);?></pre><?
      ?><pre style="font-size:10px;line-height: 8px;">После: <?=strlen($sIncludeCssClear);?></pre><?
   }
   
   $content = str_replace($arMatches[0], "<st yle>$sIncludeCssClear</style>", $content);
   
   if($obCache->StartDataCache()) {
      $obCache->EndDataCache(array(
         "sIncludeCss" => $sIncludeCss,
         "sIncludeCssClear" => $sIncludeCssClear,
      ));
   }
}

function compressCSS($css, $arOptions = Array()) {
   $sResult = $css;
   
   $sResult = preg_replace("/\/\*[^*]+\*\//", "", $sResult);      // comments
   $sResult = preg_replace("/\/\**\*\//", "", $sResult);         // comments
   $sResult = preg_replace("/\s*(:|,|;|{|}|\t)\s*/", "$1", $sResult);   // whitespaces
   $sResult = preg_replace("/(\t+|\s{2,})/", " ", $sResult);      // tabs and double whitespace
   $sResult = preg_replace("/(\s|:)([\-]{0,1}0px)\s/", " 0 ", $sResult);   // zeros
   //$sResult = preg_replace("/#(\w){6};/", "#$1$1$1;", $sResult);      // #dddddd => #ddd

   return $sResult;
}


Готово!


Спасибо за внимание!
Читайте свежий выпуск «Кладовки программиста» каждый день!

Назад в раздел

Подписаться на новые материалы раздела:












CAPTCHA