完美解决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 相关文章推荐
window.open不被拦截的实现代码
Aug 22 Javascript
JSON+HTML实现国家省市联动选择效果
May 18 Javascript
编写高性能Javascript代码的N条建议
Oct 12 Javascript
bootstrap的常用组件和栅格式布局详解
May 02 Javascript
Vue动态组件实例解析
Aug 20 Javascript
简单理解Vue中的nextTick方法
Jan 30 Javascript
深入理解Node module模块
Mar 26 Javascript
Three.js实现简单3D房间布局
Dec 30 Javascript
layui 上传文件_批量导入数据UI的方法
Sep 23 Javascript
vue-cli设置publicPath小记
Apr 14 Javascript
微信小程序实现滑动操作代码
Apr 23 Javascript
SSM VUE Axios详解
Oct 05 Vue.js
教你一步步用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&amp;mysql(六)
2006/10/09 PHP
php字符串截取问题
2006/11/28 PHP
php 不同编码下的字符串长度区分
2009/09/26 PHP
js 分页全选或反选标识实现代码
2011/08/09 Javascript
浅析offsetLeft,Left,clientLeft之间的区别
2013/11/30 Javascript
JavaScript利用HTML DOM进行文档操作的方法
2016/03/28 Javascript
jquery 判断div show的状态实例
2016/12/03 Javascript
微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解
2016/12/08 Javascript
JS实现的数字格式化功能示例
2017/02/10 Javascript
gulp加批处理(.bat)实现ng多应用一键自动化构建
2017/02/16 Javascript
Node.js 中使用 async 函数的方法
2017/11/20 Javascript
浅谈webpack打包之后的文件过大的解决方法
2018/03/07 Javascript
jQuery实现的回车触发按钮事件功能示例
2018/03/25 jQuery
JavaScript 正则命名分组【推荐】
2018/06/07 Javascript
用vue-cli开发vue时的代理设置方法
2018/09/20 Javascript
Javascript操作select控件代码实例
2020/02/14 Javascript
Python中的作用域规则详解
2015/01/30 Python
Python 类与元类的深度挖掘 II【经验】
2016/05/06 Python
视觉直观感受若干常用排序算法
2017/04/13 Python
浅谈python内置变量-reversed(seq)
2017/06/21 Python
python实现list由于numpy array的转换
2018/04/04 Python
Python 从相对路径下import的方法
2018/12/04 Python
关于python中密码加盐的学习体会小结
2019/07/15 Python
Python创建一个元素都为0的列表实例
2019/11/28 Python
keras 多任务多loss实例
2020/06/22 Python
django 将自带的数据库sqlite3改成mysql实例
2020/07/09 Python
Eyeko美国:屡获殊荣的睫毛膏、眼线笔和眉妆
2018/07/05 全球购物
财务总监管理职责范文
2014/03/09 职场文书
农村结婚典礼司仪主持词
2014/03/14 职场文书
经典促销广告词大全
2014/03/19 职场文书
开业庆典主持词
2014/03/21 职场文书
同居协议书范本
2014/04/23 职场文书
党的群众路线教育实践活动个人对照检查材料(公安)
2014/11/05 职场文书
护士年终个人总结
2015/02/13 职场文书
反邪教观后感
2015/06/11 职场文书
Win10此设备不支持接收Miracast无法投影的解决方法
2022/07/07 数码科技