在非阻塞方式下渲染JavaScript,有哪些不同的方法(以效率为比较标准)?我听说过可以与脚本标签一起使用的延迟属性(defer),还有其他类似的方法吗?如果有,那么它们相比于defer有什么优势呢?
在非阻塞方式下渲染JavaScript,有哪些不同的方法(以效率为比较标准)?我听说过可以与脚本标签一起使用的延迟属性(defer),还有其他类似的方法吗?如果有,那么它们相比于defer有什么优势呢?
defer
和async
使得脚本在初始解析/渲染期间可能不会同步运行。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相比有什么优势?
defer
和async
并非通用支持, 一些浏览器在使用它们时存在一些怪异问题。特别是,IE<9可能会按顺序执行defer
脚本,而defer
脚本应该按顺序处理(只是不在解析/渲染页面期间)。如果您自己添加了script
元素,则可以挂钩其load
事件,然后加载下一个脚本(或使用像RequireJS这样的工具来为您完成这项工作以及更多其他工作)。除此之外,没有太多区别。