Битрикс переносим js (kernel) в конец сайта

Кто ориентируется на PageSpeed Insights рекомендации, они пишут что надо бы убрать блокирующий css и js в конец страницы, для быстрой загрузки. В настройках битрикса - Главный модуль, ставим галочки чтобы перенести в конец страницы, но код и стили не переносятся.

Есть решение - убираем из head $APPLICATION->ShowHead() для неавторизированных пользователей, а для админов оставляем из-за особенностей Эрмитажа и возможности редактировать страницу находясь на ней. Вниз сайта, перед body заносим $APPLICATION->ShowCSS(), $APPLICATION->ShowHeadStrings() и $APPLICATION->ShowHeadScripts(), которые выведут стили и скрипты ядра и шаблона.

Помимо того в head надо оставить вывод ключевых слов и описаний (мета-теги). $APPLICATION->ShowMeta("keywords") и $APPLICATION->ShowMeta("description") - их подключим.

Как это на практике:

Палим документацию и сорцы у метода ShowHead:

<?php 
//    CMain::ShowHead()
//    /bitrix/modules/main/classes/general/main.php:837

    public function ShowHead($bXhtmlStyle=true)
    {
        echo '<meta http-equiv="Content-Type" content="text/html; charset='.LANG_CHARSET.'"'.($bXhtmlStyle? ' /':'').'>'."\n";
        $this->ShowMeta("robots", false, $bXhtmlStyle);
        $this->ShowMeta("keywords", false, $bXhtmlStyle);
        $this->ShowMeta("description", false, $bXhtmlStyle);
        $this->ShowLink("canonical", null, $bXhtmlStyle);
        $this->ShowCSS(true, $bXhtmlStyle);
        $this->ShowHeadStrings();
        $this->ShowHeadScripts();
    }
?>

Используем эти функции и разбиваем их для показа разным группам пользователей:

<head>
    <?
        function ShowHeadCustom($bXhtmlStyle=true) {
            global $APPLICATION;
            echo '<meta http-equiv="Content-Type" content="text/html; charset='.LANG_CHARSET.'"'.($bXhtmlStyle? ' /':'').'>'."\n";
            
            $APPLICATION->ShowMeta("robots", false, $bXhtmlStyle);
            $APPLICATION->ShowMeta("keywords", false, $bXhtmlStyle);
            $APPLICATION->ShowMeta("description", false, $bXhtmlStyle);
            $APPLICATION->ShowLink("canonical", null, $bXhtmlStyle);
        }
        
        global $USER;
        if($USER->IsAdmin()){
            $APPLICATION->ShowHead();
        } else {
            ShowHeadCustom();
        }
    ?>
  <title><? $APPLICATION->ShowTitle(false) ?></title>
</head>
<body>
    ...
    Ваша разметка
    ...
    <?
    function ShowBottomKernel($bXhtmlStyle=true) {
    global $APPLICATION;

    $APPLICATION->ShowCSS(true, $bXhtmlStyle);
    $APPLICATION->ShowHeadStrings();
    $APPLICATION->ShowHeadScripts();
    }
    if(!$USER->IsAdmin()) {
    ShowBottomKernel();
    } 
    ?>
Комментарии (0)

Написать комментарий