完美解决JS文件页面加载时的阻塞问题

 更新时间:2016年12月18日 12:19:38   投稿:jingxian  
下面小编就为大家带来一篇完美解决JS文件页面加载时的阻塞问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

关于页面加载时的时间消费,许多书中都做出了介绍,也提出了很多种方法。本文章就详细介绍XHR注入。

概述:JS分拆的方法

1.XHR注入:就是用ajax异步请求同域包含脚本的文件,然后将返回的字符串转化为脚本使用,该方法不会造成页面渲染和onload事件的阻塞,因为是异步处理,推荐使用。

2.iframe注入:加载一个iframe框架,通过使用iframe框架中的脚本来避免src方式加载脚本的阻塞,但是iframe元素开销较大,不推荐。

3.DOM注入:就是创建script元素,通过制定该元素的src并放入DOM树中,根据该语句书写的文字不同,会造成渲染或onload事件的阻塞。

4. document.write方法:在JS脚本中使用document.write('<script>XXX</script>');这种方法简单粗暴,但是它仍然会造成阻塞,所改变的只是什么时候阻塞。

详细介绍:

第一步:创造ajax函数:1建立XMLHTTPRequest或ActiveXObject对象 2.ajax对象的open方法 3.ajax对象的send方法 4.改写onreadystatechange事件,判断status(200)和readyState(4)属性值,对请求数据类型操作。

第二步:用ajax函数请求一个JS文件。

第三步:两个分支:第一种:拿来主义,eval(请求返回字符串);执行了JS中的函数,达到目的。

第二种:创建script对象,利用该对象的text属性赋值 返回字符串 方式,达到目的。

看代码:

实例JS文件:创建一个100X100的黑色div,并加载到指定元素中。

function test() {
  oDiv = document.createElement('div');
  oDiv.style['width'] = '100px';
  oDiv.style['height'] = '100px';
  oDiv.style['background'] = 'black';
  document.getElementById('header').appendChild(oDiv);
}
test();

页面使用该JS文件

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title></title>
  <style type="text/css">
   *{ margin:0; padding:0;}
  </style>
</head>
<body>
 <div id="header" style=" height:150px; background-color:Red;"></div>
 <div id="init">
 <script type="text/javascript">
   //Ajax获取字符串
function Ajax(Method,url,funcSucc,funcFalse) {
  if (XMLHttpRequest)
    var oAjax = new XMLHttpRequest();
  else {
    var oAjax = new ActiveXObject('Microsoft.XMLHTTP');
  }
  oAjax.open(Method, url, true);
  oAjax.send();
  oAjax.onreadystatechange = function () {
    if (oAjax.readyState == 4) {
      if (oAjax.status == 200) {
        var str = oAjax.responseText;
        funcSucc(str);
      }
      else {
        funcFalse();
      }
    }
  };

   Ajax('GET', 'javascript/load.js', function (str) {
     eval(str);
 //    var oScript = document.createElement('script');
//     oScript.text = str;
//     document.getElementsByTagName('head')[0].appendChild(oScript);

   }, function () {
     alert('失败');
   });
   
   </script>
 </div>
</body>
</html>

以上这篇完美解决JS文件页面加载时的阻塞问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • JS实现获取图片大小和预览的方法完整实例【兼容IE和其它浏览器】

    JS实现获取图片大小和预览的方法完整实例【兼容IE和其它浏览器】

    这篇文章主要介绍了JS实现获取图片大小和预览的方法,结合完整实例形式分析了javascript针对不同浏览器处理图片上传与预览等操作的相关实现技巧,需要的朋友可以参考下
    2017-04-04
  • javascript实现商品图片放大镜

    javascript实现商品图片放大镜

    这篇文章主要为大家详细介绍了javascript实现商品图片放大镜,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • JavaScript实现对JSON对象数组数据进行分页处理

    JavaScript实现对JSON对象数组数据进行分页处理

    这篇文章主要介绍了使用JavaScript实现对JSON对象数组数据进行分页处理,文中有详细的代码示例供大家参考,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-10-10
  • JavaScript 手动实现instanceof的方法

    JavaScript 手动实现instanceof的方法

    instanceof运算符用于检测构造函数的prototype属性是否出现在某个实例对象的原型链上,本文重点给大家介绍JavaScript手动实现instanceof的问题,感兴趣的朋友跟随小编一起看看吧
    2021-10-10
  • javasript实现密码的隐藏与显示

    javasript实现密码的隐藏与显示

    用户输入密码时都是显示的星号了,那么我们希望查看明文要怎么查看呢,下面我们只要使用一段简单的js就可以实现查看密码框的明文了,有需要的小伙伴可以来参考下。
    2015-05-05
  • Javascript实现简单的富文本编辑器附演示

    Javascript实现简单的富文本编辑器附演示

    这篇文章主要介绍了通过Javascript实现的简单富文本编辑器,需要的朋友可以参考下
    2014-06-06
  • JavaScript中高阶函数的巧妙运用

    JavaScript中高阶函数的巧妙运用

    JavaScript中的高阶函数是指可以接受其他函数作为参数或者返回一个函数作为结果的函数,本文介绍了JS中一些高阶函数的妙用,希望对大家有所帮助
    2023-05-05
  • 解决typescript项目报错:找不到模块“xxx”或其相应的类型声明问题

    解决typescript项目报错:找不到模块“xxx”或其相应的类型声明问题

    这篇文章主要介绍了解决typescript项目报错:找不到模块“xxx”或其相应的类型声明问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • js 限制数字 js限制输入实现代码

    js 限制数字 js限制输入实现代码

    在工作中经常会遇到js限制输入方面的要求,本文将详细介绍其实现原理,需要的朋友可以参考下
    2012-12-12
  • JS实现CheckBox复选框全选全不选功能

    JS实现CheckBox复选框全选全不选功能

    在网站的管理后台应用此功能居多,如一次性处理多个产品,或对文章的删除对产品的下架等处理,一条一条的点显然有一些麻烦,如果能每一行放一个checkbox,然后统一处理就好办的多了,今天我就用简单的篇幅来讲解一下这个功能的实现原理和实现过程。
    2015-05-05

最新评论