无阻塞加载js,防止因js加载不了影响页面显示的问题


Posted in Javascript onDecember 18, 2016

浏览器加载静态资源和js的方式都是线性加载,所以一般情况可以将js放到</body>前,防止UI线程的阻塞。

而某些时候我们既希望js在整个网页的头部就加载,又担心js阻塞导致网站加载缓慢,就可以用到无阻塞加载js技术。

Dynamic Script Elements 动态脚本元素

DOM允许我们使用Javascript动态创建HTML的几乎所有文档内容,一个新的<script>元素可以非常容易的通过标准DOM创建:

var script = document.createElement ("script"); 
script.type = "text/javascript"; 
script.src = "file1.js";  
document.body.appendChild(script);

新的<script>元素加载file1.js源文件。此文件当元素添加到页面后立刻开始下载。此技术的重点在于:无论在何处启动下载,文件的下载和运行都不会阻塞其他页面处理过程。

当文件使用动态脚本节点下载时,返回的代码通常立即执行(除了Firefox和Opera,它们将等待此前的所有动态脚本节点执行完毕)。

大多数情况下,我们希望调用一个函数就可以实现Javascript文件的动态下载。下面的函数封装实现了标准实现和IE实现:

function loadScript(url, callback){ 
  var script = document.createElement ("script") ; 
  script.type = "text/javascript"; 
    
  if (script.readyState){ //IE 
    script.onreadystatechange = function(){ 
     if (script.readyState == "loaded" || script.readyState == "complete"){ 
      script.onreadystatechange = null; 
      callback();  
     } 
    }; 
   }  
   else { //Others 
    script.onload = function(){ callback(); 
   };  
  } 
  script.src = url; 
  document.getElementsByTagName("head")[0].appendChild(script);  
 } 
 
loadScript("file1.js", function(){ //调用 
  alert("File is loaded!");  
});

此函数接受两个参数:Javascript文件的Url和一个当Javascript接收完成时触发的回调函数。属性检查用于决定监视哪种事件。最后一步src属性,并将javascript文件添加到head。

动态脚本加载是非阻塞Javascript下载中最常用的模式,因为它可以跨浏览器,而且简单易用。

以上这篇无阻塞加载js,防止因js加载不了影响页面显示的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js arguments.callee的应用代码
May 07 Javascript
利用腾讯的ip地址库做ip物理地址定位
Jul 24 Javascript
jquery 操作日期、星期、元素的追加的实现代码
Feb 07 Javascript
javaScript 删除字符串空格多种方法小结
Oct 24 Javascript
FF火狐下获取一个元素同类型的相邻元素实现代码
Dec 15 Javascript
用js调用迅雷下载代码的二种方法
Apr 15 Javascript
学习JavaScript编程语言的8张思维导图分享
Mar 27 Javascript
三种Node.js写文件的方式
Mar 08 Javascript
浅析如何利用angular结合translate为项目实现国际化
Dec 08 Javascript
在Vue组件中获取全局的点击事件方法
Sep 06 Javascript
如何使用Node.js爬取任意网页资源并输出PDF文件到本地
Jun 17 Javascript
bootstrap table插件动态加载表头
Jul 19 Javascript
Node.js连接postgreSQL并进行数据操作
Dec 18 #Javascript
纯js实现悬浮按钮组件
Dec 17 #Javascript
Jquery Easyui搜索框组件SearchBox使用详解(19)
Dec 17 #Javascript
Bootstrap CSS组件之按钮下拉菜单
Dec 17 #Javascript
谈谈JS中常遇到的浏览器兼容问题和解决方法
Dec 17 #Javascript
Bootstrap CSS组件之按钮组(btn-group)
Dec 17 #Javascript
谈谈JavaScript中浏览器兼容问题的写法小议
Dec 17 #Javascript
You might like
简单介绍下 PHP5 中引入的 MYSQLI的用途
2007/03/19 PHP
php 调试利器debug_print_backtrace()
2012/07/23 PHP
php发送与接收流文件的方法
2015/02/11 PHP
CodeIgniter配置之database.php用法实例分析
2016/01/20 PHP
js操作二级联动实现代码
2010/07/27 Javascript
HTML中的setCapture和releaseCapture使用介绍
2012/03/21 Javascript
JavaScript中数组对象的那些自带方法介绍
2013/03/12 Javascript
阻止子元素继承父元素事件具体思路及实现
2013/05/02 Javascript
jQuery实现图片信息的浮动显示实例代码
2013/08/28 Javascript
css配合jquery美化 select
2013/11/29 Javascript
javascript搜索框点击文字消失失焦时文本出现
2014/09/18 Javascript
js实现图片点击左右轮播
2015/07/08 Javascript
实例代码详解jquery.slides.js
2015/11/16 Javascript
基于Node.js的强大爬虫 能直接发布抓取的文章哦
2016/01/10 Javascript
JavaScript数据绑定实现一个简单的 MVVM 库
2016/04/08 Javascript
JS实现网页抢购功能(触发,终止脚本)
2017/11/27 Javascript
Vue实现 点击显示再点击隐藏效果(点击页面空白区域也隐藏效果)
2020/01/16 Javascript
Vant Weapp组件踩坑:picker的初始赋值解决
2020/11/12 Javascript
Python解决抛小球问题 求小球下落经历的距离之和示例
2018/02/01 Python
python实现AES加密与解密
2019/03/28 Python
浅谈pytorch池化maxpool2D注意事项
2020/02/18 Python
python中安装django模块的方法
2020/03/12 Python
css3实现背景模糊的三种方式(小结)
2020/05/15 HTML / CSS
HTML5开发动态音频图的实现
2020/07/02 HTML / CSS
美国知名珠宝首饰品牌:Gemvara
2017/10/06 全球购物
毕业自我评价范文
2013/11/17 职场文书
美发店5.1活动方案
2014/01/24 职场文书
疾病捐款倡议书
2014/05/13 职场文书
优质服务演讲稿
2014/05/14 职场文书
红领巾心向党演讲稿
2014/09/10 职场文书
学雷锋倡议书
2015/01/19 职场文书
学校会议通知范文
2015/04/15 职场文书
2015年母亲节活动策划方案
2015/05/04 职场文书
2016年“世界气象日”广播稿
2015/12/17 职场文书
乔迁新居祝福语
2019/11/04 职场文书
python3实现Dijkstra算法最短路径的实现
2021/05/12 Python