使Javascript无阻塞

时间:2013-10-23 09:28:28

标签: javascript nonblocking

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

1 个答案:

答案 0 :(得分:5)

  

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

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

  

还有其他此类方法......

是的,如果您在JavaScript中创建script元素并将其附加到DOM,则不会阻止页面解析/呈现。 E.g:

<script>
(function() {
    var script = document.createElement('script');
    script.src = "/path/to/your/async/script.js";
    document.getElementsByTagName('script')[0].parentNode.appendChild(script);
})();
</script>
  

......如果有什么比推迟更有优势呢?

deferasync aren't universally supported以及一些浏览器have some quirks around them。特别是,IE&lt; 9可以不按顺序执行defer'脚本,而defer'脚本意味着按顺序处理(只是在页面的解析/呈现期间)。如果你自己添加script元素,你可以挂钩他们的load事件,然后加载下一个脚本(或使用像RequireJS这样的东西 - 以及更多 - 为你)。除此之外,并不多。