Главная страница / Блог / Разное / Google PageSpeed Insights (продолжение...)

Google PageSpeed Insights (продолжение...)

27 апреля 2025, Воскресенье
188
0
[ Рейтинг: 5 / Голосов: 1 ]

Хотел продолжить всё писать в одном посту про гуглспид (Google PageSpeed Insights), но из-за того, что в DLE 18.0 убрали стандартный bbcodes, которым я привык уже пользоваться, редактирование ранних новостей ломает всю структуру новости, а править все строки и приводить их в порядок — дольше, чем просто начать писать продолжение по данной теме…

В общем продолжу накидывать разные примеры, которые помогут увеличить показатель Google PageSpeed Insights и ускорить загрузку сайта перед пользователем.

На скрине представлен лучший показатель из трёх попыток проверки главной страницы блога на данный момент, при включенной метрике и 3-х блоков РСЯ! Иногда из-за разной рекламы в блоках показатель может значительно упасть, например, сейчас при проверке были показатели моб версии (ПК версии) главной страницы: 67/100 (100/100), 96/100 (100/100), (96/100 (100/100)

Ещё один способ для отложенной загрузки для Яндекс РСЯ и Метрики

<script>
( function () {
    var loadedTLAnalytics = false,timerId;
   if ( navigator.userAgent.indexOf( 'YandexMetrika' ) > -1) {    //Это пропуск робота Метрики
        loadTLAnalytics();
   } else {
        window.addEventListener( 'scroll', loadTLAnalytics, { passive: true } );
        window.addEventListener( 'touchstart', loadTLAnalytics, { passive: true } );
        document.addEventListener( 'mouseenter', loadTLAnalytics, { passive: true } );
        document.addEventListener( 'click', loadTLAnalytics, { passive: true } );
        document.addEventListener( 'DOMContentLoaded', loadFallback, { passive: true } );
   }
   function loadFallback() {
        timerId = setTimeout( loadTLAnalytics, 5000 ); //Это глобальное время задержки 5000 - 5 сек.
   }
   function loadTLAnalytics( e ) {
        if ( loadedTLAnalytics ) {
                return;
        }

        setTimeout(function () { //Загрузка счетчика Метрики, где XXXXXXX - это номер вашего счётчика
                 (function(m,e,t,r,i,k,a) { m[i]=m[i]||function() { (m[i].a=m[i].a||[]).push(arguments) }; m[i].l=1*new Date(); for (var j = 0; j < document.scripts.length; j++) { if (document.scripts[j].src === r) { return; } } k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a) } ) (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym"); ym( XXXXXXX, "init", { clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true, ecommerce:"dataLayer", triggerEvent:true } );
        },0); //Тут можно отложить загрузку для скритпа метрики дополнительно

        setTimeout(function ()  {
                addscript("https://yandex.ru/ads/system/context.js", function()  {

                   if( document.getElementById("yandex_rtb_R-A-XXXXX-X") ) {
                        window.yaContextCb.push(()  => {
                             Ya.Context.AdvManager.render( {
                                renderTo: 'yandex_rtb_R-A-XXXXX-X',
                                blockId: 'R-A-XXXXX-X'
                             } )
                         } );
                  }

                  /* Здесь можно добавить второй и более блоков */

               });
        },2000); //Тут можно отложить загрузку для скритпа context.js дополнительно
   loadedTLAnalytics = true;
   clearTimeout( timerId );
   window.removeEventListener( 'scroll', loadTLAnalytics, { passive: true} );
   window.removeEventListener( 'touchstart', loadTLAnalytics, {passive: true} );
   document.removeEventListener( 'mouseenter', loadTLAnalytics, { passive: true } );
   document.removeEventListener( 'click', loadTLAnalytics, { passive: true } );
   document.removeEventListener( 'DOMContentLoaded', loadFallback, { passive: true } );
}
} )();
function addscript(a,callback,d) {
   var eli = document.createElement("script");
   eli.src = a;
   eli.async = true;
   m=document.getElementsByTagName("script")[0];
   m.parentNode.insertBefore(eli,m);
   eli.onload = () => {
        if (callback) callback();
   }
}
</script>

XXXXXXX — это номер вашего счётчика в Метрике, а R-A-XXXXX–X — это ваши номера блоков в РСЯ.

При визите пользователя на страницу сайта, если пользователь не предпринял никаких действий в виде скрола, клика, или просто движения мышкой, то скрипт загрузится через 5 секунд, а блоки РСЯ через 7 секунд, в указанной конфигурации. Если же было какое-либо действие пользователя, то грузится скрипт Меррики, и через 2 секунды РСЯ.

Для вывода блока рекламы в контенте, нужно просто вывести 

<div id="yandex_rtb_R-A-XXXXXX-X"></div>

в нужном месте.

Источник

Новый вариант добавления CSS файлов шаблона

{*1-ое подключение стилей для гуглспид*}
<link rel="preload" href="{THEME}/style/style.css?v={cache-id}" as="style">
<link rel="preload" href="{THEME}/style/engine.css?v={cache-id}" as="style">
<link rel="preload" href="{THEME}/css/fontawesome.css?v={cache-id}" as="style">
<link rel="preload" href="{THEME}/style/update_style_dle.css?v={cache-id}" as="style">
{*2-ое подключение стилей для гуглспид*}
<link href="{THEME}/style/style.css?v={cache-id}" type="text/css" rel="stylesheet">
<link href="{THEME}/style/engine.css?v={cache-id}" type="text/css" rel="stylesheet">
<link href="{THEME}/css/fontawesome.css?v={cache-id}" type="text/css" rel="stylesheet">
<link href="{THEME}/style/update_style_dle.css?v={cache-id}" type="text/css" rel="stylesheet">

Таким образом добавляем и остальные стили в head, если они важны при загрузке, всё остальное — в низ перед /body.

Отрисовка самого крупного контента - атрибут fetchpriority="high"

Что делает fetchpriority="high"?
Он указывает браузеру загружать ресурс с высоким приоритетом, ускоряя его получение. Подходит для:

  • Критически важных изображений (например, LCP-элемент — крупное изображение в верхней части страницы).
  • Ключевых элементов (логотип, главный баннер).

Как правильно использовать fetchpriority?
✅ Только для LCP-изображения (самое крупное в viewport при загрузке):

<img src="hero-banner.jpg" fetchpriority="high" alt="..." loading="eager">

✅ Для важных предзагружаемых ресурсов (если используете <link rel="preload">):

<link rel="preload" href="critical-image.jpg" as="image" fetchpriority="high">

Альтернативные методы оптимизации
loading="lazy" – для отложенной загрузки изображений вне viewport.
<picture> + srcset – адаптивные изображения под разные разрешения.
CDN + сжатие – оптимизация размера и доставки.

Ещё один код для отложенной загрузки скриптов

let isScriptLoaded = false;

function loadExternalScript() {
    if (!isScriptLoaded) {
        isScriptLoaded = true;
        const script = document.createElement("script");
        script.src = "https://example.com/ads.js"; // URL стороннего скрипта
        script.async = true;
        script.defer = true;
        document.body.appendChild(script);
    }
}

// Загрузка через 2 секунды или при клике
document.addEventListener("DOMContentLoaded", function() {
    setTimeout(loadExternalScript, 2000);
    document.addEventListener("click", loadExternalScript);
});

🔹 Плюсы такого подхода для рекламы
✔ Ускорение загрузки страницы – реклама не блокирует основной контент.
✔ Ленивая загрузка (Lazy Load) – скрипт загрузится только после клика или через 2 секунды.
✔ Снижение "штрафов" за блокировку рекламы – некоторые браузеры/аддоны блокируют рекламу, если она грузится сразу.

🔹 Минусы и ограничения
❌ Рекламные сети могут запрещать отложенную загрузку (например, Google AdSense требует загрузки в <head>).
❌ Снижается видимость рекламы – если скрипт загрузится слишком поздно, рекламная система может не успеть показать баннеры.
❌ Возможны потери доходов – если пользователь уйдёт со страницы до загрузки рекламы.

🔹 Рекомендации
Для AdSense/Яндекс.Рекламы – лучше использовать официальные асинхронные коды, которые уже оптимизированы.

Для аналитики (Google Analytics, Yandex.Metrika) – можно использовать отложенную загрузку, но это может искажать статистику.

Для тяжелых виджетов (например, чаты, карты) – метод хорошо подходит.

🔹 Вывод
Да, код можно применять для сторонних скриптов, но не для всех рекламных систем. Лучше проверить документацию рекламной сети или протестировать, не снижается ли доход. Для других скриптов (аналитика, виджеты) – отличное решение. 🚀
Исходный код был в таком виде:

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Продолжение следует…

Каким вариантом кода пользоваться, при РСЯ, метрики, или другой рекламе — дело ваше, главное чтоб JS код работал и выполнялся всегда, когда это нужно. В общем читайте, думайте, выбирайте, пробуйте — всё в ваших руках! … и нервах…

3-05-2025, 21:47: Добавил 3/4-й пункт
Комментарии:
{login}

Твой комментарий..

 
Модули для создания киносайта и не только на базе DataLife Engine, и многое другое...
Просто блог Евгения Попова, он же - byroot © 2015-2025 | Карта сайта