Yandex metrica 标签降低了网站速度 google pagespeed insights 报告

Yandex metrika tag slowing down site speeds google page speed isights reporting

因此,在我所有的网页上,我都有 Yandex metrika 用于分析的代码。根据 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/

我可以将 Yandex metrika javascript 修改成什么以解决此问题?

恐怕你没有太多选择,因为它是第三方脚本。

提高分数和感知加载时间的一个方法是将函数调用包装在一个 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>

这绝对是一种解决方法,如果您能找到的话,我建议您使用一个不那么臃肿的库。

<script data-cfasync="false" type="text/javascript">
(function(){
var a = function() {try{return !!window.addEventListener} catch(e) {return !1} },
b = function(b, c) {a() ? document.addEventListener("load", b, c) : document.attachEvent("onreadystatechange", b)};
b(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
   });

}, false);
})();
</script>

一种选择是使用旧的 Yandex Metrika 代码 (new Ya.Metrika...)。 如果您在 Metrika 的高级设置中设置复选框,您可以查看旧代码。旧代码有一些限制,但它更小,速度也快了好几倍。

禁用 clickmap 和 webvisor 可能会有帮助。