动态载入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 参考教程
Dec 29 Javascript
javascript验证只能输入数字和一个小数点示例
Oct 21 Javascript
简单介绍JavaScript的变量和数据类型
Jun 03 Javascript
在AngularJS中使用jQuery的zTree插件的方法
Apr 21 Javascript
jQuery EasyUI学习教程之datagrid点击列表头排序
Jul 09 Javascript
微信js-sdk分享功能接口常用逻辑封装示例
Oct 13 Javascript
[Bootstrap-插件使用]Jcrop+fileinput组合实现头像上传功能实例代码
Dec 20 Javascript
Node学习记录之cluster模块
May 31 Javascript
详解基于Bootstrap+angular的一个豆瓣电影app
Jun 26 Javascript
关于Angularjs中跨域设置白名单问题
Apr 17 Javascript
更优雅的微信小程序骨架屏实现详解
Aug 07 Javascript
uniapp与webview之间的相互传值的实现
Jun 29 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
用C/C++扩展你的PHP 为你的php增加功能
2012/09/06 PHP
thinkphp命名空间用法实例详解
2015/12/30 PHP
PHP实现支付宝即时到账功能
2016/12/21 PHP
PHP实现打包zip并下载功能
2018/06/12 PHP
一个简单的JavaScript数据缓存系统实现代码
2010/10/24 Javascript
jquery实现保存已选用户
2014/07/21 Javascript
基于 Docker 开发 NodeJS 应用
2014/07/30 NodeJs
js实现二代身份证号码验证详解
2014/11/20 Javascript
javascript检测flash插件是否被禁用的方法
2016/01/14 Javascript
Javascript数组Array方法解读
2016/03/13 Javascript
vue的Virtual Dom实现snabbdom解密
2017/05/03 Javascript
利用纯JS实现像素逐渐显示的方法示例
2017/08/14 Javascript
prototype.js简单实现ajax功能示例
2017/10/18 Javascript
WebPack配置vue多页面的技巧
2018/05/15 Javascript
js类的继承定义与用法分析
2019/06/21 Javascript
Vue项目打包压缩的实现(让页面更快响应)
2020/03/10 Javascript
Vue的Options用法说明
2020/08/14 Javascript
python实现异步回调机制代码分享
2014/01/10 Python
Python格式化压缩后的JS文件的方法
2015/03/05 Python
浅谈编码,解码,乱码的问题
2016/12/30 Python
Python使用sorted排序的方法小结
2017/07/28 Python
提升Python程序性能的7个习惯
2019/04/14 Python
django 消息框架 message使用详解
2019/07/22 Python
python迭代器常见用法实例分析
2019/11/22 Python
Django 自定义404 500等错误页面的实现
2020/03/08 Python
python3爬虫中多线程进行解锁操作实例
2020/11/25 Python
软件配置管理有什么好处
2015/04/15 面试题
如何写好建议书
2014/03/13 职场文书
演讲稿格式范文
2014/05/19 职场文书
电子信息专业应届生自荐信
2014/06/04 职场文书
感恩老师演讲稿400字
2014/08/28 职场文书
机关作风建设自查报告及整改措施
2014/10/21 职场文书
部队2015年终工作总结
2015/04/02 职场文书
送给小学生的暑假礼物!小学生必背99首古诗
2019/07/02 职场文书
门面租赁合同范文
2019/08/06 职场文书
Java 在线考试云平台的实现
2021/11/23 Java/Android