美文网首页
异步加载JS脚本

异步加载JS脚本

作者: 前端小华子 | 来源:发表于2017-11-01 11:10 被阅读0次

异步处理外部脚本总结

Dynamic Script Element

通常我们加载JS脚本会在HTML里:

<script type="text/javascript" src="A.js"></script>

这属于静态脚本元素,浏览器执行到这里发现script元素,会按上面所说的,下载解析执行脚本,同时阻塞其他资源文件的下载。而动态脚本元素如下:
var script = document.createElement('script'); //创建script标签
script.type = "text/javascript"; script.src = "A.js";
document.getElementsByTagName('head')[0].appendChild(script); //塞进页面
先用document.createElement(‘script’)生成一个script标签,再设置它的src属性,最后将其插入到中。

script标签被插入到页面的DOM树后,就会开始下载src属性指定的脚本。而且通过动态脚本元素下载脚本是异步的,不会阻塞页面的其他下载和处理过程,因此script标签插入中也没问题。

当JS下载完毕后,就会立即执行。如果多个JS间有依赖关系,一下载完马上执行可能会出现error。因此通常来说你应该将有依赖关系的JS合并成一个文件,虽然合并后JS文件会变大,但由于是异步下载,你几乎不会有什么损失。

如果实在不方便将有依赖关系的文件合并。你需要自己指定先后顺序,通过监听load事件(IE是onreadystatechange)来确保依次加载脚本:

var script = document.createElement ("script")     
    script.type = "text/javascript"; 
      if (script.readyState){ //IE          
          script.onreadystatechange = function(){
            if (script.readyState == "loaded" || script.readyState == "complete"){                                                          
                script.onreadystatechange = null;  callback();           
             } 
           }; 
      } else { //Others          
         script.onload = function(){  
          callback();        
         };  
       }      
      script.src = url;      
     document.getElementsByTagName("head")[0].appendChild(script); 
} 
//严格确保A->B->C,依次下载脚本文件 
loadScript("A-delay.js", function(){    
      loadScript("B-delay.js", function(){         
             loadScript("C-delay.js", function(){             
                   console.log("All files are loaded!");         
              });   
     });
});    
该技术不但简单,而且通用,且可以跨域,应该成为你的首选。  

相关文章

  • 异步加载JS脚本

    异步处理外部脚本总结 Dynamic Script Element 通常我们加载JS脚本...

  • JavaScript补充

    01-延迟和异步加载JS 如何延迟加载JS:defer defer:js脚本可以延迟到文档完全被解析后执行 如何异...

  • 网页优化

    1. 资源代码压缩合并,减少HTTP请求 2. 非核心代码的异步加载 异步加载方式:动态脚本加载(js创建SCRI...

  • 异步加载JS脚本

    JavaScript脚本对现代网站来说是必不可少的。当用户访问站点,需要下载各种资源,例如JS脚本,CSS,图片,...

  • JavaScript第二章节

    scriptasync 表示立即下载脚本,不妨碍页面中其他下载资源,异步加载外部js脚本charset 可以忽略d...

  • H5 资源异步加载策略

    1、async & defer 区别async异步加载脚本,加载完立马执行defer异步加载脚本,并在DOMCon...

  • 浏览器加载机制&白屏和FOUC演示

    1、如何异步加载脚本? 一般情况下,浏览器在加载js文件时,会阻塞其他组件的加载,因为js可能会改变页面结构或js...

  • JS的异步加载

    为什么要异步加载 浏览器下载除JS外的资源时,会并行下载,以提高性能。但下载JS脚本时,会禁止并行下载(称为脚本阻...

  • 网页性能优化之异步加载js文件

    一个网页的有很多地方可以进行性能优化,比较常见的一种方式就是异步加载js脚本文件。在谈异步加载之前,先来看看浏览器...

  • 网页性能优化之异步加载js文件

    一个网页的有很多地方可以进行性能优化,比较常见的一种方式就是异步加载js脚本文件。在谈异步加载之前,先来看看浏览器...

网友评论

      本文标题:异步加载JS脚本

      本文链接:https://www.haomeiwen.com/subject/vgmwpxtx.html