【发布时间】:2014-07-02 23:35:35
【问题描述】:
我目前有一个使用 jQuery (1.9.0) 和其他 javascript 文件的 AngularJS (1.2.18) Web 应用程序。
我注意到网站在浏览器缓存之前第一次加载非常缓慢。我按顺序发现:
- 我所有的外部 javascript 文件都是并行加载的(包括 jQuery)。
- 我的脚本
<script> $.ajaxSetup({ cache: true }); </script>加载以防止 jQuery 再次重新加载资源。 - 长时间延迟,在此期间 jQuery 会依次重新加载步骤 1 中的所有内容,如下所示。
为什么 jQuery 再次尝试重新加载我的所有资源?
$.ajaxSetup({ cache: true }); 不缓存所有 javascript jQuery 需求吗?
我看到cache: false 和cache: true 之间的唯一区别是时间戳是否附加到重新加载的资源的末尾。无论哪种情况,我的所有 javascript 都会再次重新加载。
感谢您的帮助!
【问题讨论】:
-
1.在生产应用程序中,所有这些 JS 文件都应该连接并缩小(请参阅 Gulp 或 Grunt 了解这些任务)。 2. 你是如何加载这些 JS 文件的?你的 HTML 中有那些 SCRIPT 标签吗?或者是否正在进行某种依赖加载?
$.ajaxSetup仅适用于$.ajax(...)调用,不适用于脚本标签。 3. 我的 DevTools 设置为禁用缓存,如果你也设置了,在 DevTools 打开时你不会看到任何缓存。 -
1.是的,这是开发环境。 2. 这些是 HTML 中的 SCRIPT 标签。 3. 是的,我的也设置为禁用缓存。让我尝试启用缓存。
-
@christian314159 看起来即使启用了缓存,jQuery 似乎仍在重新加载脚本...
-
但如果它们是 SCRIPT 标签,它们就意味着每次都这样加载。你的
$.ajaxSetup对它没有任何作用。 -
感谢您的链接。我现在注意到你的意思了。加载过程中发生了很长时间,突然所有内容都在网络瀑布中出现了两次。您是否触发了任何 window.load 事件?另外,您是否注意到您所有的 SCRIPT 标记都在您的 body 标记之外(它们实际上都是 HTML 标记的所有子标记)?也许这可能是一个原因。
标签: javascript jquery ajax performance angularjs