3

以非阻塞方式呈现 Javascript 有哪些不同的方法(效率方面的比较)?我听说过可以与 script 标签一起使用的 defer 属性。还有其他这样的方法吗?如果有,那么它们比 defer 有什么优势?

4

1 回答 1

5

我听说过可以与 script 标签一起使用的 defer 属性。

是的,defer并且async使脚本(可能)在初始解析/渲染期间不同步运行。

有没有其他这样的方法...

是的,如果您script在 JavaScript 中创建一个元素并将其附加到 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乱序执行 'd 脚本,而defer'd 脚本意味着按顺序处理(只是不在页面的解析/呈现期间)。如果您script自己添加元素,您可以挂钩它们的load事件,然后加载下一个脚本(或使用类似 RequireJS 之类的东西 - 以及更多 - 为您服务)。除此之外,不多。

于 2013-10-23T09:33:53.573 回答