完美解决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 09 Javascript
jQuery实现拖拽效果插件的方法
Mar 23 Javascript
深入理解ECMAScript的几个关键语句
Jun 01 Javascript
AngularJS使用ng-options指令实现下拉框
Aug 23 Javascript
jquery attr()设置和获取属性值实例教程
Sep 25 Javascript
jQuery实现图片轮播效果代码
Sep 27 Javascript
JavaScript实现简单的星星评分效果
May 18 Javascript
对Vue beforeRouteEnter 的next执行时机详解
Aug 25 Javascript
js微信分享接口调用详解
Jul 23 Javascript
Vue-cli项目部署到Nginx服务器的方法
Nov 01 Javascript
jQuery 添加元素和删除元素的方法
Jul 15 jQuery
解决Antd Table组件表头不对齐的问题
Oct 27 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 cookie的操作实现代码(登录)
2010/12/29 PHP
PHPExcel读取EXCEL中的图片并保存到本地的方法
2015/02/14 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
2016/11/08 PHP
用javascript读取xml文件读取节点数据
2014/08/12 Javascript
js使用for循环及if语句判断多个一样的name
2014/09/09 Javascript
JavaScript仿支付宝密码输入框
2015/12/29 Javascript
javascript匀速运动实现方法分析
2016/01/08 Javascript
解决jQuery ajax请求在IE6中莫名中断的问题
2016/06/20 Javascript
JS使用正则实现去掉字符串左右空格的方法
2016/12/27 Javascript
js 轮播效果实例分享
2016/12/28 Javascript
AngularJS之页面跳转Route实例代码
2017/03/10 Javascript
详解tween.js的使用教程
2017/09/14 Javascript
js实现单张图片平移切换效果
2017/10/11 Javascript
angularJS自定义directive之带参方法传递详解
2018/10/09 Javascript
详解vue中多个有顺序要求的异步操作处理
2019/10/29 Javascript
在vue中使用jsonp进行跨域请求接口操作
2020/10/29 Javascript
antd配置config-overrides.js文件的操作
2020/10/31 Javascript
[01:05:30]VP vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[46:20]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Linux下用Python脚本监控目录变化代码分享
2015/05/21 Python
python 实现一个贴吧图片爬虫的示例
2017/10/12 Python
Python OpenCV处理图像之图像像素点操作
2018/07/10 Python
使用Python获取网段IP个数以及地址清单的方法
2018/11/01 Python
用Python实现大文本文件切割的方法
2019/01/12 Python
Python获取Redis所有Key以及内容的方法
2019/02/19 Python
python图像和办公文档处理总结
2019/05/28 Python
pandas如何处理缺失值
2019/07/31 Python
python统计指定目录内文件的代码行数
2019/09/19 Python
Manjaro、pip、conda更换国内源的方法
2020/11/17 Python
纯CSS3实现绘制各种图形实现代码详细整理
2012/12/26 HTML / CSS
澳大利亚潮流尖端的快时尚品牌:Cotton On
2016/09/26 全球购物
应届大专毕业生自我鉴定
2014/04/08 职场文书
房产继承公证书
2014/04/09 职场文书
饭店服务员岗位职责
2015/02/09 职场文书
王亚平太空授课观后感
2015/06/12 职场文书
vue 实现上传组件
2021/05/31 Vue.js