2013-10-23 154 views
3

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

回答

5

我听说过可以与脚本标记一起使用的defer属性。

是的,defer and async使脚本(可能)不能在初始解析/呈现期间同步运行。

是否有类似的方法,...

是的,如果你在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> 

...如果有然后在推迟他们有什么优势?

deferasyncaren't universally supported和一些浏览器have some quirks around them。具体而言,IE < 9可能不按顺序执行defer'脚本,而defer'd脚本意味着按顺序处理(仅在页面的解析/呈现期间)。如果您自己添加script元素,则可以挂接它们的load事件,然后加载下一个脚本(或者使用像RequireJS这样做的功能,以及更多功能)。除此之外,没有太多。