DANH MỤC TÀI LIỆU
Tìm hiểu Java Service Worker
Tìm hi u Service Worker
Chào t c c các b n. Khi chúng ta m trình duy t Google Chrome ho c ấ ả
Firefox thì s có xu t hi n thông báo t google, facebook ho c là youtobe... ấ ệ
Mà không c n m trang các trang web đó lên. Đ có th làm đ c nh v y ượ ư ậ
thì th ng mà chúng ta s tìm hi u sau đây là Service Worker có th đáp ng ể ứ
đ c và gi i quy t đ c vi c đó. V y...ượ ế ượ
JavaScript Service Worker là gì?
Service Worker là m t script mà trình duy t ch y d i background, tách ạ ở ư
kh i trang web và giúp th c hi n các tính năng không c n đ n trang web, ầ ế
hay t ng tác ng i dùng. Service Worker có m t s đ c đi m quan tr ng ươ ườ ố ặ
là:
Không liên k t v i m t trang c th Không truy c p đ n DOM Có th ế ể ậ ế ể
d ng khi không s d ng và ch y khi c n thi t. Ch h tr HTTPS V i ử ụ ế ỉ ỗ
Service Worker chúng ta có th :
Làm cho trang web ch y nhanh h n và có th ch y offline Th c hi n m t ơ ể ạ
s tính năng background nh : push message và background ố ở ư
synchronization. Có l đ n đây thì b n đã hi u ph n nào v JavaScript ẽ ế
Service Worker r i. Ti p theo, chúng ta s tìm hi u v cách s d ng nó. ế ử ụ
Đăng ký JavaScript Service Worker
Gi s , tôi có m t trang web đ n gi n và c u trúc các t p tin nh sau:ả ử ơ ư
index.html
service_worker.js
main.js
style.css
Lúc này, tôi s đăng ký Service Worker trong file main.js:
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('service_worker.js')
.then(reg => {
console.log('Registered service worker');
}).catch(err => {
console.log('Register service worker failed', err);
});
}
Có m t s l u ý quan tr ng khi đăng ký Service Worker là: ố ư
V trí c a file service_worker.js quy t đ nh đ n URL c a các trang mà nó ế ị ế
đi u khi n. đây, tôi đ t file service_worker.js cùng th m c v i ể Ở ư
index.html. Có nghĩa là Service Worker s qu n lý URL c a toàn b trang ẽ ả
web. Ng c l i, n u tôi đ t nó m t th m c khác, gi s là: ượ ế ư ả ử
/apps/service_worker.js thì Service Worker s ch qu n lý các URL b t đ u ắ ầ
t /apps/. Hàm đăng ký .register tr v m t Promise. Trang đăng ký Service ả ề
Worker ph i là HTTPS. Service Worker ph i n m trên cùng trang web đăng ả ằ
ký nó (same origin). v y, b n không th đ t file service_worker.js m t ể ặ
n i khác, r i s d ng importScripts() đ c. Tôi có tham kh o đ c m t ví ơ ử ụ ượ ượ
d m u v cách tri n khai JavaScript Service Worker nh sau:ụ ẫ ư
const PRECACHE = 'my-precache-v1';
const RUNTIME = 'my-runtime';
// A list of local resources we always want to be cached.
const PRECACHE_URLS = [
'index.html',
'./', // Alias for index.html
'style.css',
'main.js'
];
// The install handler takes care of precaching the resources we always need.
self.addEventListener('install', event => {
event.waitUntil(
caches.open(PRECACHE)
.then(cache => cache.addAll(PRECACHE_URLS))
.then(self.skipWaiting())
);
});
// The activate handler takes care of cleaning up old caches.
self.addEventListener('activate', event => {
const currentCaches = [PRECACHE, RUNTIME];
event.waitUntil(
caches.keys().then(cacheNames => {
return cacheNames.filter(cacheName => !
currentCaches.includes(cacheName));
}).then(cachesToDelete => {
return Promise.all(cachesToDelete.map(cacheToDelete => {
return caches.delete(cacheToDelete);
}));
}).then(() => self.clients.claim())
);
});
// The fetch handler serves responses for same-origin resources from a cache.
// If no response is found, it populates the runtime cache with the response
// from the network before returning it to the page.
self.addEventListener('fetch', event => {
// Skip cross-origin requests, like those for Google Analytics.
if (event.request.url.startsWith(self.location.origin)) {
event.respondWith(
caches.match(event.request).then(cachedResponse => {
if (cachedResponse) {
return cachedResponse;
}
return caches.open(RUNTIME).then(cache => {
return fetch(event.request).then(response => {
// Put a copy of the response in the runtime cache.
return cache.put(event.request, response.clone()).then(() => {
return response;
});
});
});
})
);
}
});
Sau khi đăng ký thành công, Service Worker s đ c download v phía ẽ ượ
client và th c hi n nh ng vi c sau đây.ự ệ
Service Worker - Install
Đo n code dùng đ install Service Worker:ạ ể
const PRECACHE = 'my-precache-v1';
const RUNTIME = 'my-runtime'; // A list of local resources we always want
to be cached.
const PRECACHE_URLS = [
'index.html',
'./', // Alias for index.html
'style.css',
'main.js'
];
// The install handler takes care of precaching the resources we always need.
self.addEventListener('install', event => {
event.waitUntil(
caches.open(PRECACHE)
.then(cache => cache.addAll(PRECACHE_URLS))
.then(self.skipWaiting())
);
});
M c đích c a c a vi c install là đ l u m t s resources đ c đ nh nghĩa ể ư ượ
array PRECACHE_URLS vào b nh đ m cache v i tên đ nh nghĩa b i ớ ệ
**PRECACHE. ** Sau khi l u xong h t t t c các resources c n thi t, hàmư ế ấ ế
self.skipWaiting() dùng đ d ng công vi c hi n t i l i và chuy n ngay sangể ừ
công vi c ti p theo.ệ ế
JavaScript Service Worker - activate
Đo n code dùng đ active Service Worker là:ạ ể
self.addEventListener('activate', event => {
const currentCaches = [PRECACHE, RUNTIME];
event.waitUntil(
caches.keys().then(cacheNames => {
return cacheNames.filter(cacheName => !
currentCaches.includes(cacheName));
}).then(cachesToDelete => {
return Promise.all(cachesToDelete.map(cacheToDelete => {
thông tin tài liệu
Khi chúng ta mở trình duyệt Google Chrome hoặc Firefox thì sẽ có xuất hiện thông báo từ google, facebook hoặc là youtobe... Mà không cần mở trang các trang web đó lên. Để có thể làm được như vậy thì thằng mà chúng ta sẽ tìm hiểu sau đây là Service Worker có thể đáp ứng được và giải quyết được việc đó.
Mở rộng để xem thêm
xem nhiều trong tuần
yêu cầu tài liệu
Giúp bạn tìm tài liệu chưa có

LÝ THUYẾT TOÁN


×