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

时间:2015-12-17 00:03:56

标签: javascript html5 http web-worker web-frontend

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

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()一直在请求它......

1 个答案:

答案 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