Стоит помнить, что в head страницы bitrix подключает свои служебные файлы, как минимум эти:
Внимание! Файл kernel_main.css в режиме сжатия и объединения CSS сохраняет там содержимое style.css кастомных шаблонов компонентов, так что будьте внимательны!
[spoiler]
Итак, в init.php пишем следующий код:
Теперь сайт грузится быстрее =) я проверяю сайты на скорость и .
P.S. Есть мнение, что обработка страницы регулярным выражением ресурсоемко. Но практика показывает, что время генерации страницы, если и увеличивается, то не сильно, а вот экономия ~300 кб трафика на каждом хите - это существенно.
Простая математика: ресурс имеет 3000 уников в сутки умножаем на 300кб - получаем 900мб лишнего трафика в сутки, или 27 гб в месяц...
UPD1: Выложил вторую версию кода. С первой в админку не зайти
UPD2: Не забываем грамотно подключать . Еще этот код есть где-то в документации, но пока не нашел.
UPD3: Добавил возможность оставлять скрипты на определенных страницах. Для этого в "Управлении структурой" надо добавить новое свойство страниц "save_kernel", если равно "Y", то скрипты останутся. Это нужно для страниц, где используется штатный видео-плеер.
UPD4: Обновил код, для ситуаций, когда не включено объединение и сжатие CSS, JS.
UPD5: Внимание! Обратите внимание на пробелы в script и link - их нужно будет убрать в вашем коде.
UPD6: Код для init.php, что бы далеко не ходить:
- kernel_main.js
- kernel_main.css
Внимание! Файл kernel_main.css в режиме сжатия и объединения CSS сохраняет там содержимое style.css кастомных шаблонов компонентов, так что будьте внимательны!
[spoiler]
Итак, в init.php пишем следующий код:
AddEventHandler("main", "OnEndBufferContent", "deleteKernelJs");
AddEventHandler("main", "OnEndBufferContent", "deleteKernelCss");
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(
'/<sc ript.+?src=".+?kernel_main\/kernel_main\.js\?\d+"><\/sc ript\>/',
'/<sc ript.+?src=".+?bitrix\/js\/main\/core\/core[^"]+"><\/sc ript\>/',
'/<sc ript.+?>BX\.(setCSSList|setJSList)\(\[.+?\]\).*?<\/sc ript>/',
'/<sc ript.+?>if\(\!window\.BX\)window\.BX.+?<\/sc ript>/',
'/<sc ript[^>]+?>\(window\.BX\|\|top\.BX\)\.message[^<]+<\/sc ript>/',
);
$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(
'/<li nk.+?href=".+?kernel_main\/kernel_main\.css\?\d+"[^>]+>/',
'/<li nk.+?href=".+?bitrix\/js\/main\/core\/css\/core[^"]+"[^>]+>/',
'/<li nk.+?href=".+?bitrix\/templates\/[\w\d_-]+\/styles.css[^"]+"[^>]+>/',
'/<li nk.+?href=".+?bitrix\/templates\/[\w\d_-]+\/template_styles.css[^"]+"[^>]+>/',
);
$content = preg_replace($arPatternsToRemove, "", $content);
$content = preg_replace("/\n{2,}/", "\n\n", $content);
}
|
P.S. Есть мнение, что обработка страницы регулярным выражением ресурсоемко. Но практика показывает, что время генерации страницы, если и увеличивается, то не сильно, а вот экономия ~300 кб трафика на каждом хите - это существенно.
Простая математика: ресурс имеет 3000 уников в сутки умножаем на 300кб - получаем 900мб лишнего трафика в сутки, или 27 гб в месяц...
UPD1: Выложил вторую версию кода. С первой в админку не зайти

UPD2: Не забываем грамотно подключать . Еще этот код есть где-то в документации, но пока не нашел.
UPD3: Добавил возможность оставлять скрипты на определенных страницах. Для этого в "Управлении структурой" надо добавить новое свойство страниц "save_kernel", если равно "Y", то скрипты останутся. Это нужно для страниц, где используется штатный видео-плеер.
UPD4: Обновил код, для ситуаций, когда не включено объединение и сжатие CSS, JS.
UPD5: Внимание! Обратите внимание на пробелы в script и link - их нужно будет убрать в вашем коде.
UPD6: Код для init.php, что бы далеко не ходить:
<?
if(isset($_GET['noinit']) && !empty($_GET['noinit'])) {
$strNoInit = strval($_GET['noinit']);
if($strNoInit == 'N') {
if (isset($_SESSION['NO_INIT'])) {unset($_SESSION['NO_INIT']);}
}elseif($strNoInit == 'Y') {
$_SESSION['NO_INIT'] = 'Y';
}
}
if(!(isset($_SESSION['NO_INIT']) && $_SESSION['NO_INIT'] == 'Y')) {
if(file_exists($_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/functions.php")) {
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/functions.php");
}
}
|