防止工作人员每次创建时访问服务器
Prevent worker from accessing server every time it is created
我必须让我的页面照常工作,但即使没有网络连接。唯一的问题是每次创建 worker 时,它都会重新加载它的 js 文件,因此在连接丢失后,它会抛出错误并且什么也不做。
我有代码:
let my_worker = null
function start(from_v, to_v){
my_worker = new Worker('wwa_worker.js');
my_worker.postMessage({ from_val: from_v, to_val: to_v});
my_worker.onmessage = function (e) {
result_field.value = e.data;
}
}
function stop(){
my_worker.terminate();
my_worker = null
}
主要思想是我必须缓存 worker 的 js 文件,这样它就不会在本次会话中再次加载。
如评论中,我用的是service worker
在主 js 文件中注册工人:
// main.js
navigator.serviceWorker.register('/service-worker.js');
然后每次调用 fetch 时,尝试在缓存中查找资源,如果不存在则从服务器加载它(code from MDN,带回退的版本也在这里):
// service-worker.js
self.addEventListener('fetch', (event) => {
event.respondWith(
caches.match(event.request).then((resp) => {
return resp || fetch(event.request).then((response) => {
return caches.open('v1').then((cache) => {
cache.put(event.request, response.clone());
return response;
});
});
})
);
});
我必须让我的页面照常工作,但即使没有网络连接。唯一的问题是每次创建 worker 时,它都会重新加载它的 js 文件,因此在连接丢失后,它会抛出错误并且什么也不做。 我有代码:
let my_worker = null
function start(from_v, to_v){
my_worker = new Worker('wwa_worker.js');
my_worker.postMessage({ from_val: from_v, to_val: to_v});
my_worker.onmessage = function (e) {
result_field.value = e.data;
}
}
function stop(){
my_worker.terminate();
my_worker = null
}
主要思想是我必须缓存 worker 的 js 文件,这样它就不会在本次会话中再次加载。
如评论中
在主 js 文件中注册工人:
// main.js
navigator.serviceWorker.register('/service-worker.js');
然后每次调用 fetch 时,尝试在缓存中查找资源,如果不存在则从服务器加载它(code from MDN,带回退的版本也在这里):
// service-worker.js
self.addEventListener('fetch', (event) => {
event.respondWith(
caches.match(event.request).then((resp) => {
return resp || fetch(event.request).then((response) => {
return caches.open('v1').then((cache) => {
cache.put(event.request, response.clone());
return response;
});
});
})
);
});