使用异步加载JavaScript文件来提高网页性能

Web开发

通常JavaScript文件的加载会占用网页中其他元素的下载资源,在一些特别追求Web应用响应速度而且JavaScript文件并不那么小的时候,可以考虑使用异步加载JavaScript的方法来避免影响正常内容的加载进程。

异步加载的思路很简单:

  1. 创建一个script的DOM节点;
  2. 对其的type属性赋值为text/javascript
  3. 再指定它的src属性为要加载的js文件URL;
  4. 把这个DOM节点加入到页面中。


它与异步加载图片的方法类似,但也有区别:

  1. 一旦它被指定了src属性,不管有没有被插入到页面中,浏览器就会马上开始下载;
  2. 这个DOM节点可以插入到head和body里的任何位置。

实现的代码如下:

function loadScript(url, callback){
 
    var script = document.createElement("script")
    script.type = "text/javascript";
 
    if (script.readyState){  //IE
        script.onreadystatechange = function(){
            if (script.readyState == "loaded" ||
                    script.readyState == "complete"){
                script.onreadystatechange = null;
                callback();
            }
        };
    } else {  //Others: Firefox, Safari, Chrome, and Opera
        script.onload = function(){
            callback();
        };
    }
 
    script.src = url;
    document.body.appendChild(script);
}

使用时,只要简单地传递JavaScript文件的URL和回调函数即可:

loadScript("http://yui.yahooapis.com/2.7.0/build/yahoo/yahoo-min.js",
    function(){
        YAHOO.namespace("mystuff");
 
    //more...
});

更多内容,请参看:

loading scripts without blocking by Steve Souder
Loading JavaScript without blocking by Nicholas C. Zakas
Even Faster Web Sites: Performance Best Practices for Web Developers

Related posts

1 Comment

  1. Lu Yinhui  •  Aug 15, 2009 @10:19 am

    让我想起一本书叫Hijax 里面接介绍了这种做法的思想

Leave a Reply

Allowed tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>