博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
无阻塞加载外部js(动态脚本元素,XMLHttpRequest注入,LazyLoad)
阅读量:6469 次
发布时间:2019-06-23

本文共 1222 字,大约阅读时间需要 4 分钟。

       动态脚本元素即在js中去创建<script>标签加载外部js并执行,这样加载的好处是文件的下载和执行过程不会阻塞页面的其他进程。通过下面两个例子对比出效果

    Untitled Page    
测试js加载顺序影响的性能问题。【放在底部加载】

  A.html

    Untitled Page    
测试js加载顺序影响的性能问题。【放在底部加载】

  B.html

var i = 0;while (i < 1000000000) {    i++;}alert("外部js");

  1.js

进过执行后会发现,A.html执行结果为 alert("外部js")  alert("内部js")  render树渲染

B.html执行结果为 alert("内部js")   render树渲染   alert("外部js")  alert("加载外部js完成")

通过结果对比后,理解不阻塞页面其他进程更加直观

除了动态加载js外,还有XMLHttpRequest对象获取脚本也是无阻塞的,示例代码如下

var xhr=new XMLHttpRequest();xhr.open("get","1.js",true);xhr.onreadystatechange=function(){      if(xhr.readyState==4)      {           if(xhr.status >= 200 && xhr.status<300 || xhr.status == 304){                    var script=document.createElement("script");                    script.type="text/javascript";                    script.text=xhr.responseText;                    document.body.appendChild(script);           }      }}            xhr.send(null);

延迟加载工具LazyLoad

LazyLoad.js("1.js",function(){                        alert("加载外部js完成!");           });//加载多个LazyLoad.js(["1.js","2.js"],function(){                        alert("加载外部js完成!");           });

 

转载于:https://www.cnblogs.com/KingUp/p/5582856.html

你可能感兴趣的文章
golang copy函数
查看>>
《你有多少问题要请示》精华集粹
查看>>
深度 | 机器学习敲门砖:任何人都能看懂的TensorFlow介绍【转】
查看>>
leveldb学习:DBimpl
查看>>
MySQL存储引擎--MYSIAM和INNODB引擎区别
查看>>
[Recompose] Stream Props to React Children with RxJS
查看>>
打印图片
查看>>
SHOW CREATE DATABASE Syntax
查看>>
rsync常见问题及解决办法
查看>>
AKM项目轶事之GBS同事转入GDC
查看>>
MySQL日期 专题
查看>>
C#中禁止程序多开
查看>>
分布式缓存Redis使用以及原理
查看>>
[LeetCode] Number of 1 Bits 位操作
查看>>
练习二:结对练习
查看>>
JSON中JObject和JArray,JValue序列化(Linq)
查看>>
杂七杂八
查看>>
Activity竟然有两个onCreate方法,可别用错了
查看>>
Linux经常使用命令(十六) - whereis
查看>>
Tomcat
查看>>