完美解决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 tablesorter.js 支持中文表格排序改进
Dec 09 Javascript
JS随机生成不重复数据的实例方法
Jul 17 Javascript
使用jQuery动态加载js脚本文件的方法
Apr 03 Javascript
编写高质量JavaScript代码的基本要点
Mar 02 Javascript
ionic选择多张图片上传的示例代码
Oct 10 Javascript
vue.js element-ui validate中代码不执行问题解决方法
Dec 18 Javascript
js实现左右两侧浮动广告
Jul 09 Javascript
Nuxt.js开启SSR渲染的教程详解
Nov 30 Javascript
JavaScript遍历查找数组中最大值与最小值的方法示例
May 24 Javascript
解决layui 三级联动下拉框更新时回显的问题
Sep 03 Javascript
javascript实现前端成语点击验证
Jun 24 Javascript
vue 在单页面应用里使用二级套嵌路由
Dec 19 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
深入了解php4(2)--重访过去
2006/10/09 PHP
php中使用sftp教程
2015/03/30 PHP
基于PHP实现通过照片获取ip地址
2016/04/26 PHP
LAMP环境使用Composer安装Laravel的方法
2017/03/25 PHP
YII2框架中查询生成器Query()的使用方法示例
2020/03/18 PHP
Knockout text绑定DOM的使用方法
2013/11/15 Javascript
confirm的用法示例用于按钮操作时确定是否执行
2014/06/19 Javascript
JavaScript判断变量是否为数组的方法(Array)
2016/02/24 Javascript
JavaScript利用闭包实现模块化
2017/01/13 Javascript
对vue里函数的调用顺序介绍
2018/03/17 Javascript
详解Vue开发微信H5微信分享签名失败问题解决方案
2018/08/09 Javascript
微信小程序实现即时通信聊天功能的实例代码
2018/08/17 Javascript
[41:54]2018DOTA2亚洲邀请赛 4.1 小组赛A组加赛 TNC vs Liquid
2018/04/03 DOTA
Python中os和shutil模块实用方法集锦
2014/05/13 Python
利用Python中的pandas库对cdn日志进行分析详解
2017/03/07 Python
Python Json序列化与反序列化的示例
2018/01/31 Python
python统计字母、空格、数字等字符个数的实例
2018/06/29 Python
Python迭代器协议及for循环工作机制详解
2020/07/14 Python
python中selenium库的基本使用详解
2020/07/31 Python
matplotlib交互式数据光标实现(mplcursors)
2021/01/13 Python
canvas生成带二维码海报的踩坑记录
2019/09/11 HTML / CSS
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
2013/05/03 面试题
Final类有什么特点
2012/04/25 面试题
大专自我鉴定范文
2013/10/01 职场文书
关于赌博的检讨书
2014/01/08 职场文书
幼儿园家长评语大全
2014/04/16 职场文书
研究生导师评语
2014/12/31 职场文书
2015年社区国庆节活动总结
2015/07/30 职场文书
中国文明网2015年“向国旗敬礼”活动网上签名寄语
2015/09/24 职场文书
2016公务员年度考核评语
2015/12/01 职场文书
Python实现简单的猜单词
2021/06/15 Python
mybatis 获取无数据的字段不显示的问题
2021/07/15 Java/Android
前端实现滑动按钮AJAX与后端交互的示例代码
2022/02/24 Javascript
Python编程中内置的NotImplemented类型的用法
2022/03/23 Python
分析SQL窗口函数之聚合窗口函数
2022/04/21 Oracle
MySQL存储过程及语法详解
2022/08/05 MySQL