• JS异步加载的三种方式


      js加载的缺点:加载工具方法没必要阻塞文档,过多js加载会影响页面效率,一旦网速不好,那么整个网站将等待js加载而不进行后续渲染等工作。 有些工具方法需要按需加载,用到再加载,不用不加载,。

      默认正常模式下下,JS是同步加载的,即优先加载JS,只有当JS文件下载完,dom和css才开始加载,当某些时候我们需要JS异步加载,我们可以通过以下方式来设置异步加载,不同情况下选取不同方式即可

    1.defer:defer
      JS异步下载,dom结构解析完(标签 + 样式(内容不一定下载完))才执行 (执行会阻塞dom渲染)
      仅IE能用
      内部JS也能用该属性
      异步加载js不允许使用document.write,因为document.write会清除文档流,js标签还未加载就会被清除
      document.write()可用于初始化页面
    2.(h5)async:async(asynchronous) ajax(asynchronous javascript and XML)
      JS异步加载,加载完毕后立刻执行(执行阻塞dom渲染)
      IE8及以下不兼容
      内部JS不能用该属性

    3.除了以上两种方法,还有一种兼容自己封装的异步加载方式,即动态添加script标签也能实现异步加载。

      

    function asyncLoaded(url,callBack){/*url为js的链接,callBack为url的js中的函数(该函数调用应该写到匿名函数中,如function(){console.log(div.getScrollOffset())})*/
        var script = document.createElement('script');
        script.type = 'text/javascript';
        /*if else 这几句话必须要写到这位置处,不能放最后,因为if中js加载中script.readyState存在好几种状态,
        只有状态改变‘readystatechange’事件才会触发,但现在浏览器加载速度很快,当解析到该事件时JS有可能已经加载完,
        所以事件根本不会触发,所以要写到前面*/
        if(script.readystate){//兼容IE
            script.onreadystatechange = function() {//状态改变事件才触发
                if(script.readyState == 'loaded' || script.readyState == 'complete'){    
                    callBack();
                    script.onreadystatechange = null;        
                }
            }
        }else{
            script.onload = function(e){
                callBack();
            }
        }        
        script.src = url;
        document.body.appendChild(script);
    }
  • 相关阅读:
    SQL Server 2008数据库镜像+故障转移集群原理摘自网络
    AHCI和IDE区别,和在目前系统中设置 AHCI 摘自网络
    中国计算机技术职业资格网(软考 官方 官网)
    第十一节 导出Excel 简单
    第五章 IF语句与逻辑运算符 简单
    第十一节 10图片权限控制 简单
    第四章 C++数据类型 简单
    第二章 从一个最简短的C++程 简单
    php 解析xml文件 简单
    第十一节 6HttpHandler案例 简单
  • 原文地址:https://www.cnblogs.com/Walker-lyl/p/5298002.html
Copyright © 2020-2023  润新知