Tôi đã đọc qua bài viết html5rocks Introduction to service worker và đã tạo ra một nhân viên dịch vụ cơ bản mà lưu trữ trang, JS và CSS trong đó hoạt động như mong đợi:Dịch vụ-công nhân lực cập nhật tài sản mới
var CACHE_NAME = 'my-site-cache-v1';
var urlsToCache = [
'/'
];
// Set the callback for the install step
self.addEventListener('install', function (event) {
// Perform install steps
event.waitUntil(
caches.open(CACHE_NAME)
.then(function(cache) {
console.log('Opened cache');
return cache.addAll(urlsToCache);
})
);
});
self.addEventListener('fetch', function (event) {
event.respondWith(
caches.match(event.request)
.then(function(response) {
// Cache hit - return response
if (response) {
return response;
}
// IMPORTANT: Clone the request. A request is a stream and
// can only be consumed once. Since we are consuming this
// once by cache and once by the browser for fetch, we need
// to clone the response
var fetchRequest = event.request.clone();
return fetch(fetchRequest).then(
function(response) {
// Check if we received a valid response
if(!response || response.status !== 200 || response.type !== 'basic') {
return response;
}
// IMPORTANT: Clone the response. A response is a stream
// and because we want the browser to consume the response
// as well as the cache consuming the response, we need
// to clone it so we have 2 stream.
var responseToCache = response.clone();
caches.open(CACHE_NAME)
.then(function(cache) {
cache.put(event.request, responseToCache);
});
return response;
}
);
})
);
});
Khi tôi làm thay đổi đối với CSS, thay đổi này không được chọn khi nhân viên dịch vụ trả lại đúng CSS từ bộ nhớ cache.
Trường hợp tôi bị kẹt là nếu tôi thay đổi HTML, JS hoặc CSS, làm cách nào để đảm bảo rằng nhân viên dịch vụ tải phiên bản mới hơn từ máy chủ nếu nó có thể thay vì từ bộ nhớ cache? Tôi đã thử sử dụng tem phiên bản trên CSS nhập khẩu nhưng điều đó dường như không hoạt động.
Cảm ơn câu trả lời. Sau khi đọc bài viết trên blog của Jake tôi có thể thấy rằng có một số mẫu mà bạn có thể sử dụng trong các trường hợp khác nhau. Tôi sẽ quyết định những gì tôi thực sự muốn làm và thử triển khai bằng cách sử dụng một trong các mẫu đó. –
Tôi đang sử dụng phần mở rộng như bạn đã đề cập, nhưng nội dung cập nhật của tôi không bị thay thế trong bộ nhớ cache, vì vậy nó sẽ có phiên bản cũ nếu tôi làm mới với ctrl + r nhưng phiên bản mới nếu tôi làm mới với ctrl + shift + r. Lý do có thể là nhân viên dịch vụ của tôi không được cập nhật. https://developers.google.com/web/fundamentals/getting-started/primers/service-workers#update-a-service-worker tuyên bố rằng nó được cập nhật nếu thay đổi một byte, nhưng nếu nhân viên dịch vụ mới của tôi không làm gì thay đổi một byte? (vì nó xảy ra nếu chỉ một băm đã thay đổi). Làm thế nào để buộc các dịch vụ làm việc để cập nhật? –
Xem http: // stackoverflow.com/questions/38843970/service-worker-javascript-update-frequency-every-24-hours/38854905 # 38854905 và xác nhận rằng tệp 'service-worker.js' đã cập nhật của bạn đang được tìm nạp từ mạng chứ không phải từ trình duyệt bộ nhớ cache. Bất kỳ thay đổi nào kể cả băm của một tệp trong 'service-worker.js' được tạo ra cũng đủ để kích hoạt luồng cập nhật. –