动态载入js提高网页打开速度的方法


Posted in Javascript onJuly 04, 2014

一般来说如果一次性的载入所有需要的JavaScript代码,就会造成初始网页打开速度变慢,但是很多载入的代码又并不需要使用,这种无谓的性能浪费应该予以避免。如果要动态载入JavaScript代码,可以利用DOM模型在HTML文档中添加<script>结点,并将此结点的src属性(即 外联 Javascript文件)设置为需要动态载入的JavaScript代码。

下面就是完成这样功能的一个示例:

(1)、新建JsLoaderTest.html文件

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
<title>按需载入JavaScript代码的例子</title> 
<script type="text/javascript"> 
  function JsLoader(){ 
  this.load=function(url){ 
      //获取所有的<script>标记 
      var ss=document.getElementsByTagName("script"); 
      //判断指定的文件是否已经包含,如果已包含则触发onsuccess事件并返回 
      for (i=0;i<ss.length;i++){ 
        if (ss[i].src && ss[i].src.indexOf(url)!=-1){ 
          this.onsuccess(); 
          return; 
        } 
      } 
      //创建script结点,并将其属性设为外联JavaScript文件 
      s=document.createElement("script"); 
      s.type="text/javascript"; 
      s.src=url; 
      //获取head结点,并将<script>插入到其中 
      var head=document.getElementsByTagName("head")[0]; 
      head.appendChild(s); 
      //获取自身的引用 
      var self=this; 
      //对于IE浏览器,使用readystatechange事件判断是否载入成功 
      //对于其他浏览器,使用onload事件判断载入是否成功 
      //s.onload=s.onreadystatechange=function(){ 
      s.onload=s.onreadystatechange=function(){ 
        //在此函数中this指针指的是s结点对象,而不是JsLoader实例, 
        //所以必须用self来调用onsuccess事件,下同。 
        if (this.readyState && this.readyState=="loading") return; 
        self.onsuccess(); 
      } 
      s.onerror=function(){ 
        head.removeChild(s); 
        self.onfailure(); 
      } 
    }; 
    //定义载入成功事件 
    this.onsuccess=function(){}; 
    //定义失败事件 
    this.onfailure=function(){}; 
  } 
  function btnClick(){ 
      //创建对象 
    var jsLoader=new JsLoader(); 
    //定义载入成功处理程序 
    jsLoader.onsuccess=function(){ 
       sayHello(); 
    } 
    //定义载入失败处理程序 
    jsLoader.onfailure=function(){ 
       alert("文件载入失败!"); 
    } 
    //开始载入 
    jsLoader.load("hello.js"); 
  } 
</script> 
</head> 
<body> 
<label> 
<input type="submit" name="Submit" onClick="javascript:btnClick()" value="载入JavaScript文件"> 
</label> 
</body> 
</html>

(2)、新建hello.js文件,包含如下代码:

// JavaScript Document 
function sayHello(){ 
  alert("Hello World!成功载入JavaScript文件");   
} 
// JavaScript Document
function sayHello(){
  alert("Hello World!成功载入JavaScript文件");  
}
Javascript 相关文章推荐
javascript让setInteval里的函数参数中的this指向特定的对象
Jan 31 Javascript
jQuery 表格工具集
Apr 25 Javascript
JS window对象的top、parent、opener含义介绍
Dec 03 Javascript
js实现div的切换特效上一个下一个
Feb 11 Javascript
document.addEventListener使用介绍
Mar 07 Javascript
JavaScript indexOf方法入门实例(计算指定字符在字符串中首次出现的位置)
Oct 17 Javascript
AngularJS学习笔记之基本指令(init、repeat)
Jun 16 Javascript
微信小程序开发的四十个技术窍门总结(推荐)
Jan 23 Javascript
jQuery操作attr、prop、val()/text()/html()、class属性
May 23 jQuery
微信小程序实现消息框弹出动画
Apr 18 Javascript
Node.js API详解之 assert模块用法实例分析
May 26 Javascript
vue实现简单学生信息管理
May 30 Javascript
JS中getYear()和getFullYear()区别分析
Jul 04 #Javascript
兼容IE、firefox以及chrome的js获取时间(getFullYear)
Jul 04 #Javascript
JS根据年月获得当月天数的实现代码
Jul 03 #Javascript
js实现局部页面打印预览原理及示例代码
Jul 03 #Javascript
window.returnValue使用方法示例介绍
Jul 03 #Javascript
基于javascript的JSON格式页面展示美化方法
Jul 02 #Javascript
jQuery窗口、文档、网页各种高度的精确理解
Jul 02 #Javascript
You might like
isset和empty的区别
2007/01/15 PHP
本地机apache配置基于域名的虚拟主机详解
2013/08/10 PHP
PHP5.5在windows安装使用memcached服务端的方法
2014/04/16 PHP
PHP整数取余返回负数的相关解决方法
2014/05/15 PHP
学习php设计模式 php实现合成模式(composite)
2015/12/08 PHP
在WordPress中实现发送http请求的相关函数解析
2015/12/29 PHP
替换php字符串中的单引号为双引号的方法
2017/02/16 PHP
thinkphp 验证码 的使用小结
2017/05/07 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
PHP二维关联数组的遍历方式(实例讲解)
2017/10/18 PHP
jQuery powerFloat万能浮动层下拉层插件使用介绍
2010/12/27 Javascript
JS扩展方法实例分析
2015/04/15 Javascript
jQuery动态效果显示人物结构关系图的方法
2015/05/07 Javascript
详解Webwork中Action 调用的方法
2016/02/02 Javascript
jQuery中text() val()和html()的区别实例详解
2016/06/28 Javascript
AngularJS中的JSONP实例解析
2016/12/01 Javascript
浅析BootStrap中Modal(模态框)使用心得
2016/12/24 Javascript
详解VUE中v-bind的基本用法
2017/07/13 Javascript
在vue中使用echars实现上浮与下钻效果
2019/11/08 Javascript
python使用datetime模块计算各种时间间隔的方法
2015/03/24 Python
python实现对一个完整url进行分割的方法
2015/04/29 Python
完美解决Python 2.7不能正常使用pip install的问题
2018/06/12 Python
python3实现猜数字游戏
2020/12/07 Python
python 基于TCP协议的套接字编程详解
2019/06/29 Python
Python中那些 Pythonic的写法详解
2019/07/02 Python
python plotly绘制直方图实例详解
2019/07/22 Python
简单了解Python变量作用域正确使用方法
2020/06/12 Python
实例教程 一款纯css3实现的数字统计游戏
2014/11/10 HTML / CSS
会计电算化专业毕业生求职信范文
2013/12/10 职场文书
应聘面试自我评价
2014/01/24 职场文书
小学生2014国庆节演讲稿:祖国在我心中
2014/09/21 职场文书
建筑横幅标语
2014/10/09 职场文书
运动会搞笑广播稿
2014/10/14 职场文书
2015年世界急救日宣传活动方案
2015/05/06 职场文书
关于元旦的广播稿2016
2015/12/17 职场文书
left join、inner join、right join的区别
2021/04/05 MySQL