动态载入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 图片轮播(5张图片)
Dec 30 Javascript
js 获取和设置css3 属性值的实现方法
May 06 Javascript
JQuery给元素绑定click事件多次执行的解决方法
May 29 Javascript
鼠标悬停小图标显示大图标
Jan 22 Javascript
使用jquery提交form表单并自定义action的方法
May 25 Javascript
完美解决浏览器跨域的几种方法(汇总)
May 08 Javascript
bootstrap日期插件daterangepicker使用详解
Oct 19 Javascript
代码实例ajax实现点击加载更多数据图片
Oct 12 Javascript
详解Angular Forms中自定义ngModel绑定值的方式
Dec 10 Javascript
关于微信小程序map组件z-index的层级问题分析
Jul 09 Javascript
vuex actions异步修改状态的实例详解
Nov 06 Javascript
全网小程序接口请求封装实例代码
Nov 06 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环境配置 php5 mysql5 apache2 phpmyadmin安装与配置
2006/11/17 PHP
基于PHP文件操作的详解
2013/06/05 PHP
php图片处理函数获取类型及扩展名实例
2014/11/19 PHP
PHP判断IP并转跳到相应城市分站的方法
2015/03/25 PHP
PHP 的比较运算与逻辑运算详解
2016/05/12 PHP
php实现保存周期为1天的购物车类
2017/07/07 PHP
如何在PHP中生成随机数
2020/06/04 PHP
function, new function, new Function之间的区别
2007/03/08 Javascript
javascript 动态设置已知select的option的value值的代码
2009/12/16 Javascript
javascript demo 基本技巧
2009/12/18 Javascript
JQuery判断radio是否选中并获取选中值的示例代码
2014/10/17 Javascript
js实现从中间开始往上下展开网页窗口的方法
2015/03/02 Javascript
js脚本分页代码分享(7种样式)
2015/08/19 Javascript
简述JavaScript提交表单的方式 (Using JavaScript Submit Form)
2016/03/18 Javascript
Vue异步组件处理路由组件加载状态的解决方案
2018/09/07 Javascript
vue学习之Vue-Router用法实例分析
2020/01/06 Javascript
Python性能优化技巧
2015/03/09 Python
九步学会Python装饰器
2015/05/09 Python
JPype实现在python中调用JAVA的实例
2017/07/19 Python
python如何实现一个刷网页小程序
2018/11/27 Python
Form表单及django的form表单的补充
2019/07/25 Python
python中什么是面向对象
2020/06/11 Python
python报错TypeError: ‘NoneType‘ object is not subscriptable的解决方法
2020/11/05 Python
python进行二次方程式计算的实例讲解
2020/12/06 Python
python 实现Requests发送带cookies的请求
2021/02/08 Python
国际书籍零售商:Wordery
2017/11/01 全球购物
小米旗下精品生活电商平台:小米有品
2018/12/18 全球购物
最新个人职业生涯规划书
2014/01/22 职场文书
员工考核管理制度
2014/02/02 职场文书
庆元旦迎新年广播稿
2014/02/18 职场文书
社团2014年植树节活动总结
2014/03/11 职场文书
新年爱情寄语
2014/04/08 职场文书
中文专业毕业生自荐信
2014/05/24 职场文书
2014年服务员个人工作总结
2014/12/23 职场文书
2016年幼儿园教师政治学习心得体会
2016/01/23 职场文书
Windows Server 2012 R2服务器安装与配置的完整步骤
2022/07/15 Servers