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


    关于页面加载时的时间消费,许多书中都做出了介绍,也提出了很多种方法。本文章就详细介绍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>
  • 相关阅读:
    ERROR 1290 (HY000): The MySQL server is running with&nbs
    mysql ERROR 1045 (28000): Access denied for user解决方法
    今天,启动MySQL服务器失败,
    centos 7 安装卸载apache(httpd)服务
    Kafka——彻底删除Topic
    HBase管理与监控——彻底删除HBase数据
    phoenix创建表失败:phoenixIOException: Max attempts exceeded
    Kafka——指定位移消费(回溯消费)
    Java日志体系(八)最佳实践
    Java日志体系(七)日志框架切换
  • 原文地址:https://www.cnblogs.com/JhoneLee/p/3458238.html
Copyright © 2020-2023  润新知