完美解决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 相关文章推荐
Jquery截取中文字符串的实现代码
Dec 22 Javascript
再说AutoComplete自动补全之实现原理
Nov 05 Javascript
一个不错的字符串转码解码函数(自写)
Jul 31 Javascript
javascript实现鼠标拖动改变层大小的方法
Apr 30 Javascript
jquery日历插件e-calendar升级版
Nov 10 Javascript
解决Angular.Js与Django标签冲突的方案
Dec 20 Javascript
Bootstrap 表单验证formValidation 实现表单动态验证功能
May 17 Javascript
JavaScript异步上传图片文件的实例代码
Jul 04 Javascript
最通俗易懂的javascript变量提升详解
Aug 05 Javascript
React组件对子组件children进行加强的方法
Jun 23 Javascript
JavaScript实现简单的计算器
Jan 16 Javascript
Postman无法正常返回结果问题解决
Aug 28 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
解决控件遮挡问题:关于有窗口元素和无窗口元素
2007/01/28 PHP
深入php常用函数的使用汇总
2013/06/08 PHP
Android App中DrawerLayout抽屉效果的菜单编写实例
2016/03/21 PHP
初探jquery——表单应用范例
2007/02/20 Javascript
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
Textarea与懒惰渲染实现代码
2012/01/04 Javascript
用JQUERY增删元素的代码
2012/02/14 Javascript
js锁屏解屏通过对$.ajax进行封装实现
2014/07/31 Javascript
JavaScript实现穷举排列(permutation)算法谜题解答
2014/12/29 Javascript
jQuery通过写入cookie实现更换网页背景的方法
2016/04/15 Javascript
jQuery获取与设置iframe高度的方法
2016/08/01 Javascript
微信小程序(六):列表上拉加载下拉刷新示例
2017/01/13 Javascript
基于jQuery实现咖啡订单管理简单应用
2017/02/10 Javascript
小程序云开发实现数据库异步操作同步化
2019/05/18 Javascript
JS Math对象与Math方法实例小结
2019/07/05 Javascript
Vue3 源码导读(推荐)
2019/10/14 Javascript
如何利用nodejs实现命令行游戏
2020/11/24 NodeJs
python实现上传样本到virustotal并查询扫描信息的方法
2014/10/05 Python
node.js获取参数的常用方法(总结)
2017/05/29 Python
Python中的is和==比较两个对象的两种方法
2017/09/06 Python
python将excel转换为csv的代码方法总结
2019/07/03 Python
Python正则表达式匹配数字和小数的方法
2019/07/03 Python
在tensorflow中设置保存checkpoint的最大数量实例
2020/01/21 Python
Python startswith()和endswith() 方法原理解析
2020/04/28 Python
Python如何读写二进制数组数据
2020/08/01 Python
HTML5新增加的功能详解
2016/09/05 HTML / CSS
美国羊皮公司:Overland
2018/01/15 全球购物
如何用Java判断一个文件或目录是否存在
2012/11/19 面试题
JAVA高级程序员面试题
2013/09/06 面试题
汽车维修与检测专业应届生求职信
2013/11/12 职场文书
留学经费担保书
2014/05/12 职场文书
五四青年节演讲稿
2014/05/26 职场文书
机械电子工程专业求职信
2014/06/22 职场文书
党员四风自我剖析材料思想汇报
2014/09/13 职场文书
读《钢铁是怎样炼成的》有感:百炼方成钢
2019/11/05 职场文书
浅析Django接口版本控制
2021/06/26 Python