使JavaScript非阻塞

3

在非阻塞方式下渲染JavaScript,有哪些不同的方法(以效率为比较标准)?我听说过可以与脚本标签一起使用的延迟属性(defer),还有其他类似的方法吗?如果有,那么它们相比于defer有什么优势呢?

1个回答

4
我听说过可以在脚本标签中使用defer属性。
是的,deferasync使得脚本在初始解析/渲染期间可能不会同步运行。
还有其他类似的方法吗?
是的,如果您在JavaScript中创建一个script元素并将其附加到DOM中,这也不会阻止页面解析/渲染。例如:
<script>
(function() {
    var script = document.createElement('script');
    script.src = "/path/to/your/async/script.js";
    document.getElementsByTagName('script')[0].parentNode.appendChild(script);
})();
</script>

如果有的话,它们与defer相比有什么优势?

deferasync并非通用支持, 一些浏览器在使用它们时存在一些怪异问题。特别是,IE<9可能会按顺序执行defer脚本,而defer脚本应该按顺序处理(只是不在解析/渲染页面期间)。如果您自己添加了script元素,则可以挂钩其load事件,然后加载下一个脚本(或使用像RequireJS这样的工具来为您完成这项工作以及更多其他工作)。除此之外,没有太多区别。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接