动态载入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 相关文章推荐
js模拟实现Array的sort方法
Dec 11 Javascript
javascript事件问题
Sep 05 Javascript
基于JQuery的抓取博客园首页RSS的代码
Dec 01 Javascript
jQuery自定义添加&quot;$&quot;与解决&quot;$&quot;冲突的方法
Jan 19 Javascript
JavaScript中调用函数的4种方式代码实例
Jul 08 Javascript
jQuery实现的自适应焦点图效果完整实例
Aug 24 Javascript
Bootstrap导航条学习使用(二)
Feb 08 Javascript
vue2.5.2使用http请求获取静态json数据的实例代码
Feb 27 Javascript
Vuejs2 + Webpack框架里,模拟下载的实例讲解
Sep 05 Javascript
微信小程序中悬浮窗功能的实现代码
Aug 02 Javascript
JavaScript实现模态对话框实例
Jan 13 Javascript
JavaScript快速调试的两个技巧
Nov 04 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
如何实现给定日期的若干天以后的日期
2006/10/09 PHP
php中使用$_REQUEST需要注意的一个问题
2013/05/02 PHP
PHP文件及文件夹操作之创建、删除、移动、复制
2016/07/13 PHP
javascript getElementsByName()的用法说明
2009/07/31 Javascript
为radio类型的INPUT添加客户端脚本(附加实现JS来禁用onClick事件思路代码)
2010/11/11 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
2014/04/10 Javascript
node.js中的fs.appendFile方法使用说明
2014/12/17 Javascript
JS取得绝对路径的实现代码
2015/01/16 Javascript
node.js中的forEach()是同步还是异步呢
2015/01/29 Javascript
js基础知识(公有方法、私有方法、特权方法)
2015/11/06 Javascript
JavaScript实现复制或剪切内容到剪贴板功能的方法
2016/05/23 Javascript
JavaScript数据结构之二叉树的遍历算法示例
2017/04/13 Javascript
js实现省市级联效果分享
2017/08/10 Javascript
详解基于vue的服务端渲染框架NUXT
2018/06/20 Javascript
Vuejs 实现简易 todoList 功能 与 组件实例代码
2018/09/10 Javascript
VUE基于NUXT的SSR 服务端渲染
2018/11/30 Javascript
js实现延迟加载的几种方法详解
2019/01/19 Javascript
jQuery实现带3D切割效果的轮播图功能示例【附源码下载】
2019/04/04 jQuery
Vue组件系列开发之模态框
2019/04/18 Javascript
vue实现导航标题栏随页面滚动渐隐渐显效果
2020/03/12 Javascript
vue 使用 vue-pdf 实现pdf在线预览的示例代码
2020/04/26 Javascript
[00:06]Yes,it worked!小卡尔成功穿越时空加入战场!
2019/07/20 DOTA
python 多维切片之冒号和三个点的用法介绍
2018/04/19 Python
python datetime中strptime用法详解
2019/08/29 Python
python中的插入排序的简单用法
2021/01/19 Python
Hawes & Curtis官网:英国经典品牌
2019/07/27 全球购物
Android面试题及答案
2015/09/04 面试题
什么是重载?CTS、CLS和CLR分别做何解释
2012/05/06 面试题
会计专业毕业生自我评价
2013/09/25 职场文书
内科护士实习自我鉴定
2013/10/17 职场文书
学习型党组织建设经验材料
2014/05/26 职场文书
优秀会计求职信
2014/07/04 职场文书
2014年协会工作总结
2014/11/22 职场文书
公证处委托书
2015/01/28 职场文书
大学生社会实践感想
2015/08/11 职场文书
MySQL中order by的执行过程
2022/06/05 MySQL