动态载入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的变量的数据类型的判断方法
Aug 14 Javascript
Eclipse编辑jsp、js文件时卡死现象的解决办法汇总
Feb 02 Javascript
js密码强度实时检测代码
Mar 02 Javascript
深入理解JavaScript内置函数
Jun 03 Javascript
jQuery插件HighCharts绘制简单2D折线图效果示例【附demo源码】
Mar 21 jQuery
js实现登录与注册界面
Nov 01 Javascript
ES6 中可以提升幸福度的小功能
Aug 06 Javascript
vue中使用elementUI组件手动上传图片功能
Dec 13 Javascript
JavaScript实现飞舞的泡泡效果
Feb 07 Javascript
Vue中keep-alive 实现后退不刷新并保持滚动位置
Mar 17 Javascript
解决vue页面刷新,数据丢失的问题
Nov 24 Vue.js
jQuery实现容器间的元素拖拽功能
Dec 01 jQuery
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
PHP5.4中json_encode中文转码的变化小结
2013/01/30 PHP
PHP mkdir()无写权限的问题解决方法
2014/06/19 PHP
php 类中的常量、静态属性、非静态属性的区别
2017/04/09 PHP
PHP实现网站访问量计数器
2017/10/27 PHP
Yii框架学习笔记之session与cookie简单操作示例
2019/04/30 PHP
PHP filter_var() 函数, 验证判断EMAIL,URL等
2021/03/09 PHP
在 IE 中调用 javascript 打开 Excel 表
2006/12/21 Javascript
JavaScript事件列表解说
2006/12/22 Javascript
当jQuery遭遇CoffeeScript的时候 使用分享
2011/09/17 Javascript
jquery $.each()使用探讨
2013/09/23 Javascript
如何判断微信内置浏览器(通过User Agent实现)
2014/09/01 Javascript
js实现的星星评分功能函数
2015/12/09 Javascript
一道关于JavaScript变量作用域的面试题
2016/03/08 Javascript
jquery easyui datagrid实现增加,修改,删除方法总结
2016/05/25 Javascript
jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)
2016/06/08 Javascript
svg动画之动态描边效果
2017/02/22 Javascript
JavaScript Uploadify文件上传实例
2017/02/28 Javascript
原生JavaScript实现精美的淘宝轮播图效果示例【附demo源码下载】
2017/05/27 Javascript
Vue 组件间的样式冲突污染
2017/08/31 Javascript
JS实现中英文混合文字溢出友好截取功能
2018/08/06 Javascript
jquery实现自定义树形表格的方法【自定义树形结构table】
2019/07/12 jQuery
JavaScript回调函数callback用法解析
2020/01/14 Javascript
nodejs处理tcp连接的核心流程
2021/02/26 NodeJs
[38:32]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第二局
2016/02/26 DOTA
python安装numpy&amp;安装matplotlib&amp; scipy的教程
2017/11/02 Python
安装python及pycharm的教程图解
2019/10/10 Python
浅谈PyTorch的可重复性问题(如何使实验结果可复现)
2020/02/20 Python
Python类的动态绑定实现原理
2020/03/21 Python
用html5实现语音搜索框的方法
2014/03/18 HTML / CSS
24个canvas基础知识小结
2014/12/17 HTML / CSS
2015年上半年物业工作总结
2015/03/30 职场文书
同意转租证明
2015/06/24 职场文书
应用最多的公文《通知》如何写?
2019/04/02 职场文书
MySQL为数据表建立索引的原则详解
2022/03/03 MySQL
动态规划之使用备忘录来改进Javascript函数
2022/04/07 Javascript
html中两种获取标签内的值的方法
2022/06/10 HTML / CSS