动态载入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实现倒计时按钮的实现代码
Mar 23 Javascript
jquery 合并内容相同的单元格(示例代码)
Dec 13 Javascript
jquery easyui combox一些实用的小方法
Dec 25 Javascript
jQuery实现购物车数字加减效果
Mar 14 Javascript
JavaScript使用pop方法移除数组最后一个元素用法实例
Apr 06 Javascript
Bootstrap实现响应式导航栏效果
Dec 28 Javascript
微信小程序 保留小数(toFixed)详细介绍
Nov 16 Javascript
原生js实现商品放大镜效果
Jan 12 Javascript
Vue Ajax跨域请求实例详解
Jun 20 Javascript
ReactNative短信验证码倒计时控件的实现代码
Jul 20 Javascript
利用vue.js实现被选中状态的改变方法
Feb 08 Javascript
js校验开始时间和结束时间
May 26 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
php 大数据量及海量数据处理算法总结
2011/05/07 PHP
PHP自定session保存路径及删除、注销与写入的方法
2014/11/18 PHP
深入解析PHP的Laravel框架中的event事件操作
2016/03/21 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
PDO::errorInfo讲解
2019/01/28 PHP
php intval函数用法总结
2019/04/14 PHP
JS获取IUSR_机器名和IWAM_机器名帐号的密码
2006/12/06 Javascript
js动态为代码着色显示行号
2013/05/29 Javascript
chrome浏览器当表单自动填充时如何去除浏览器自动添加的默认样式
2015/10/09 Javascript
jQuery过滤选择器经典应用
2016/08/18 Javascript
利用select实现年月日三级联动的日期选择效果【推荐】
2016/12/13 Javascript
JavaScript仿支付宝6位数字密码输入框
2016/12/29 Javascript
微信小程序开发(二)图片上传+服务端接收详解
2017/01/11 Javascript
webpack分离css单独打包的方法
2018/06/12 Javascript
使用electron制作满屏心特效的示例代码
2018/11/27 Javascript
微信小程序之 catalog 切换实现解析
2019/09/12 Javascript
微信小程序点击顶部导航栏切换样式代码实例
2019/11/12 Javascript
jquery实现垂直手风琴菜单
2020/03/04 jQuery
addEventListener()和removeEventListener()追加事件和删除追加事件
2020/12/04 Javascript
利用Psyco提升Python运行速度
2014/12/24 Python
Python使用openpyxl读写excel文件的方法
2017/06/30 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
2018/07/11 Python
python使用pdfminer解析pdf文件的方法示例
2018/12/20 Python
对python 中class与变量的使用方法详解
2019/06/26 Python
python实现猜数字游戏
2020/03/25 Python
Flask项目中实现短信验证码和邮箱验证码功能
2019/12/05 Python
HTML5 Convas APIs方法详解
2015/04/24 HTML / CSS
澳大利亚现代波西米亚风格女装网站:Bohemian Traders
2018/04/16 全球购物
阿玛尼美妆俄罗斯官网:Giorgio Armani Beauty RU
2020/07/19 全球购物
Perfume’s Club澳大利亚官网:西班牙领先的在线美容店
2021/02/01 全球购物
保密普查工作实施方案
2014/02/25 职场文书
专科生就业求职信
2014/06/22 职场文书
投资入股合作协议书
2014/10/28 职场文书
社区党的群众路线教育实践活动总结材料
2014/10/31 职场文书
红楼梦读书笔记
2015/06/25 职场文书
学习十八大的感悟
2015/08/11 职场文书