完美解决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入门教程(1) 什么是JS
Jan 31 Javascript
JavaScript 动态将数字金额转化为中文大写金额
May 14 Javascript
一些mootools的学习资源
Feb 07 Javascript
js 无提示关闭浏览器页面的代码
Mar 09 Javascript
js 利用image对象实现图片的预加载提高访问速度
Mar 29 Javascript
js对图片base64编码字符串进行解码并输出图像示例
Mar 17 Javascript
关于JS中的apply,call,bind的深入解析
Apr 05 Javascript
Javascript 5种方法实现过滤删除前后所有空格
Jun 22 Javascript
node.js Sequelize实现单实例字段或批量自增、自减
Dec 08 Javascript
微信小程序项目总结之记账小程序功能的实现(包括后端)
Aug 20 Javascript
JavaScript 实现自己的安卓手机自动化工具脚本(推荐)
May 13 Javascript
vscode 使用Prettier插件格式化配置使用代码详解
Aug 10 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
Zerg兵种介绍
2020/03/14 星际争霸
php中常用字符串处理代码片段整理
2011/11/07 PHP
php数组函数序列之array_unshift() 在数组开头插入一个或多个元素
2011/11/07 PHP
从刷票了解获得客户端IP的方法
2015/09/21 PHP
php在数据库抽象层简单使用PDO的方法
2015/11/03 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
2016/02/15 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
2017/08/11 PHP
Jquery下的26个实用小技巧(jQuery tips, tricks &amp; solutions)
2010/03/01 Javascript
js中的caller和callee属性介绍和例子
2014/06/07 Javascript
详解jQuery移动页面开发中的ui-grid网格布局使用
2015/12/03 Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
2016/10/21 Javascript
JS实现页面跳转参数不丢失的方法
2016/11/28 Javascript
bootstrap table实现双击可编辑、添加、删除行功能
2017/09/27 Javascript
jquery实现广告上下滚动效果
2021/03/04 jQuery
python排序方法实例分析
2015/04/30 Python
python过滤字符串中不属于指定集合中字符的类实例
2015/06/30 Python
Python基于Socket实现的简单聊天程序示例
2017/08/05 Python
Python实现替换文件中指定内容的方法
2018/03/19 Python
pip安装py_zipkin时提示的SSL问题对应
2018/12/29 Python
python3字符串操作总结
2019/07/24 Python
Python操作SQLite数据库过程解析
2019/09/02 Python
python实现批量文件重命名
2019/10/31 Python
Python编写一个验证码图片数据标注GUI程序附源码
2019/12/09 Python
动态设置django的model field的默认值操作步骤
2020/03/30 Python
Html5之webcoekt播放JPEG图片流
2020/09/22 HTML / CSS
党的群众路线教育实践活动公开承诺书
2014/03/28 职场文书
大学竞选班干部演讲稿
2014/08/21 职场文书
个人授权委托书格式
2014/08/30 职场文书
个人授权委托书范本格式
2014/10/12 职场文书
学生旷课检讨书500字
2014/10/28 职场文书
统计工作个人总结
2015/03/03 职场文书
教师工作能力自我评价
2015/03/04 职场文书
家长会开场白和结束语
2015/05/29 职场文书
校长新学期致辞
2015/07/30 职场文书
python实现简易名片管理系统
2021/04/11 Python
postgreSQL数据库基础知识介绍
2022/04/12 PostgreSQL