加载一个JS文件两次但只解析一次的性能是什么?

时间:2012-12-18 01:27:36

标签: javascript performance browser include

我正在处理经常加载相同外部javascript文件的遗留代码。

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

例如。假设我有一个名为.js的{​​{1}}文件。

utils.js

但是,还有大约500个其他包含仍在加载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."); } ,因此实际上,HTML看起来像这样:

utils.js

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

在包含点检查时会更好吗?

<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)

2 个答案:

答案 0 :(得分:1)

可能需要一些时间,但最好的办法就是清理它。您可以在页面上加载一次utils.js(如果它的使用方式与您说的那么多,那么它似乎很傻)。您还可以将加载抽象为函数,以帮助集中化utils_loaded检查。

答案 1 :(得分:0)

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

btw如果您使用的是ASP / PHP或者相同,我建议将该行放入文件中并替换为include_once('tagline.js');

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