Google Analytics异步代码使用了一种非常独特的JavaScript代码执行设计模式。
该代码依赖于一个库,它不知道库是否已经加载。如果库还没有加载,它会将所有命令排队到一个数组对象中。当库加载完成后,它就创建_gaq对象并按照队列中的顺序执行所有命令。然后它覆盖push函数,以便后续命令可以立即执行。
其想法是在排队时让命令非常快速地运行。只有当库加载完成后,代码才会真正被评估。
他们还使用参数async=true
加载库。这对实际页面加载时间几乎没有影响。
这些命令看起来就像同步版本的命令,但第一个字符串是函数名,后面的参数是函数参数。您还可以将函数推入此数组中,这些函数也将按顺序以null上下文执行。因此,如果您需要与库进行同步操作,可以将函数推入_gaq中执行。
我认为这是一种非常聪明的解决方案,但我以前从未见过它。除了Google Analytics跟踪代码之外,有人知道这种设计模式的名称或使用位置吗?
async=true
来减少页面加载时间,那么当代码运行时就无法知道它是否已经完成加载。把jQuery命令排队而不是并发执行会不会更好呢?或者将所有的代码放到一个函数中,等待jQuery完成加载后再执行该函数也是一种不错的选择。 - Eduardo_domReady
数组,用于存储和读取 DOM 就绪的函数。 - Raynos_domReady
,更像是_jQueryReady
,因为DOM不一定准备好。使用async=true
标志,文件可能在DOM准备好之前或之后加载。即使在window.onload触发后,js文件仍然可以加载。 - Eduardoonload
事件能在异步脚本加载和执行之前触发? - Raynos