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


Posted in Javascript onDecember 18, 2016

关于页面加载时的时间消费,许多书中都做出了介绍,也提出了很多种方法。本文章就详细介绍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文件页面加载时的阻塞问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用js小类库获取浏览器的高度和宽度信息
Jan 15 Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
May 15 Javascript
jquery进行数组遍历如何跳出当前的each循环
Jun 05 Javascript
js判断浏览器是否支持html5
Aug 17 Javascript
理解AngularJs指令
Dec 10 Javascript
JS图片等比例缩放方法完整示例
Aug 03 Javascript
Bootstrap Table表格一直加载(load)不了数据的快速解决方法
Sep 17 Javascript
Canvas 制作动态进度加载水球详解及实例代码
Dec 09 Javascript
JS非行间样式获取函数的实例代码
Jun 05 Javascript
几个你不知道的技巧助你写出更优雅的vue.js代码
Jun 11 Javascript
axios使用拦截器统一处理所有的http请求的方法
Nov 02 Javascript
JavaScript console的使用方法实例分析
Apr 28 Javascript
教你一步步用jQyery实现轮播器
Dec 18 #Javascript
Angular.js实现注册系统的实例详解
Dec 18 #Javascript
无阻塞加载js,防止因js加载不了影响页面显示的问题
Dec 18 #Javascript
Node.js连接postgreSQL并进行数据操作
Dec 18 #Javascript
纯js实现悬浮按钮组件
Dec 17 #Javascript
Jquery Easyui搜索框组件SearchBox使用详解(19)
Dec 17 #Javascript
Bootstrap CSS组件之按钮下拉菜单
Dec 17 #Javascript
You might like
PHP 编程请选择正确的文本编辑软件
2006/12/21 PHP
PHP中数组的三种排序方法分享
2012/05/07 PHP
php函数传值的引用传递注意事项分析
2016/06/25 PHP
php5对象复制、clone、浅复制与深复制实例详解
2019/08/14 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
Jquery中Ajax 缓存带来的影响的解决方法
2011/05/19 Javascript
jquery使用ColorBox弹出图片组浏览层实例演示
2013/03/14 Javascript
键盘上一张下一张兼容IE/google/firefox等浏览器
2014/01/28 Javascript
用JavaScript来美化HTML的select标签的下拉列表效果
2015/11/17 Javascript
整理一下常见的IE错误
2016/11/18 Javascript
实例详解JavaScript中setTimeout函数的执行顺序
2017/07/12 Javascript
BootStrap Fileinput插件和Bootstrap table表格插件相结合实现文件上传、预览、提交的导入Excel数据操作步骤
2017/08/07 Javascript
AngularJS 控制器 controller的详解
2017/10/17 Javascript
微信小程序上线发布流程图文详解
2019/05/06 Javascript
js判断在哪个浏览器打开项目的方法
2020/01/21 Javascript
jquery实现进度条状态展示
2020/03/26 jQuery
详解Vue中Axios封装API接口的思路及方法
2020/10/10 Javascript
Python提示[Errno 32]Broken pipe导致线程crash错误解决方法
2014/11/19 Python
python插入数据到列表的方法
2015/04/30 Python
python实现发送邮件功能代码
2017/12/14 Python
对python 调用类属性的方法详解
2019/07/02 Python
利用python计算windows全盘文件md5值的脚本
2019/07/27 Python
Python中读取文件名中的数字的实例详解
2020/12/25 Python
HTML5 图片悬停放大的实现代码示例
2019/12/04 HTML / CSS
英国安全产品购物网站:The Safe Shop
2017/03/20 全球购物
纽约手袋品牌:KARA
2018/03/18 全球购物
ASOS比利时:英国线上零售商及自有品牌
2018/07/29 全球购物
全球领先的在线cosplay服装商店:RoleCosplay
2020/01/18 全球购物
建筑公司文秘岗位职责
2013/11/29 职场文书
四风问题对照检查材料
2014/09/22 职场文书
营销经理工作检讨书
2014/11/03 职场文书
2015年高三年级组工作总结
2015/07/21 职场文书
团队拓展训练心得体会
2016/01/12 职场文书
2016年学校十一国庆节活动总结
2016/04/01 职场文书
JS实现简单控制视频播放倍速的实例代码
2021/04/18 Javascript
pandas中DataFrame检测重复值的实现
2021/05/26 Python