完美解决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.addeventjs事件驱动函数集合addEvent等
Feb 19 Javascript
IE中鼠标经过option触发mouseout的解决方法
Jan 29 Javascript
基于jQuery Ajax实现上传文件
Mar 24 Javascript
form+iframe解决跨域上传文件的方法
Nov 18 Javascript
深入理解vue-loader如何使用
Jun 06 Javascript
Vue计算属性的使用
Aug 04 Javascript
Vue基于NUXT的SSR详解
Oct 24 Javascript
ztree实现左边动态生成树右边为内容详情功能
Nov 03 Javascript
利用HBuilder打包前端开发webapp为apk的方法
Nov 13 Javascript
CSS3 动画卡顿性能优化的完美解决方案
Sep 20 Javascript
JavaScript写个贪吃蛇小游戏(超详细)
Mar 17 Javascript
uniapp微信小程序实现一个页面多个倒计时
Nov 01 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 攻击方法之谈php+mysql注射语句构造
2009/10/30 PHP
使用PHP获取当前url路径的函数以及服务器变量
2013/06/29 PHP
php短信接口代码
2016/05/13 PHP
微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
2019/04/10 PHP
jquery使用ColorBox弹出图片组浏览层实例演示
2013/03/14 Javascript
String.prototype实现的一些javascript函数介绍
2013/11/22 Javascript
jquery实现弹出窗口效果的实例代码
2013/11/28 Javascript
给ListBox添加双击事件示例代码
2013/12/02 Javascript
JavaScript获取客户端计算机硬件及系统等信息的方法
2014/01/02 Javascript
setinterval()与clearInterval()JS函数的调用方法
2015/01/21 Javascript
浅谈JavaScript中setInterval和setTimeout的使用问题
2015/08/01 Javascript
在JavaScript中模拟类(class)及类的继承关系
2016/05/20 Javascript
js原生实现FastClick事件的实例
2016/11/20 Javascript
浅谈 Vue v-model指令的实现原理
2017/06/08 Javascript
浅谈js闭包理解
2019/04/01 Javascript
vue插槽slot的理解和使用方法
2019/04/03 Javascript
详解vue-cli3多页应用改造
2019/06/04 Javascript
vue中在vuex的actions中请求数据实例
2019/11/08 Javascript
python中django框架通过正则搜索页面上email地址的方法
2015/03/21 Python
极简的Python入门指引
2015/04/01 Python
详解Python中的join()函数的用法
2015/04/07 Python
浅析Python中元祖、列表和字典的区别
2016/08/17 Python
python实现批量按比例缩放图片效果
2018/03/30 Python
JSON文件及Python对JSON文件的读写操作
2018/10/07 Python
Python实现批量修改图片格式和大小的方法【opencv库与PIL库】
2018/12/03 Python
Python中bisect的使用方法
2019/12/31 Python
如何用python爬取微博热搜数据并保存
2021/02/20 Python
Probikekit日本:自行车套件,跑步和铁人三项装备
2017/04/03 全球购物
优秀中专生推荐信
2013/11/17 职场文书
学生自我鉴定
2013/12/18 职场文书
电话客服工作职责
2014/07/27 职场文书
2014学习十八届四中全会精神思想汇报范文
2014/10/23 职场文书
2015年学校保卫部工作总结
2015/05/11 职场文书
刑事附带民事起诉状
2015/05/19 职场文书
2019自荐信范文集锦!
2019/07/03 职场文书
「约定的梦幻岛」作画发布诺曼生日新绘
2022/03/21 日漫