解决JS文件页面加载时的阻塞

摘要:
XXX<document.getElementById('header').appendChild(oDiv);}测试();页面使用此JS文件<divi=“init”>funcFalse){if(XMLHttpRequest)varoAjax=newXMLHttpRequest();

关于页面加载时的时间消费,许多书中都做出了介绍,也提出了很多种方法。本文章就详细介绍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文件页面加载时的阻塞》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇PHP 按钮怎么倒计时在Ubuntu中安装HP LaserJet 1020驱动下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WPF 之 自定义Shape

AMindMap需要一个Line,用以连接父ANode和子ANode, 简单说,就是一头大一头小的线,Wpf自带的Line是没这个功能。 Path可以画,不过,我的想法仍旧是绑定。那只能自己做咯。 图例 正文 既然Line,Rectangle等都是继承自Shape的,直接新建一个类继承自Sharp. 1 Public Class ALine 2...

xml之XSLT

 1、XSLT是什么  XSLT是XSL的子集,XSL是样式表。XSLT的作用:将XML文档转化成HTML,做的是中间转换者。  而主要需要学习的是XSLT(XSLTransformation)。  2、转换过程   3、XSL样式表的表的结构 引用XSL样式的XML文件的引用方式:   4、XSLT详细结构 1》有独立的命名空间 2》要执行XSL...

前端-网页打印-Jqprint-网页打印像素设置

Jqprint 实现网页打印: (转自:http://www.jq22.com/jquery-info347) 引入jqorint: <script language="javascript" src="jquery-1.4.4.min.js"></script> <script language="javascript" s...

python实现websocket

# websocket实现原理 ''' 1.服务端开启socket,监听ip和端口 2.客户端发送连接请求(带上ip和端口) 3.服务端允许连接 4.客户端生成一个随机字符串,和magic string组合进行一个sha1加密,加密。并将随机字符串发送给服务端 5.然后服务端也要用相同的方式进行加密。 6.然后服务端将加密之后的密串返回给客户...

ASP.NET(C#)实现一次性上传多张图片(多个文件)

在做asp.net的Web开发的时候,我们经常会遇到一次性上传多个文件的需求。通常我们的解决方法是固定放多个上传文件框,这样的解决办法显然是不合理的,因为一次上传多个,就意味着数量不确定。因此我们就要让这些文件上传框动态添加,下面我以我做的一个图库管理中的上传图片的功能为例 先看效果: 打开的初始界面: 默认是上传一个图片,但当我们点“增加图片”按钮时可以...

使用html2canvas和jsPdf实现打印功能

最近做项目中,️遇到过实现模版打印功能,网上也找到很多资料可以实现,有的方式可以实现分页,但是打印的A4纸上下不能留边距,后来找到一个通过剪裁的方式可以实现左右上下留边距,并且能实现分页; 方法如下:基本思路是对获得的canvas进行切割,按A4纸大小并留边距后的比例进行剪裁,切出一页一页的内容来,再分别加到pdf中。 DEMO: 1 // 导出页面为...