Разработка на 1С-Битрикс Михаил Базаров

bitrix оптимизация для pagespeed

Вопросы и ответы по 1С-Битрикс, разборы реальных задач и обсуждение заметок блога. Задайте вопрос или помогите другим — все сообщения проходят модерацию.

Достаточно обширный вопрос, возможно запишу видео инструкцию на свой ютуб канал.

Но некоторые наводочки:
- Включите объединение и сжатие css и js
- Включите перемещение js вниз страницы
- Включите подключение минифицированных файлов css и js
- Оптимизируйте все картинки на сайте (например так http://optimizilla.com/ru/)
- Включите кеширование и композитный сайт

ВАЖНО! Ниже делаете на свой страх и риск, все очень индивидуально
Отключить служебные css и js (иногда нужны, но скорее редкость)
И сжать html код страницы
Для разделов создаем новый параметр save_kernel - и для разделов, у которых нужно сохранить скрипты уставливаем в параметр Y

В init.php добавляем код
Код
<?
AddEventHandler("main", "OnEndBufferContent", "deleteKernelJs"); //Убрать js
AddEventHandler("main", "OnEndBufferContent", "deleteKernelCss"); //Убрать css
AddEventHandler("main", "OnEndBufferContent", "ChangeMyContent"); //Сжать html
function deleteKernelJs(&$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(
        '/<script.+?src=".+?kernel_main\/kernel_main\.js\?\d+"><\/script\>/',
        '/<script.+?src=".+?bitrix\/js\/main\/core\/core[^"]+"><\/script\>/',
        '/<script.+?>BX\.(setCSSList|setJSList)\(\[.+?\]\).*?<\/script>/',
        '/<script.+?>if\(\!window\.BX\)window\.BX.+?<\/script>/',
        '/<script[^>]+?>\(window\.BX\|\|top\.BX\)\.message[^<]+<\/script>/',
    );
    $content = preg_replace($arPatternsToRemove, "", $content);
    $content = preg_replace("/\n{2,}/", "\n\n", $content);
}

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(
        '/<link.+?href=".+?kernel_main\/kernel_main\.css\?\d+"[^>]+>/',
        '/<link.+?href=".+?bitrix\/js\/main\/core\/css\/core[^"]+"[^>]+>/',
        '/<link.+?href=".+?bitrix\/templates\/[\w\d_-]+\/styles.css[^"]+"[^>]+>/',
        '/<link.+?href=".+?bitrix\/templates\/[\w\d_-]+\/template_styles.css[^"]+"[^>]+>/',
    );
    $content = preg_replace($arPatternsToRemove, "", $content);
    $content = preg_replace("/\n{2,}/", "\n\n", $content);
}

//Сжатие HTML
function ChangeMyContent(&$content)
{
    global $USER, $APPLICATION;
    if((is_object($USER) && $USER->IsAuthorized()) || strpos($APPLICATION->GetCurDir(), "/bitrix/")!==false) return;
    if($APPLICATION->GetProperty("save_kernel") == "Y") return;
    $search = array(
        '/\>[^\S ]+/s',
        '/[^\S ]+\</s',
        '/(\s)+/s'
    );
    $replace = array(
        '>',
        '<',
        '\\1'
    );
    $content = preg_replace($search, $replace, $content);
}
?>
Здравствуйте. Помогите пожалуйста. У меня в init.php уже есть код отвечающий за обработку почты. Как объединить Ваш код с моим. Чтобы все работало.
Цитата
Анатолий написал:
Здравствуйте. Помогите пожалуйста. У меня в init.php уже есть код отвечающий за обработку почты. Как объединить Ваш код с моим. Чтобы все работало.
Добрый

Достаточно дописать его в самый низ файла. Но внимательно, делайте это через FTP а не через админку, что бы если что удалить.
Дописал. Почистил кеш, белый экран.
Вот мой код:
Скрытый текст

Куда именно вставлять? Извините, я не программист. подскажите пожалуйста.
Здравствуйте, Михаил!
Благодарю за Ваши решения!
По этому могу сказать, что скрипт сжатия HTML в моём случае делает нерабочими скрипты в теле страницы <script type='text/javascript'></script> с комментариями разработчиков:
Код
{   //with bitrix panel   
if(1)   {   bxPanel.setAttribute('style','margin-bottom:20px !important');   }...

трансформирует в:
Код
{   //with bitrix panel    if(1)   {   bxPanel.setAttribute('style','margin-bottom:20px !important');   }...

и комментарий экранирует дальнейшее.
В моём случае летят 6 скриптов. Но, думаю, я не одинок и у других могут быть подобные ошибки.
Сейчас копаю как: или предварительно очистить комментарии, или как обойти их.
Цитата
Константин написал:
Здравствуйте, Михаил!
Благодарю за Ваши решения!
По этому могу сказать, что скрипт сжатия HTML в моём случае делает нерабочими скрипты в теле страницы <script type='text/javascript'></script> с комментариями разработчиков:
Код
 {   //with bitrix panel   
if(1)   {   bxPanel.setAttribute('style','margin-bottom:20px !important');   }... 

трансформирует в:
Код
 {   //with bitrix panel    if(1)   {   bxPanel.setAttribute('style','margin-bottom:20px !important');   }...
 

и комментарий экранирует дальнейшее.
В моём случае летят 6 скриптов. Но, думаю, я не одинок и у других могут быть подобные ошибки.
Сейчас копаю как: или предварительно очистить комментарии, или как обойти их.

Несколько помогло (нагуглил):
Код
    $search = array(
   '/(?:(?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:(?<!\:|\\\|\'|\")\/\/.*))/',
        '/\>[^\S ]+/s',
        '/[^\S ]+\</s',
        '/(\s)+/s'
    );
    $replace = array(
    '',
        '>',
        '<',
        '\\1'
    );

осталась одна проблема (заказ обратного звонка), которую пытаюсь отловить. Сообщу, если получится.
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
 
Михаил Базаров Индивидуальный предприниматель

Работаю официально, с заключением договора и предоставлением всех закрывающих документов.

Блог-note

Заметки по 1С-Битрикс