Google关于如何使用的传统说明。因此,即使浏览器会以某种方式异步加载外部JavaScript库,直到实际执行某些代码,它仍然会阻止页面加载。后面的异步指令不直接使用,但也许ga.js
document.write()
document.write()
document.write()
insertBefore
也阻止页面加载?
但是,Google将缓存的时间设置max-age
为86,400秒(即1天,甚至设置为public,因此也适用于代理)。因此,由于许多站点加载了完全相同的Google脚本,因此通常会从缓存中获取JavaScript。不过,即使ga.js
是缓存,只需点击刷新按钮往往会使浏览器问谷歌有关的任何变化。然后,就像当ga.js
尚未缓存,浏览器必须等待响应才能继续:
GET /ga.js HTTP / 1.1
主持人:www.google-analytics.com
...
If-Modified-Since:2009年6月22日星期一20:00:33 GMT
快取控制:max-age = 0
HTTP / 1.x 304未修改
上次修改时间:2009年6月22日星期一20:00:33 GMT
日期:2009年7月26日,星期日,格林尼治标准时间
快取控制:max-age = 604800,公开
服务器:高尔夫
请注意,许多用户单击重新加载即可在浏览器窗口中打开已经打开的新闻站点,论坛和博客,从而使许多浏览器处于阻塞状态,直到收到Google的响应为止。您多久刷新一次SO主页?当Google Analytics(分析)响应缓慢时,此类用户会立即注意到。(网上发布了许多解决方案来异步加载ga.js
脚本,这对于这类网站特别有用,但可能不再比Google的更新说明要好。)
加载并执行JavaScript后,Web错误(跟踪图像)的实际加载应该是异步的。因此,除非页面使用以下命令,否则跟踪图像的加载不应阻止其他任何内容body.onload()
。在这种情况下,如果Web错误无法立即加载,则单击重新加载实际上会使情况变得更糟,因为If-Modified-Since
如上所述,单击重新加载还会使浏览器再次请求脚本。在重新加载之前,浏览器仅在等待Web错误,而在单击重新加载之后,浏览器也需要ga.js
脚本的响应。
因此,使用Google Analytics(分析)的网站不应使用body.onload()
。相反,应该使用类似jQuery的$(document).ready()或MooTools的domready event之类的东西。
另请参阅Google的功能概述,说明Google Analytics(分析)如何收集数据?,包括跟踪代码的工作原理。(这也正式表明Google会收集第一方Cookie的内容。即:您所访问的网站中的Cookie。)
更新:2009年12月,Google发布了异步版本。以上内容应该告诉每个人一定要升级,尽管升级并不能解决所有问题。