1.多数浏览器使用单一进程来处理用户界面刷新和javascript脚本的执行。所以同一时刻只能做同一件事。javascript执行过程耗时越久,浏览器等待相应的时间就越长。
2.<script>标签用来加载出现在<head>中的外链javascript文件,紧挨着<link>标签用来加载外部css文件或者其他页面元素。理论上来说,把与样式和行为有关的脚本放在一起,并先加载他们,这样有助于确保页面的渲染和交互的正确性。但这样会带来严重的性能问题。
3.由于脚本阻塞页面其他资源的下载,建议将所有的<script>标签放到<body>标签的底部。
4.多个<script>外链脚本的下载会带来http请求的性能开销。所以下载单个100kb的文件将比下载4个25kb的文件快。也即减少页面中外链的数量将会改善性能。
5.无阻塞脚本的秘诀在于,在页面完成加载后才加载javascript。意味着在window对象的load事件触发后在下载脚本。
6.方法一:defer属性(ie中)
属性规定是否对脚本执行进行延迟,直到页面加载为止。
该属性指明元素含有的脚本不会修改dom。


方法二:html5中新增加的方法async="true"(ie9中可以)
async 属性规定一旦脚本可用,则会异步执行。
注释:async 属性仅适用于外部脚本(只有在使用 src 属性时)。


方法三:动态加载脚本
动态加载脚本节点下载文件时,返回的代码通常会立即执行。
书上说在火狐,谷歌等浏览器上可以使用<script>元素接收完成时触发的一个load事件来监听脚本加载完成时的状态。


可在我测试后,无论是在哪个浏览器都没有效果,不知道是为什么!求知道的博友们留言给我。谢谢!
而ie中有另外一种实现方式,他会触发一个readystatechange事件。可以用来监听script的加载完成。<script>元素提供一个readystate属性。
该属性有5种取值:


然后在微软的相关文档中表明,在<script>生命周期中,并非每个取值都会用到。所以最靠谱的就是检查“loaded”跟"complete"。


该书中还有一个封装好的标准及ie特有的实现方法:


使用方法:
loadscript("scprit1.js",function(){
alert("外部js加载完成!")
})
转载:http://www.cnblogs.com/zqzjs/p/4802908.html