ข้ามไปยังเนื้อหา

PWA กับ Svelte: ภาพรวม

SvelteKit มาพร้อมกับการรองรับ service worker แบบ first-class ในตัว — ไม่ต้องติดตั้งแพ็กเกจเพิ่มเติม เพียงวางไฟล์ที่ src/service-worker.js แล้ว SvelteKit จะ bundle และลงทะเบียนให้อัตโนมัติในขั้นตอน build ภายในไฟล์นั้น virtual module $service-worker จะให้รายการ asset ที่ build เสร็จแล้ว, ไฟล์ static, และ version string — ทุกอย่างที่คุณต้องการในการ precache แอปของคุณ

สำหรับทีมที่ต้องการ Workbox (ไลบรารี caching strategy ของ Google) พร้อมกับการสร้าง manifest อัตโนมัติและ update API ที่ครบครัน แพ็กเกจ @vite-pwa/sveltekit จะห่อ Workbox ไว้ใน Vite plugin ที่ผสานรวมกับ build pipeline ของ SvelteKit ได้อย่างลงตัว

SW ในตัว ($service-worker)@vite-pwa/sveltekit
ติดตั้งเพิ่มไม่ต้องnpm i -D @vite-pwa/sveltekit
Caching strategiesManual (Cache API)Workbox (stale-while-revalidate, cache-first, …)
Manifestเขียนเองสร้างจาก config ของ plugin
Update APIManual updatefound / statechangevirtual:pwa-register พร้อม store
เหมาะสำหรับเรียนรู้, แอปขนาดเล็กแอป production ที่ต้องการควบคุมละเอียด

โมดูลนี้ครอบคลุม ทั้งสองแนวทาง ใน 5 บทเรียน เพื่อให้คุณเลือกแนวทางที่เหมาะกับโปรเจกต์

flowchart LR
  subgraph Build
    SK["SvelteKit build"] --> BF["build/ assets (hashed)"]
    SK --> ST["static/ files"]
    BF --> VER["version string"]
  end
  subgraph ServiceWorker["Service Worker (either path)"]
    VER --> CACHE["CACHE = cache-version"]
    BF --> ASSETS["ASSETS = [...build, ...files]"]
    ASSETS --> PRE["precache on install"]
  end
  subgraph Page
    REG["navigator.serviceWorker.register()"] --> SW["sw.js activated"]
    SW --> INT["intercepts fetch()"]
  end
  Build --> ServiceWorker
  ServiceWorker --> Page
SvelteKit build pipeline → service worker → page
  1. ภาพรวม (หน้านี้) — สองแนวทาง PWA ใน SvelteKit และเมื่อไหร่ควรเลือกแนวทางใด
  2. SvelteKit PWA setup — ติดตั้ง @vite-pwa/sveltekit, ตั้งค่า SvelteKitPWA() ใน vite.config.ts, และทำความเข้าใจ registerType, manifest, และ strategies
  3. โมดูล $service-worker — สร้าง src/service-worker.js โดยใช้เฉพาะ SvelteKit built-ins: build, files, version, และ prerendered
  4. Update flow — ตรวจจับ service worker ใหม่, แจ้งเตือนผู้ใช้ให้ reload, และความแตกต่างระหว่าง autoUpdate กับ prompt registration type
  5. Svelte-specific patterns — online/offline store, install-prompt component, reactive update-available state, และ SSR/adapter notes
โมดูล $service-worker เปิดเผยอะไรบ้าง?
แพ็กเกจใดที่เพิ่ม Workbox และการสร้าง manifest อัตโนมัติให้กับ SvelteKit PWA?
SvelteKit มองหาไฟล์ custom service worker ที่ตำแหน่งใดโดยค่าเริ่มต้น?