Тег яндекс метрика замедляет скорость сайта google page speed отчет isights

Итак, на всех моих веб-страницах у меня есть этот код, который используется Яндекс метрикой для аналитики. Согласно Google, этот скрипт замедляет мои страницы и нуждается в каких-либо изменениях в способе загрузки, чтобы не было блокировки рендеринга, времени TTI для блокировки ввода, блокировки первой задержки ввода FID, блокировки первой содержательной отрисовки.

<script data-cfasync="false" type="text/javascript">
   (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();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(XXXXXXXX, "init", {
        clickmap:true,
        trackLinks:true,
        accurateTrackBounce:true,
        webvisor:true
   });
</script>

Скорость страницы Google сообщает следующие https://developers.google.com/speed/pagespeed/insights/

Тег скрипта Яндекс метрики медленная оптимизация блокировка основного потока снижает влияние стороннего кода

Основной тег Яндекс метрики медленно сокращает время выполнения javascript, время выполнения скрипта, время процессора оценки скрипта

На что можно изменить javascript Яндекс метрики, чтобы решить эту проблему?


person C0nw0nk    schedule 17.12.2019    source источник
comment
Использовать что-нибудь еще, 5-секундную оценку сценария? он должен быть чертовски раздут / плохо написан. Один из вариантов улучшить ваш счет - обернуть вызывающую функцию, которую вы показываете, в setTimeout, чтобы отложить загрузку до завершения всего важного, но лично я бы просто использовал другой диспетчер тегов или обошелся бы с такими временами выполнения.   -  person Graham Ritchie    schedule 22.12.2019
comment
@GrahamRitchie Не могли бы вы опубликовать свою модификацию Javascript, которую я предоставил выше, в качестве ответа, а затем, если она сработает, я могу отметить ее как ответ :)?   -  person C0nw0nk    schedule 22.12.2019


Ответы (4)


Боюсь, что у вас не так много вариантов, потому что это сторонний скрипт.

Один из вариантов улучшения вашей оценки и воспринимаемого времени загрузки - это заключить вызов функции в набор setTimeout, достаточно продолжительный, чтобы отложить загрузку скрипта до тех пор, пока не будет загружен основной контент.

<script data-cfasync="false" type="text/javascript">
  setTimeout(function(){
       (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();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(XXXXXXXX, "init", {
            clickmap:true,
            trackLinks:true,
            accurateTrackBounce:true,
            webvisor:true
       });
    }, 5000); //set this as high as you can without ruining your stats.
</script>

Это определенно обходной путь, и вместо этого я бы посоветовал использовать другую библиотеку, которая будет менее раздутой, если вы ее найдете.

person Graham Ritchie    schedule 23.12.2019
comment
Привет, спасибо за код, за который проголосовали :) Вчера вечером я наткнулся на следующее, которое я опубликовал в качестве ответа, тоже помогло улучшить время загрузки, не уверен, дает ли это вам какие-либо идеи других способов улучшить время загрузки. - person C0nw0nk; 23.12.2019

Один из вариантов - использовать старый код Яндекс Метрики (new Ya.Metrika...). Вы можете просмотреть старый код, если поставите галочку в дополнительных настройках Метрики. Старый код имеет некоторые ограничения, но он намного меньше и в несколько раз быстрее.

person valodzka    schedule 08.07.2020

Отключение карты кликов и веб-обозревателя может помочь.

person jiv-e    schedule 19.08.2020

person    schedule
comment
к сожалению, в этом коде есть ошибка, которую он вызывает document.addEventListener, но должен window.addEventListener, и после исправления этой проблемы он начинает вести себя так же, как исходная метрика яндекса :( - person Roman Vasilyev; 16.10.2020
comment
Извините за запоздалый ответ, я никогда не видел вашего комментария к моему ответу @ C0nw0nk. Все, что это делает, - это добавление сценария на страницу при загрузке документа, если вы получаете какой-либо прирост производительности от этого, это означает, что ваш сайт нуждается в дальнейшей оптимизации на более раннем этапе критического пути, поскольку загрузка документа на правильно оптимизированном сайте должна занимать менее секунды. К сожалению, setTimeout или другая библиотека по-прежнему являются лучшими вариантами, если только вы действительно не хотите поэкспериментировать с performanceObserver. - person Graham Ritchie; 17.12.2020