在我的服务器上我记录了这个:
GET /js/workers/one.js 200 2.509 ms - 828
GET /js/workers/one.js 304 1.593 ms - -
GET /js/workers/one.js 304 0.499 ms - -
GET /js/workers/one.js 304 0.464 ms - -
GET /js/workers/one.js 304 1.101 ms - -
(注意200,然后是4 304)
在我的前端代码中,有这样的:
var myWorker = new Worker('/js/workers/one.js');
为什么我的前端不会以某种方式缓存此文件?每次拨打new Worker()
...
解决问题的一种方法(可能)可能是将文件放在<script>
标记中,如下所示:
<script src="/js/workers/one.js"></script>
然而,问题在于&#34; importScripts&#34;将无法正常工作
也许这会有用吗?
if(typeof importScripts === 'function'){
importScripts('https://cdnjs.cloudflare.com/ajax/libs/react/0.14.3/react.js');
importScripts('https://cdnjs.cloudflare.com/ajax/libs/react/0.14.3/react-dom.js');
}
阻止新Worker()重新请求文件的最佳方法是什么?
更新:
如果我把js / workers.one.js文件放在像这样的脚本标签中
<script src="/js/workers/one"></script>
然后服务器执行此操作:
GET /js/workers/one.js 304 0.521 ms - -
GET /js/workers/one.js 304 0.605 ms - -
GET /js/workers/one.js 304 0.289 ms - -
GET /js/workers/one.js 304 0.300 ms - -
GET /js/workers/one.js 304 0.347 ms - -
(注意5 304s)
所以它已经加载了,(不像以前那里有200个响应),但新的Worker()一直在请求它......
答案 0 :(得分:1)
304 status code表示您的浏览器确实具有实际缓存的文件,并且明确允许服务器重复使用它。执行请求是因为缓存版本由于某种原因被视为stale,并且服务器必须为validated。
在提供文件时,您可以通过在响应中添加一些带有文件数据的http标头来明确指示其新鲜度生命周期。您可以添加Expires
header以及之后的日期/时间
回应被认为是陈旧的,例如:
layoutSubviews
使用Expires: Thu, 17 Dec 2015 16:00:00 GMT
标题和max-age
response directive,您可以指示在其年龄大于指定的秒数后,响应将被视为过时:
Cache-control