我正在致力于提高网站的性能。经过一番调查后,我将重点放在减少总阻塞时间(TBT)上。 Chrome Lighthouse 告诉我“减少第三方代码的影响第三方代码阻塞了主线程 250 毫秒”。看来 Google 标签管理器和 Google Analytics 在大部分时间都阻塞了线程:
检查性能选项卡也证实了这一点:我有 4 个“长任务”,其中 3 个与 Google 跟踪代码管理器或分析相关。
下面的代码显示了 Google 跟踪代码管理器如何包含在网站中:
<head>
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl+ '>m_auth=XXXXXXXXXXXXX>m_preview=env-2>m_cookies_win=x';f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-XXXXXXX');</script>
<!-- End Google Tag Manager -->
GTM 有 3 个任务,阻塞主线程,导致 TBT 高,这正常吗?我做错了什么吗?有什么方法可以解决这个问题并减少 TBT,同时网站上有 GTM?
谢谢! W.
我发现的最佳解决方案是partytown,它将分析脚本从主线程移至工作线程中
我的5美分,
Google 指令说我们需要在标头中链接 GTM 并添加如下脚本:
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXX"></script>
和
window.dataLayer = window.dataLayer || [];
function gtag(){
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', 'G-xxxxxxxx');
我将 window.dataLayer 块移到了一个单独的 .js 文件中,并将其与其他 js 代码一起缩小,从而可以消除一个阻塞项。