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

 更新时间:2016年12月18日 11:32:06   投稿:jingxian  
下面小编就为大家带来一篇无阻塞加载js,防止因js加载不了影响页面显示的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来

浏览器加载静态资源和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中for in 和 for each in的区别

    浅谈javascript中for in 和 for each in的区别

    两个的作用都用来遍历对象,但为什么有了for in语句了还要for each in语句呢,后来看了下for each in开发的文档,for each in是作为E4X标准的一部分在javascript 1.6中发布的,而且它不是ECMAScript标准的一部分
    2015-04-04
  • 微信小程序实现全局搜索代码高亮的示例

    微信小程序实现全局搜索代码高亮的示例

    本篇文章主要介绍了微信小程序实现全局搜索代码高亮的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • 用jscript实现列出安装的软件列表

    用jscript实现列出安装的软件列表

    用jscript实现列出安装的软件列表...
    2007-06-06
  • 微信小程序实现滑动删除

    微信小程序实现滑动删除

    这篇文章主要为大家详细介绍了微信小程序实现滑动删除,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • 原生JS实现登录框邮箱提示

    原生JS实现登录框邮箱提示

    这篇文章主要为大家详细介绍了原生JS实现登录框邮箱提示,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • js获取客户端操作系统类型的方法【测试可用】

    js获取客户端操作系统类型的方法【测试可用】

    这篇文章主要介绍了js获取客户端操作系统类型的方法,可有效的判断常见操作系统的类型,包括Windows、MacOS、Unix及Linux等,涉及javascript页面navigator.userAgent属性操作技巧,需要的朋友可以参考下
    2016-05-05
  • JavaScript获取数组最后一个元素的3种方法以及性能

    JavaScript获取数组最后一个元素的3种方法以及性能

    在开发过程中,我们常常需要得到js数组的最后一个数组元素,下面这篇文章主要给大家介绍了关于JavaScript获取数组最后一个元素的3种方法以及性能,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • 微信小程序接入vant Weapp组件的详细步骤

    微信小程序接入vant Weapp组件的详细步骤

    这篇文章主要介绍了微信小程序接入vant Weapp组件的详细步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • 首页图片漂浮效果示例代码

    首页图片漂浮效果示例代码

    图片漂浮效果想必大家都有见到过吧,一般都是通过js来实现的,下面为大家介绍的这个示例也是通过js实现的
    2014-06-06
  • Nautil 中使用双向数据绑定的实现

    Nautil 中使用双向数据绑定的实现

    这篇文章主要介绍了Nautil 中使用双向数据绑定的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10

最新评论