我尝试通过在脚本上添加一些async
属性来优化我的页面。它似乎打破了我的javascript,因为在加载所有脚本之前执行了$(document).ready
!
我看到我可以通过$(window).load
代替$(document).ready
来解决我的问题,但我想知道是否有更好的解决方案。
这个解决方案在我的案例中触发了2个问题:
$(document).ready
并告诉所有开发人员不再使用它defer
代替async
?
答案 0 :(得分:27)
经过一些广泛的研究,我可以肯定地说,将脚本放在页面的末尾是最佳实践。
雅虎同意我的观点:http://developer.yahoo.com/performance/rules.html#js_bottom
Google不会谈论这种做法,似乎更喜欢异步脚本:https://developers.google.com/speed/docs/best-practices/rtt#PreferAsyncResources
恕我直言,将脚本放在页面末尾比async / defer有几个好处:
$(document).ready
或$(window).load
我能看到的唯一缺点是浏览器无法并行化下载。 使用异步/延迟的一个很好的理由是当你有一个完全独立的脚本(不需要依赖执行顺序)并且不需要在特定时间执行。示例:google analytics。
答案 1 :(得分:0)
如果您不想使用脚本加载器,则可以使用以下方法,该方法允许您将$(document).ready脚本保留在原位-修改如下:
@Override
public void onDestroyView() {
if (mCompositeDisposable!= null) // in case if you required-> if (mCompositeDisposable!= null && !mCompositeDisposable.isDisposed())
mCompositeDisposable.dispose();
super.onDestroyView();
}
答案 2 :(得分:0)
defer
在这里肯定会有所帮助。
defer
通常比async
更好,因为它:
async
一样)async
)async
在页面仍在加载时并行执行,并且实际上中止 dom解析!)ready
在加载“延迟的”脚本(这就是您要的内容)之后触发 This SO answer上有一张非常漂亮的图片,说明了延迟/异步加载顺序,非常容易理解。