GTM 真的异步加载所有标签吗?

问题描述

来自 their website 的 Google 跟踪代码管理器的一大优势和功能

异步触发代码,因此它们彼此独立加载,不会减慢您的页面速度。

考虑这种类型的同步标签用法

<script type="text/javascript" src="www.example.com/third-party-tag.js"></script>
<script type="text/javascript">
   //run some function from third-party-tag.js
</script>

必须同步加载外部js,否则第二个脚本通常会失败。如果您将其直接放入页面 HTML(无 GTM)中,则 js 会同步加载并且第二个脚本有效。

如果您在 GTM 中将两个脚本标签添加一个自定义 HTML 标签中,它仍然有效。我可以看到没有添加任何“异步”属性。这怎么可能...

  1. 这是简单明了的答案吗:Google Tag Manager is NOT 像它声称的那样异步加载外部 js 脚本?
  2. 我是否误解了 GTM 的声明意味着什么?例如检索和 自定义 HTML 代码段(标记)的准备是异步的,但 将 HTML 添加到 DOM 后,所有正常规则 应用于这些标签

感谢您的建议! 附言将代码片段重构为“更好”的方法不在问题范围内。

解决方法

需要注意的是,仅仅因为一个脚本是异步加载的,它仍然会阻塞主线程。 async 所做的只是指示浏览器在下载脚本时不要阻止下载其他请求。这是一个很好的解释,

https://www.digitalocean.com/community/tutorials/html-defer-async

使用 async,文件会被异步下载,然后在下载后立即执行。

使用 defer,文件被异步下载,但仅在文档解析完成时执行。

如果可能,我更喜欢“推迟”脚本。