Убираем Kernel JS и CSS с сайта для не авторизованных посетителей

Стоит помнить, что в head страницы bitrix подключает свои служебные файлы, как минимум эти:
  • kernel_main.js
  • kernel_main.css
Что интересно - не авторизованным, простым посетителям эти файлы даром не нужны, но на них уходят 2 GET запроса и примерно 273 кб трафика.

Внимание! Файл kernel_main.css в режиме сжатия и объединения CSS сохраняет там содержимое style.css кастомных шаблонов компонентов, так что будьте внимательны!

Итак, в 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(       '/<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); }