0

我正在使用经常多次加载相同的外部 javascript 文件的遗留代码。

我正在尝试决定是否需要找到所有加载 .js文件的位置并阻止它们重新加载文件(如果文件已经存在),或者我是否可以简单地修改所有.js文件以防止它们被解析已经被解析了。

例如。假设我有一个.js名为utils.js.

if(!utils_Loaded){
   var utils_Loaded = true;
   var utils = function() {

     //javasript code here

   };
} else {
   console.log("utils.js was already loaded, so we skipped parsing it again.");
}

但是,还有大约 500 个其他包含仍在加载utils.js中,所以实际上,HTML 看起来像这样:

<script src="/utils.js"></script> ...
<script src="/utils.js"></script> ...
<script src="/utils.js"></script> ...
<script src="/utils.js"></script> ...
<script src="/utils.js"></script> ...
<script src="/utils.js"></script> (... etc)

所以我的问题是,现代浏览器将如何处理多重加载?我假设浏览器会缓存文件,但它仍然必须再次将其拉入内存,这可能很小,直到成倍增加,因为这在代码中无处不在,数百个文件都被多次加载。

在包含点检查会更好吗?

<script>if(!utils_Loaded){$.getScript("utils.js");}</script> ...
<script>if(!utils_Loaded){$.getScript("utils.js");}</script> ...
<script>if(!utils_Loaded){$.getScript("utils.js");}</script> ...
<script>if(!utils_Loaded){$.getScript("utils.js");}</script> ...
<script>if(!utils_Loaded){$.getScript("utils.js");}</script> ...
<script>if(!utils_Loaded){$.getScript("utils.js");}</script> (...etc)
4

2 回答 2

1

可能需要一些时间,但最好的办法就是把它清理干净。您可以使用页面加载 utils.js 一次(如果它被使用的次数与您所说的一样多,那么不这样做似乎很愚蠢)。您还可以将加载抽象到一个函数中,以帮助集中您的 utils_loaded 检查。

于 2012-12-18T01:38:23.077 回答
0

只要您的网络服务器使用未修改响应,就会有一堆不必要的 GET 请求......

顺便说一句,如果您使用的是 ASP/PHP 或同等版本,我建议将该行放入文件中并替换为 include_once('tagline.js');

编辑:有趣的旁注,做了一些测试,似乎在 chrome(23) 和 Internet Explorer(9) 和 Opera(12.11) 中有一个错误,使它只加载一次;即使使用 HTTP 标头“Cache-Control: no-cache, must-revalidate”:p(但不是 firefox)

于 2012-12-18T01:50:36.653 回答