Я пытаюсь улучшить производительность нашего веб-приложения с помощью веб-работников. Мне нужно включить некоторые сценарии, которые я использовал importScripts (). Но загадка заключается в том, что importScripts терпит неудачу при попытке доступа в автономном режиме. Как получить доступ к этим файлам в автономном режиме с помощью Cache API? Нужно ли реализовывать пользовательский ридер для чтения ReadableStream? Есть ли лучший стандарт для реализации автономного доступа к кешу внутри веб-работников?
Детали
Эти файлы представляют собой сценарии javascript, которые имеют некоторые пользовательские js и внешние библиотеки, такие как CryptoJS и LocalForage. Я хотел бы реализовать - Сеть возвращается к парадигме Cache с использованием CacheAPI / Service Workers.
Первоначально я внедрил стандартного Service Worker с прослушивателями событий установки и извлечения, но я считаю, что область между работником службы и веб-работником была неодинаковой. После некоторого исследования MDN и исследования я вижу, что Cache API доступен в WebWorkerScope, поэтому я переместил вызов кэша в область действия веб-работника.
Я пробовал различные способы доступа к этим файлам, используя события извлечения и просто получая файлы из кэша. Я получаю ответ после того, как мои обещания разрешены, но тело ответа является читаемым потоком, и я не уверен, как решить это.
Любая помощь или указатели будут очень признательны.
Мой вызов веб-работника
var worker = new Worker('Path');
Я пытался следовать описанию в качестве руководства -
https://developers.google.com/web/ilt/pwa/caching-files-with-service-worker
// Web Worker
self.addEventListener('fetch', function(event){
event.respondWith(
fetch(event.request).catch(function(){
return caches.match(event.request);
})
)
});
caches.open('mcaseworker').then(function(cache){
var urlList = ['/resources/scripts/custom/globalConfig.js',
'/resources/scripts/localforage/localforage.min.js'
'/resources/scripts/utility/pako.js',
'/resources/scripts/cryptojs/aes.js',
'/resources/scripts/cryptojs/sha1.js'
];
// Initialize a promise all with the list of urls
Promise.all(urlList.map(function(url){
return fetch(url, {
headers : {
'Content-Type' : 'application/x-javascript'
}
})
.then(function(response){
if (response){
return response;
}
});
}))
.then(function(values){
Promise.all(values.map(function(value){
return value;
}))
.then(function(res){
// Custom Code
// Would like to access localforage and other javascript libraries.
})
})
})
Ответ после разрешения обещаний.
![enter image description here](https://i.stack.imgur.com/JzsSU.png)