十五年测试老手,长期负责WEB\APP 项目测试,目前主要负责团队管理工作。

(转)提高网页打开速度的方法_5(按需加载Javascript & css)

上一篇 / 下一篇  2011-02-08 19:16:55 / 个人分类:网速优化

如果一次载入所有需要的JavaScript代码会造成初始网页打开速度变慢,而且很多载入的代码并不需要使用,这种无谓的性能浪费应该 避免。如果要动态载入JavaScript代码,可以利用DOM模型在HTML文档中添加<script>结点,并将此结点的src属性(即 外联 Javascript文件)设置为需要动态载入的JavaScript代码。
TJe0Q,XX}z0
7DU_!Z2z;M%w0
"n/ZlQ,b:uV0下面是一个完成这样功能的例子。51Testing软件测试网_YFCIx
51Testing软件测试网n wFCk6S+P?
(1)、新建JsLoaderTest.html文件51Testing软件测试网q _FS+Lb {
51Testing软件测试网 rYUfy6{)P l
Java代码复制代码
  1. <html xmlns="http://www.w3.org/1999/xhtml">   
  2. <head>   
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />   
  4. <title>按需载入JavaScript代码的例子</title>   
  5. <script type="text/javascript">   
  6.     function JsLoader(){   
  7.   
  8.    this.load=function(url){   
  9.             //获取所有的<script>标记  
  10.             var ss=document.getElementsByTagName("script");   
  11.             //判断指定的文件是否已经包含,如果已包含则触发onsuccess事件并返回  
  12.             for (i=0;i<ss.length;i++){   
  13.                 if (ss[i].src && ss[i].src.indexOf(url)!=-1){   
  14.                     this.onsuccess();   
  15.                     return;   
  16.                 }   
  17.             }   
  18.             //创建script结点,并将其属性设为外联JavaScript文件  
  19.             s=document.createElement("script");   
  20.             s.type="text/javascript";   
  21.             s.src=url;   
  22.             //获取head结点,并将<script>插入到其中  
  23.             var head=document.getElementsByTagName("head")[0];   
  24.             head.appendChild(s);   
  25.               
  26.             //获取自身的引用  
  27.             var self=this;   
  28.             //对于IE浏览器,使用readystatechange事件判断是否载入成功  
  29.             //对于其他浏览器,使用onload事件判断载入是否成功  
  30.             //s.onload=s.onreadystatechange=function(){  
  31.             s.onload=s.onreadystatechange=function(){   
  32.                 //在此函数中this指针指的是s结点对象,而不是JsLoader实例,  
  33.                 //所以必须用self来调用onsuccess事件,下同。  
  34.                 if (this.readyState && this.readyState=="loading"return;   
  35.                 self.onsuccess();   
  36.             }   
  37.             s.onerror=function(){   
  38.                 head.removeChild(s);   
  39.                 self.onfailure();   
  40.             }   
  41.         };   
  42.         //定义载入成功事件  
  43.         this.onsuccess=function(){};   
  44.         //定义失败事件  
  45.         this.onfailure=function(){};   
  46.     }   
  47.       
  48.     function btnClick(){   
  49.             //创建对象  
  50.         var jsLoader=new JsLoader();   
  51.       
  52.         //定义载入成功处理程序  
  53.         jsLoader.onsuccess=function(){   
  54.              sayHello();   
  55.         }   
  56.       
  57.         //定义载入失败处理程序  
  58.         jsLoader.onfailure=function(){   
  59.              alert("文件载入失败!");   
  60.         }   
  61.       
  62.         //开始载入  
  63.         jsLoader.load("hello.js");   
  64.     }   
  65.   
  66. </script>   
  67. </head>   
  68.   
  69. <body>   
  70. <label>   
  71. <input type="submit" name="Submit" onClick="javascript.:btnClick()" value="载入JavaScript文件">   
  72. </label>   
  73. </body>   
  74. </html>  

] {8u!r zh^.i0}0(2)、新建hello.js文件,包含如下代码:
e+ewOG#A0
Java代码复制代码
  1. // JavaScript Document  
  2. function sayHello(){   
  3.     alert("Hello World!成功载入JavaScript文件");      
  4. }  

TAG: 网速优化

 

评分:0

我来说两句

Open Toolbar