Javascript 为什么谷歌建议在<;中添加分析异步代码*after*脚本;头>;?

Javascript 为什么谷歌建议在<;中添加分析异步代码*after*脚本;头>;?,javascript,google-analytics,Javascript,Google Analytics,为什么谷歌建议将js脚本放在html的分析异步跟踪代码之前? 以下是报价: “注意:为了确保异步代码段相对于其他脚本的操作最精简,我们建议您通过以下方式之一在站点中放置其他脚本: 在HTML部分的跟踪代码段之前“ 当浏览器加载页面时,它会从上到下进行加载。浏览器可以用来加载外部链接文档的“连接”数量有限。如果您将他们的脚本放在您的脚本之上,则在他们的脚本完成之前,可能无法加载您自己的脚本。分析代码对页面的功能并不重要,因此我们可以将其保存到最后。异步分析代码段的工作是加载一个更密集的脚本,该脚

为什么谷歌建议将js脚本放在html的分析异步跟踪代码之前?

以下是报价:

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


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

异步分析代码段的工作是加载一个更密集的脚本,该脚本检查用户浏览器中的各种信息以识别它们,以便它可以向分析服务器报告。然而,由于所有这些分析数据对页面的可用性并不重要,谷歌希望在浏览器方便的情况下运行它

理论上,他们可以建议程序员将异步代码段添加到页面的最底部,作为正文的最后一个元素。但是,为了让程序员能够捕获UI事件并发送给analytics,他们希望尽早使用
\u gaq
变量。例如,您可能有一个按钮:
Track
。通过尽早使
\u gaq
可用,异步代码段中的少量代码将对这些消息进行排队,较重的
ga.js
稍后将它们发送到服务器

现在,通过使用
async
属性集向文档头添加一个新的
元素,加载了一些:
ga.js
。IE和WebKit将异步加载从脚本插入的标签。Firefox和Opera将支持
async
属性,并异步加载脚本。无论哪种方式,
ga.js
都是异步加载的,以方便浏览器

最后,一旦执行了
ga.js
,在不因异步加载而阻塞页面呈现的情况下,它可以完成收集所有用户数据和
\u gaq
队列中的任何消息并将它们发送到服务器的繁重工作


摘要:这种方法使用一个小型内联脚本来初始化一些关键变量,如
\u gaq
,在完整的
ga.js
脚本准备就绪之前,您的页面可以访问这些变量。这个小脚本还动态地在文档中添加了一个
标记,这样大多数浏览器都可以异步下载并执行它,而不会阻止页面的呈现或关键脚本的评估。

但谷歌吹嘘其服务器的可靠性,甚至建议用户不要在本地提供ga.js,因为它经过优化,可能会缓存在世界各地的用户浏览器中。。。这种情况对我来说毫无意义,尤其是当它并行加载并且不像其他脚本那样阻塞时。“并行”概念受到浏览器用于异步请求链接文件的线程数量的限制。Firefox,IIRC,上限为6。无论Google的服务器有多快,它仍然受到客户端连接速度的限制(在本例中),因为他们的浏览器加载页面和所有相关文档。因此,假设用户有拨号连接-您希望在Google Analytics之前加载脚本,因为您的脚本可能会影响可用性,而Google的肯定不会,并且可能需要几分钟才能打开下一个异步线程。^如果是这样,为什么建议(在同一链接中)放置这些脚本“在跟踪代码片段和所有页面内容之后(例如,在HTML正文的底部)”?要么在所有内容之前加载,要么在所有内容之后加载。“在所有内容之前”的路线对谷歌服务器的可用性充满信心(可能是一个安全的赌注).我认为关键是他们希望你把它放在页面的一端或另一端。这不是一个你必须的命题,而是一个“你应该”“。这是第二个努力,以建立一些统一的方式,网站管理员包括脚本,而不是故意。这是我的观点。。。我正试图理解它背后的原理。为什么他们不建议在加载完所有内容后最后加载实例中的js文件?CSS文件仍在头部加载,为什么只将js文件移到页面末尾?我想理解他们建议的逻辑。我实际上一开始对这个回答投了反对票,但在反复阅读之后,它是有意义的。。。这是为我点燃灯泡的部分。。。“最后,一旦执行了ga.js,在不因异步加载而阻塞页面呈现的情况下,它可以完成收集所有用户数据和_gaq队列中的任何消息并将它们发送到服务器的繁重工作”。。。所以我基本上是说,如果你把脚本放在页面底部,你是在对谷歌说,你不介意脚本在页面之后加载,所以继续,在它们之前加载分析!