Photo by [Scott Graham](https://unsplash.com/@homajob) on [Unsplash](https://unsplash.com/)

使用 indexedDB 離線儲存圖片

緣起 由於最近碰到要在負責的網頁式聊天機器人中,新增如同Line聊天室的貼圖功能,可想而知會有大量的貼圖圖片會需要在用戶裝置瀏覽器進行下載,不管是對圖片伺服器或是用戶等待的過程來說都是不小的負擔。 為了解決這個問題,透過使用了 PWA (Progressive Web App) 技術中常用的離線儲存方案 indexedDB 來快取貼圖圖片,不僅減少用戶端與網站伺服器端的連線流量,也提升的用戶體驗(UX: User Experience) 。 Service Worker Service Worker是一個事件驅動的網站 Worker,根據不同的來源 (origin) 與網址路徑 (path) 進行註冊後,之後再次訪問同一網站後即會在背景執行這個 Service Worker。 Service Worker 無法直接存取 DOM 物件,他負責監聽和處理像是 fetch, notification(推播), sync 還有 Service Worker 註冊、啟動 等相關事件。 透過處理上述事件,我們可以讓 web 網頁像一般的手機原生 App 一樣可以執行安裝、發送推播、離線瀏覽及連線後同步等等作業。 離線儲存 常見的 Web 儲存方案有下面幾種: Cookie LocalStorage Cache (precache) indexedDB 一般 SPA (Single Page Application) 中比較常用的是 Cookie 跟 LocalStorage 兩種儲存方法,不過在使用上都會有大小的限制(無法儲存較大的網站資源),像是 LocalStorage 的限制依照瀏覽器不同會落在大約 2MB ~ 10MB 左右,超過後就會發出Error。 而在 PWA 的離線儲存上通常會使用 Cache(precache) 或 indexedDB 來實作,它們的大小通常跟使用者裝置的 disk 空間有關係,以 Chrome 為例,所有網站可以用的共享儲存空間為硬碟可用空間的1/3, 每個網站 App 可以使用共享空間中的 20%。...

October 7, 2022 · 2 min