动态载入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 相关文章推荐
巧用jQuery选择器提高写表单效率的方法
Aug 19 Javascript
jQuery和JavaScript节点插入元素的方法对比
Nov 18 Javascript
微信小程序 石头剪刀布实例代码
Jan 04 Javascript
详解微信小程序开发之——wx.showToast(OBJECT)的使用
Jan 18 Javascript
jquery Easyui Datagrid实现批量操作(编辑,删除,添加)
Feb 20 Javascript
Validform验证时可以为空否则按照指定格式验证
Oct 20 Javascript
vue2.0之多页面的开发的示例
Jan 30 Javascript
微信小程序项目实践之验证码倒计时功能
Jul 18 Javascript
函数式编程入门实践(一)
Apr 20 Javascript
浅谈webpack和webpack-cli模块源码分析
Jan 19 Javascript
vue移动端写的拖拽功能示例代码
Sep 09 Javascript
HTML+VUE分页实现炫酷物联网大屏功能
May 27 Vue.js
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
mysql 字段类型说明
2007/04/27 PHP
PHP获取数组长度或某个值出现次数的方法
2015/02/11 PHP
分享一个Laravel好用的Cache宏
2015/03/02 PHP
Laravel基础-关于引入公共文件的两种方式
2019/10/18 PHP
PHP 实现 WebSocket 协议原理与应用详解
2020/04/22 PHP
jQuery 学习第七课 扩展jQuery的功能 插件开发
2010/05/17 Javascript
JavaScript NaN和Infinity特殊值 [译]
2012/09/20 Javascript
jQuery随机切换图片的小例子
2013/04/18 Javascript
改变隐藏的input中value的值代码
2013/12/30 Javascript
jquery使用remove()方法删除指定class子元素
2015/03/26 Javascript
JQuery中clone方法复制节点
2015/05/18 Javascript
jQuery easyui刷新当前tabs的方法
2016/09/23 Javascript
bootstrap模态框垂直居中效果
2016/12/03 Javascript
JavaScript日期对象(Date)基本用法示例
2017/01/18 Javascript
vue.js实现插入数值与表达式的方法分析
2018/07/06 Javascript
vue中使用mxgraph的方法实例代码详解
2019/05/17 Javascript
js实现随机8位验证码
2020/07/24 Javascript
vue项目中使用vue-layer弹框插件的方法
2020/03/11 Javascript
解决nuxt页面中mounted、created、watch执行两遍的问题
2020/11/05 Javascript
js实现简单的轮播图效果
2020/12/13 Javascript
用python实现的可以拷贝或剪切一个文件列表中的所有文件
2009/04/30 Python
破解安装Pycharm的方法
2018/10/19 Python
在python中利用opencv简单做图片比对的方法
2019/01/24 Python
python爬取cnvd漏洞库信息的实例
2019/02/14 Python
浅谈python之高阶函数和匿名函数
2019/03/21 Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
2019/05/28 Python
Python利用requests模块下载图片实例代码
2019/08/12 Python
html5新增的属性和废除的属性简要概述
2013/02/20 HTML / CSS
美国知名的旅游网站:OneTravel
2018/10/09 全球购物
尤为Wconcept中国官网:韩国设计师品牌服饰
2019/01/10 全球购物
俄罗斯在线手表和珠宝商店:AllTime
2019/09/28 全球购物
大学生个人求职信范文
2013/09/21 职场文书
应届生护士求职信
2013/11/01 职场文书
大学生自我鉴定评语
2014/01/27 职场文书
房地产资料员岗位职责
2014/07/02 职场文书
导游词之塘栖古镇
2019/12/04 职场文书