欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  web前端

js文件的异步加载的方法总结(附代码)

程序员文章站 2022-04-08 22:01:55
...

本篇文章给大家带来的内容是关于js文件的异步加载的方法总结(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

为什么要异步加载:同步加载会阻塞浏览器的后续处理,即只有当当前文件加载完毕之后才能进行下一步的文件加载(如图像)、渲染、代码执行。如果js中有输出document内容、修改DOM、重定向等行为,就会造成页面阻塞。

什么叫异步加载: 异步加载不会阻塞浏览器的后续操作,即在加载执行js的同时,并行加载其他文件渲染页面。

方法一:async属性
async属性规定js文件一旦可用就会执行,脚本相对于页面的其余部分异步地执行(当页面继续进行解析时,脚本将被执行)

async 属性仅适用于外部脚本(只有在使用 src 属性时)。

async 属性不能保证执行顺序。

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

方法二:defer属性
defer 属性规定是否对脚本执行进行延迟,直到页面加载为止。

defer属性表示脚本不会改变文档的内容,浏览器知道它将能够安全地读取文档的剩余部分而不用执行脚本,它将推迟对脚本的解释,直到文档已经显示给用户为止。以便加快处理文档的速度。

只有 Internet Explorer 支持 defer 属性。

<script type="text/javascript" defer="defer"></script>

方法三:动态创建DOM
不要求js同源

这些代码应被放置在标签前(接近HTML文件底部)

这种加载方式在加载执行完之前会阻止 onload 事件的触发,而现在很多页面的代码都在 onload 时还要执行额外的渲染工作等,所以还是会阻塞部分页面的初始化处理。

<script type="text/javascript">
    function downloadJSAtOnload() {
        var element = document.createElement("script");
        element.src = "defer.js";
        document.body.appendChild(element);
    }     
</script>

方法四:onload时动态创建DOM
不要求js同源

这些代码应被放置在标签前(接近HTML文件底部)

这种加载方式不是立即开始异步加载 js ,而是在 onload 时才开始异步加载。这样就解决了阻塞 onload 事件触发的问题。

<script type="text/javascript">    
function downloadJSAtOnload() {        
var element = document.createElement("script");
        element.src = "defer.js";        
        document.body.appendChild(element);
    }    
    if (window.addEventListener)        
    window.addEventListener("load", downloadJSAtOnload, false);    
    else if (window.attachEvent)        
    window.attachEvent("onload", downloadJSAtOnload);    
    else window.onload = downloadJSAtOnload;
</script>

相关推荐:

以上就是js文件的异步加载的方法总结(附代码)的详细内容,更多请关注其它相关文章!