完美解决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 相关文章推荐
function, new function, new Function之间的区别
Mar 08 Javascript
RGB颜色值转HTML十六进制(HEX)代码的JS函数
Apr 25 Javascript
jquery.jstree 增加节点的双击事件代码
Jul 27 Javascript
jquery一句话全选/取消全选
Mar 01 Javascript
JS跨域代码片段
Aug 30 Javascript
上传图片预览JS脚本 Input file图片预览的实现示例
Oct 23 Javascript
使用BootStrap和Metroui设计的metro风格微网站或手机app界面
Oct 21 Javascript
详解Vue2.0之去掉组件click事件的native修饰
Apr 20 Javascript
微信小程序仿微信运动步数排行(交互)
Jul 13 Javascript
koa2 用户注册、登录校验与加盐加密的实现方法
Jul 22 Javascript
vant-ui框架的一个bug(解决切换后onload不触发)
Nov 11 Javascript
vue使用element-ui实现表单验证
Dec 13 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
thinkphp使用phpmailer发送邮件的方法
2014/11/24 PHP
centos 7.2下搭建LNMP环境教程
2016/11/20 PHP
Laravel中的Auth模块详解
2017/08/17 PHP
ThinkPHP3.2.3框架实现的空模块、空控制器、空操作,跳转到错误404页面图文详解
2019/04/03 PHP
Jquery ajaxsubmit上传图片实现代码
2010/11/04 Javascript
jQuery实现带分组数据的Table表头排序实例分析
2015/11/24 Javascript
Javascript+CSS3实现进度条效果
2016/10/28 Javascript
Vue Cli 3项目使用融云IM实现聊天功能的方法
2019/04/19 Javascript
深入了解JavaScript 私有化
2019/05/30 Javascript
Elasticsearch实现复合查询高亮结果功能
2019/09/10 Javascript
微信小程序以ssm做后台开发的实现示例
2020/04/08 Javascript
在vue中实现禁止屏幕滚动,禁止屏幕滑动
2020/07/22 Javascript
[01:02:00]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第三场 1月24日
2021/03/11 DOTA
Python读写Excel文件的实例
2013/11/01 Python
Python文件和流(实例讲解)
2017/09/12 Python
Python实现通过继承覆盖方法示例
2018/07/02 Python
python+selenium实现简历自动刷新的示例代码
2019/05/20 Python
Django上使用数据可视化利器Bokeh解析
2019/07/31 Python
python自动保存百度盘资源到百度盘中的实例代码
2019/08/26 Python
如何基于Python制作有道翻译小工具
2019/12/16 Python
python获取引用对象的个数方式
2019/12/20 Python
基于python实现数组格式参数加密计算
2020/04/21 Python
html5 标签
2009/07/16 HTML / CSS
canvas仿写贝塞尔曲线的示例代码
2017/12/29 HTML / CSS
打印机墨盒:123Inkjets
2017/02/16 全球购物
澳大利亚在线购买儿童玩具:Toy Universe
2017/12/28 全球购物
教师申诉制度
2014/01/29 职场文书
学校卫生检查制度
2014/02/03 职场文书
企业读书活动总结
2014/06/30 职场文书
我的中国梦演讲稿800字
2014/08/19 职场文书
网站出售协议书范文
2014/10/10 职场文书
不尊敬老师检讨书范文
2014/11/19 职场文书
2016年春季运动会通讯稿
2015/11/25 职场文书
2016入党积极分子心得体会
2016/01/06 职场文书
企业管理制度设计时要注意的几种“常见病”!
2019/04/19 职场文书
Android自定义scrollview实现回弹效果
2022/04/01 Java/Android