【问题标题】:Why does google recommend putting Analytics Asynchronous code *after* scripts in <head>?为什么 google 建议将 Analytics 异步代码 *after* 脚本放在 <head> 中?
【发布时间】:2023-03-29 15:47:01
【问题描述】:

为什么 google 建议在你的 html 中的分析异步跟踪代码之前放置 js 脚本? http://code.google.com/apis/analytics/docs/tracking/asyncMigrationExamples.html

这是报价:

"注意:为了确保异步 sn-p 相对于其他脚本的最简化操作,我们建议您通过以下方式之一将其他脚本放置在您的站点中: 在 HTML 部分中的跟踪代码 sn-p 之前"

【问题讨论】:

    标签: javascript google-analytics


    【解决方案1】:

    异步分析 sn-p 的工作是加载一个更密集的脚本,该脚本检查用户浏览器的各种信息以识别它们,因此它可以向分析服务器报告。但是,由于所有这些分析数据对页面的可用性并不重要,因此 Google 希望在浏览器方便时运行它。

    理论上,他们可以建议程序员将异步 sn-p 添加到页面的最底部,作为正文的最后一个元素。但是,为了允许程序员捕获 UI 事件以发送到分析,他们希望尽早使用 _gaq 变量。例如,您可能有一个按钮:&lt;button onclick="_gaq.push(...)"&gt;Track&lt;/button&gt;。通过尽早提供_gaq,异步sn-p 中的一小段代码会将这些消息排队,而较重的ga.js 稍后会将它们发送到服务器。

    现在,一些implementation details: ga.js 是通过将一个新的&lt;script&gt; 元素添加到具有async 属性集的文档头部来加载的。 IE 和 WebKit 将异步加载从脚本插入的&lt;script&gt; 标签。 Firefox 和 Opera 将遵循 async 属性并异步加载脚本。无论哪种方式,ga.js 都是在浏览器方便的情况下异步加载的。

    最后,一旦ga.js被执行,不会因为异步加载而阻塞页面渲染,它可以完成收集_gaq队列中所有用户数据和任何消息的繁重工作并将它们发送到服务器。

    总结:这种方法使用一个小的内联脚本来初始化一些关键变量,如_gaq,您的页面可以在完整的ga.js 脚本准备好之前访问这些变量。这个小脚本还动态地将&lt;script src="ga.js"&gt;标签添加到文档中,这样大多数浏览器都会异步下载并执行它,而不会阻塞页面的呈现或关键脚本的评估。

    【讨论】:

    • 我实际上最初对这个回复投了反对票,但在阅读和重新阅读它之后,它是有道理的......这是为我点燃灯泡的部分......“最后,一次 ga。 js被执行,不会因为异步加载而阻塞页面渲染,它可以完成收集所有用户数据和_gaq队列中的任何消息并将它们发送到服务器的繁重工作“......所以我基本上是如果您将脚本放在页面底部,您是在对 google 说您不介意在页面之后加载脚本,所以继续在它们之前加载分析!
    【解决方案2】:

    当浏览器加载页面时,它会从上到下加载。浏览器的“连接”数量有限,可用于加载外部链接的文档。如果您将他们的脚本放在您的脚本之上,您自己的脚本可能在他们的脚本完成之前不会被加载。分析代码对页面的功能并不重要,因此我们可以将其保存到最后。

    【讨论】:

    • 但是 google 吹嘘其服务器的可靠性,甚至建议用户不要在本地提供 ga.js,因为它经过优化并且可能缓存在世界各地的用户浏览器中......它没有对我来说这是没有意义的,尤其是当它并行加载并且不会像其他脚本那样阻塞时。
    • “并行”概念受限于浏览器可以用于异步请求链接文件的线程数。 Firefox,IIRC,上限为 6。无论 Google 的服务器有多快,它仍然受到客户端连接速度的限制(在这种情况下),因为他们的浏览器会加载页面和所有相关文档。因此,假设用户进行拨号 - 您希望在 Google Analytics 之前加载您的脚本,因为您的脚本可能会影响可用性,而 Google 的肯定不会,而且可能是 b>分钟,在下一个异步线程打开之前。
    • ^ 如果是这种情况,那么为什么建议(在同一个链接中)将这些脚本放在“ 跟踪代码 sn-p 和所有页面内容(例如在 HTML 正文的底部)”?
    • 要么在所有内容之前加载,要么在所有内容之后加载。 “在一切之前”路线非常相信 Google 服务器的可用性(可能是一个安全的赌注)。我认为关键是他们希望你把它放在页面的一个极端或另一个极端。这不是一个你必须的提议,而是一个“你应该”。其次,这是为了在网站管理员包含脚本的方式上建立某种统一性,而不是随便。
    • 这就是我的意思...我试图理解它背后的基本原理。为什么他们不建议在加载所有内容的实例中的 js 文件之后最后加载它? CSS 文件仍在加载,为什么只将 js 文件移到页面末尾?我想了解他们建议的逻辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-11
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多