以下情况可能需要注意脚本的顺序:
- 当一个脚本依赖于另一个脚本时。
如果脚本在BODY中而不是HEAD中。 更新: 在HEAD和BODY中似乎没有区别。顺序很重要。无论如何。
- 当你在全局命名空间中运行需要依赖于另一个脚本的代码时。
避免这些问题的最好方法是确保全局命名空间中的代码位于$(document).ready()
包装器内。全局命名空间中的代码必须按照执行代码必须先定义的顺序加载。
在Firebug或Chrome Debugger中检查JavaScript错误控制台可能会告诉您脚本中出了什么问题,并让您知道需要修改什么以适应新的设置。
如果基于事件调用函数(例如页面加载、单击、插入或删除节点等),则通常不需要考虑顺序。但是,如果在全局命名空间之外进行函数调用,那就会出现问题。请考虑以下代码:
JS文件:mySourceContainingEvilFunctionDef.js
function evilGlobalFunctionCall() {
alert("I will cause problems because the HTML page is trying to call " +
"me before it knows I exist... It doesn't know I exist, sniff :( ");
}
HTML:
<script>
evilGlobalFunctionCall(); // JS Error - syntax error
</script>
<!
<script type="text/javascript" src="mySourceContainingEvilFunctionDef.js"></script>
...
无论如何,以上的提示将有助于防止这些类型的问题。
顺便提一下,您可能需要考虑利用浏览器的异步特性来拉取资源,从而获得某些速度优势。 Web浏览器最多可以同时打开4个异步连接,这意味着您的一个巨大脚本可能需要比分成块的同一脚本更长时间才能加载!还有Yahoo Research表明,合并脚本会产生更快的结果,因此结果因情况而异。
由于打开和关闭多个HTTP连接所需的时间与限制自己只使用单个连接而不是多个异步连接所花费的时间之间存在平衡,因此您可能需要在自己的端上进行一些测试以验证哪种方法在您的情况下最有效。也许打开所有连接所需的时间被浏览器异步下载所有脚本并超过打开/关闭连接的延迟所抵消。
话虽如此,在大多数情况下,合并脚本很可能会带来最快的速度增益,并被认为是最佳实践。