Service Worker 是在 Web 應用程式背景執行的腳本,與主瀏覽器執行緒分開。它們支援推播通知、後台同步和離線功能。 Service Worker 充當 Web 應用程式、瀏覽器和網路之間的中介。以下是如何以及何時使用 Service Worker 的範例:
通常,當您造訪網頁時,網頁會向伺服器發送請求,伺服器將資料傳回給您:
如果您註冊了 Service Worker,它將被新增為網頁瀏覽器和伺服器之間的中間件:
它停止對伺服器的請求,並決定是否將請求發送到伺服器或離線工作。在這種情況下,您將能夠離線查看整個頁面,而不是顯示 404 Not Found 頁面。您也可以使用 Service Worker 建立自訂離線頁面。
通常,如果您的電腦上沒有互聯網,它會向您顯示錯誤頁面。
即使沒有互聯網,我們也會透過 Service Worker 存取網頁。
註冊→安裝→啟動→取得
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Home</title> <!-- Scripts --> <script src="main.js" defer></script> </head> <body> <!-- istalgan kodlaringizni yozishingiz mumkin... --> </body> </html>
我們將 main.js 檔案連接到 html。
main.js
// service worker browser tomonidan support qilinishini tekshirib olamiz if ('serviceWorker' in navigator) { // web sahifa browserga yuklanishi bilan ishlashini aytib o'tamiz window.addEventListener('load', () => { // 1. service workerni registratsiyadan o'tkazamiz. navigator.serviceWorker .register('sw.js') // bizda sm.js file ochib olishimiz kerak bo'ladi. va bu yerdagi register ushani target qiladi. .then((registration) => console.log('Service Worker registered with scope:', registration.scope) ) .catch((error) => { console.error('Service Worker registration failed:', error); }); }); }
sw.js
// browser kashda qanday nom nilan saqlanishini bildirish uchun nom beramiz const cacheName = 'my-cache-v1'; // Qaysi fayllarni kashlashini aytib o'tib ketamiz const cacheFiles = ['index.html', 'posts.html', 'css/style.css', 'js/main.js']; // 2. INSTALL qilamiz self.addEventListener('install', (event) => { event.waitUntil( // kashdan biz bergan nom bilan joy ochadi va bizni fayllarimizni joylaydi. caches.open(cacheName).then((cache) => cache.addAll(cacheFiles)) ); }); // 3. ACTIVATE qilish self.addEventListener('activate', () => { console.log('Server worker activated'); }); // 4. FETCH, ya'ni oflayn holatimizda kashlangan fillarni ko'rsatish uchun olish self.addEventListener('fetch', (event) => { event.respondWith( caches .match(event.request) .then((response) => response || fetch(event.request)) ); });
執行此操作後,如果我們轉到瀏覽器的開發工具部分中的應用程式列並查看服務工作人員部分,我們可以看到啟動已發生。
當我們進入快取儲存部分時,我們將得到我們用我們給定的名稱標記的檔案。
看完這些,我們可以看到結果:
如您所見,它現在可以離線使用。在離線狀態下,Service Worker 會從它在快取儲存中為我們開啟的位置取得它。
@abdulakhatov-dev
@AbdulakhatovDev
以上是服務人員的詳細內容。更多資訊請關注PHP中文網其他相關文章!