完美解决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学习7 操作JavaScript对象和集合的函数
Feb 07 Javascript
jQuery 选择器、DOM操作、事件、动画
Nov 25 Javascript
用原生JavaScript实现jQuery的$.getJSON的解决方法
May 03 Javascript
jQuery ajax dataType值为text json探索分享
Sep 23 Javascript
angularJS 中input示例分享
Feb 09 Javascript
javascript中hasOwnProperty() 方法使用指南
Mar 09 Javascript
原生js实现放大镜特效
Mar 08 Javascript
jquery Form轻松实现文件上传
May 24 jQuery
用原生JS实现简单的多选框功能
Jun 12 Javascript
JS 60秒后重新发送验证码的实例讲解
Jul 26 Javascript
canvas基础绘制-绚丽倒计时的实例
Sep 17 Javascript
浅谈PDF.js使用心得
Jun 07 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 mysql数据库操作分页类
2008/06/04 PHP
对squid中refresh_pattern的一些理解和建议
2009/04/17 PHP
php调用C代码的实现方法
2014/03/11 PHP
php实现批量下载百度云盘文件例子分享
2014/04/10 PHP
php有道翻译api调用方法实例
2014/12/22 PHP
PHP测试成功的邮件发送案例
2015/10/26 PHP
PHP QRCODE生成彩色二维码的方法
2016/05/19 PHP
PHP自定义递归函数实现数组转JSON功能【支持GBK编码】
2018/07/17 PHP
JavaScript 原型与继承说明
2010/06/09 Javascript
常用的jquery模板插件——jQuery Boilerplate介绍
2014/09/23 Javascript
js与css实现弹出层覆盖整个页面的方法
2014/12/13 Javascript
JavaScript常用的返回,自动跳转,刷新,关闭语句汇总
2015/01/13 Javascript
Node.js文件操作方法汇总
2016/03/22 Javascript
JS实现直接运行html代码的方法
2017/03/13 Javascript
详解webpack 配合babel 将es6转成es5 超简单实例
2017/05/02 Javascript
基于jQuery和CSS3实现APPLE TV海报视差效果
2017/06/16 jQuery
详解Vue基于 Nuxt.js 实现服务端渲染(SSR)
2018/04/05 Javascript
微信小程序用户授权,以及判断登录是否过期的方法
2019/05/10 Javascript
Vue关于组件化开发知识点详解
2020/05/13 Javascript
Vue左滑组件slider使用详解
2020/08/21 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
2020/10/19 Javascript
[01:15:44]首部DOTA2纪录片今日23时全网上映
2014/03/19 DOTA
[03:48]2014DOTA2 TI专访71DK夺冠不靠小组赛高排名
2014/07/11 DOTA
[57:50]DOTA2上海特级锦标赛主赛事日 - 4 胜者组决赛Secret VS Liquid第二局
2016/03/05 DOTA
python类装饰器用法实例
2015/06/04 Python
Python 基础知识之字符串处理
2017/01/06 Python
使用Tensorflow将自己的数据分割成batch训练实例
2020/01/20 Python
jupyter实现重新加载模块
2020/04/16 Python
如何理解Python中包的引入
2020/05/29 Python
详解用selenium来下载小姐姐图片并保存
2021/01/26 Python
一款纯css3实现简单的checkbox复选框和radio单选框
2014/11/05 HTML / CSS
Staples美国官方网站:办公用品一站式采购
2016/07/28 全球购物
学习张丽丽心得体会
2014/09/03 职场文书
村干部群众路线教育活动对照检查材料
2014/10/01 职场文书
办公室主任个人总结
2015/02/28 职场文书
详解nginx.conf 中 root 目录设置问题
2021/04/01 Servers