Bosh sahifa Wiki Service Worker

Service Worker

Service Worker — brauzer sahifasidan alohida ishlaydigan, origin uchun tarmoq so‘rovlarini tutish va fon vazifalarini bajarishga imkon beradigan Web API worker’i. U DOM’ga bevosita kira olmaydi, lekin Fetch API, Cache Storage, push notification va clientlar bilan xabar almashishdan foydalanadi. Service Worker Progressive Web Application’larda offline ishlash va boshqariladigan cache’ning asosiy mexanizmidir.

Hayot sikli

Sahifa script URL’ini navigator.serviceWorker.register() orqali ro‘yxatdan o‘tkazadi. Brauzer worker faylini yuklab, install hodisasini ishga tushiradi. Shu bosqichda application shell kabi zarur resurslar cache’ga yozilishi mumkin. Install muvaffaqiyatli tugagach worker waiting, keyin eski versiya clientlarni bo‘shatganda activate holatiga o‘tadi.

Yangilanish worker script baytlari o‘zgarganda aniqlanadi. Yangi versiyani darhol skipWaiting bilan faollashtirish ochiq sahifa eski kod, worker esa yangi cache sxemasi bilan ishlashiga olib kelishi mumkin. Versiyalar orasidagi moslik, foydalanuvchiga reload taklifi va cache migration rejalashtiriladi. clients.claim() yangi workerga mavjud clientlarni boshqarish imkonini beradi.

Fetch va cache strategiyalari

fetch hodisasi doirasida worker so‘rovga tarmoqdan, Cache Storage’dan yoki yaratilgan javob bilan javob beradi. Cache-first o‘zgarmaydigan assetlar uchun tez, ammo yangilanishni kechiktiradi. Network-first yangilik yoki profil kabi ma’lumotda avval tarmoqni sinab, offline holatda cache’ga qaytadi. Stale-while-revalidate cached javobni darhol beradi va fon rejimida yangilaydi.

Har resurs uchun bir xil strategiya ishlatilmaydi. HTML, hashed JavaScript, avatar va authenticated API javobining yangilanish talabi turlicha. Cache key URL’dan tashqari method va ayrim header kontekstiga bog‘liq bo‘lishi mumkin. Shaxsiy API javobini umumiy cache’ga yozishdan oldin foydalanuvchi va logout tozalash siyosati hisobga olinadi.

Offline va fon imkoniyatlari

Offline sahifa foydalanuvchiga ulanish yo‘qligini aniq bildiradi. Mutationlar IndexedDB’da navbatga olinib, tarmoq qaytganda yuborilishi mumkin. Har qayta yuborish idempotency key bilan himoyalanadi; aks holda buyurtma yoki to‘lov takrorlanishi mumkin. Background Sync barcha brauzerda bir xil mavjud emas, shuning uchun ochiq sahifa orqali qayta urinish fallback sifatida qoladi.

Push xabari serverdan workerga keladi, hatto sayt oynasi yopiq bo‘lsa ham notification chiqarilishi mumkin. Foydalanuvchi ruxsati, unsubscribe va minimal ma’lumot tamoyili saqlanadi. Push payload ichida maxfiy mazmun yuborish lock screen’da oshkor bo‘lishi mumkin.

Chegaralar va xavfsizlik

Service Worker HTTPS yoki localhost kabi secure context’da ishlaydi. Uning scope’i odatda script joylashgan katalog va pastki yo‘llar bilan cheklanadi. Worker origin trafigiga vositachi bo‘lgani uchun buzilgan script uzoq vaqt zararli javob tarqatishi mumkin. Script Content Security Policy, dependency nazorati va server cache qoidalari bilan himoyalanadi.

Worker doimiy daemon emas; brauzer uni bo‘sh paytda to‘xtatib, hodisa kelganda qayta ishga tushiradi. Global memory’ga tayangan holat yo‘qolishi mumkin. Uzoq vazifa bo‘laklanadi, doimiy holat IndexedDB’da saqlanadi va event lifetime waitUntil() bilan bog‘lanadi.

Debug va tiklash

Development tools ro‘yxatdan o‘tgan worker, scope, cache va lifecycle holatini ko‘rsatadi. Oddiy “hard refresh” har doim worker va Cache Storage’ni tozalamaydi; muammo worker’ni unregister qilish yoki storage’ni alohida o‘chirishni talab qilishi mumkin. Production foydalanuvchisiga buni qo‘lda qildirish o‘rniga xavfsiz recovery mexanizmi yaratiladi.

Noto‘g‘ri worker barcha navigatsiyani buzsa, serverdagi script URL’da tuzatuvchi versiya beriladi. Eski faylni 404 qilish kifoya emas, chunki o‘rnatilgan worker ishlashda davom etishi mumkin. Emergency update cache’larni maqsadli tozalaydi, clientlarni yangilaydi va offline saqlangan foydalanuvchi ma’lumotini asossiz o‘chirmaydi.

Bog‘liq tushunchalar

Progressive Web Application, Cache Storage, Web Worker, Fetch API, IndexedDB, Push API, Offline-first