WebWorkers - 新的 Worker 不断从服务器请求相同的脚本

WebWorkers - new Worker keeps requesting same script from server

在我的服务器上,我记录了这个:

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>

然而,问题在于 "importScripts" 将不起作用

也许这行得通?

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');
}

防止 new 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 响应),但是 new Worker() 一直在请求它...

304 status code means that your browser does have the file cached actually and is explicitly allowed to reuse it by the server. The request is performed because the cached version is considered stale for some reason and must be validated 由服务器。

提供文件时,您可以通过在文件数据的响应中添加一些 http headers 来明确指示其新鲜度生命周期。您可以添加 Expires header 和 date/time 之后 响应被认为是陈旧的,例如:

Expires: Thu, 17 Dec 2015 16:00:00 GMT

使用 Cache-control header 和 max-age response directive 可以指示响应在其年龄大于指定秒数后将被视为陈旧:

Cache-Control: max-age=600