完美解决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 相关文章推荐
JavaScript全局函数使用简单说明
Mar 11 Javascript
使用jquery选择器如何获取父级元素、同级元素、子元素
May 14 Javascript
JavaScript中将数组进行合并的基本方法讲解
Mar 07 Javascript
jquery.Jcrop结合JAVA后台实现图片裁剪上传实例
Nov 05 Javascript
jquery获取下拉框中的循环值
Feb 08 Javascript
javascript九宫格图片随机打乱位置的实现方法
Mar 15 Javascript
jQuery实现弹窗下底部页面禁止滑动效果
Dec 19 jQuery
vue 自定义 select内置组件
Apr 10 Javascript
搭建vue开发环境
Jul 19 Javascript
关于引入vue.js 文件的知识点总结
Jan 28 Javascript
Javascript幻灯片播放功能实现过程解析
May 07 Javascript
vue3.0中友好使用antdv示例详解
Jan 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 开发工具
2006/12/06 PHP
PHP编写daemon process详解及实例代码
2016/09/30 PHP
详解使用php调用微信接口上传永久素材
2017/04/11 PHP
mongodb和php的用法详解
2019/03/25 PHP
php的无刷新操作实现方法分析
2020/02/28 PHP
从Ajax到JQuery Ajax学习
2007/02/14 Javascript
javascript实现的在当前窗口中漂浮框的代码
2010/03/15 Javascript
一次失败的jQuery优化尝试小结
2011/02/06 Javascript
table insertRow、deleteRow定义和用法总结
2014/05/14 Javascript
JQuery异步加载PartialView的方法
2016/06/07 Javascript
webix+springmvc session超时跳转登录页面
2016/10/30 Javascript
一步步教你利用Canvas对图片进行处理
2017/09/19 Javascript
Angular 向组件传递模板的两种方法
2018/02/23 Javascript
浅谈vue项目4rs vue-router上线后history模式遇到的坑
2018/09/27 Javascript
JS实现的全选、全不选及反选功能【案例】
2019/02/19 Javascript
使用weixin-java-miniapp配置进行单个小程序的配置详解
2019/03/29 Javascript
JavaScript实现多张图片放大镜效果示例【不限定图片尺寸,rem单位】
2019/05/14 Javascript
vue-autoui自匹配webapi的UI控件的实现
2020/03/20 Javascript
使用vue编写h5公众号跳转小程序的实现代码
2020/11/27 Vue.js
[48:32]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
跟老齐学Python之有容乃大的list(3)
2014/09/15 Python
Python sqlite3事务处理方法实例分析
2017/06/19 Python
python实现输入数字的连续加减方法
2018/06/22 Python
python opencv实现切变换 不裁减图片
2018/07/26 Python
python的pytest框架之命令行参数详解(上)
2019/06/27 Python
Python如何使用队列方式实现多线程爬虫
2020/05/12 Python
HTML5中判断用户是否正在浏览页面的方法
2014/05/03 HTML / CSS
HTML5通过navigator.mediaDevices.getUserMedia调用手机摄像头问题
2020/04/27 HTML / CSS
就业推荐自我鉴定
2013/10/06 职场文书
中英文自我评价语句
2013/12/20 职场文书
求职信需要的五点内容
2014/02/01 职场文书
入职担保书怎么写
2014/05/12 职场文书
交通事故协议书范本
2014/11/18 职场文书
会计试用期自我评价
2015/03/10 职场文书
CSS3 制作的彩虹按钮样式
2021/04/11 HTML / CSS
解决python3安装pandas出错的问题
2021/05/20 Python