IE11缓存和未缓存JavaScript之间的行为不同

时间:2018-09-27 08:22:17

标签: javascript angular internet-explorer-11

我有一个Angular 6应用程序。构建生成的HTML引用了以下JS文件:

<script type="text/javascript" src="runtime.7e3855236bac2de104f2.js"></script>
<script type="text/javascript" src="polyfills.8e212f269495fb61f755.js"></script>
<script type="text/javascript" src="scripts.1b1c75d8cf76e4b141af.js"></script>
<script type="text/javascript" src="main.814126c374dc80ced8d1.js"></script>

第一次加载应用程序时,我可以看到这些文件是从服务器加载的。问题在于,在此初始负载之后,没有任何反应。 Angular不会延迟加载所需的模块,并且不会将任何错误记录到控制台。

刷新页面时,我可以看到这些文件是从浏览器缓存中加载的。 Angular现在可以延迟加载所需的模块,并且一切正常。

我可以一直在IE11中重现此行为,因此在我看来,问题与从服务器加载JS文件与从浏览器缓存加载JS文件有关。

我已经调整了angular.json中的构建设置。如果我设置

"optimization": false,
"buildOptimizer": false

然后问题通常会消失。但是在服务器加载的页面的10%中,它仍然显示。将其还原回

"optimization": true,
"buildOptimizer": true

这个问题一直都可以重现。

有人知道为什么从服务器加载的JS文件与从浏览器缓存加载的JS文件之间会有区别吗?为什么构建参数会影响行为?

任何提示都将不胜感激。

编辑: 我在IE devtools中发现了另一个差异。

从服务器: From server 从缓存中: From cache

如您所见,缓存版本中没有启动器。

我在响应标题中发现了另一个差异。

缓存的版本返回Content-Length,Content-Type和ETag。未缓存的版本返回Content-Length,Content-Type,ETag,Accept-Ranges,Date,Last-Modified和Server。

接受范围的值为“字节”。

0 个答案:

没有答案