2017-04-23 33 views
0

我想使應用程序完全脫機。即用戶點擊一個按鈕(或不這樣做,這可能會自動發生),並且每個頁面(包括所有動態頁面)和網站上的資源都可以被緩存。如何初始化所有網站頁面的sw-precache

我知道我需要生成所有資產的列表,是否有一個工具可以做到這一點,或者任何內置於sw-precache的方式?

此外,緩存的容量有多大,可用的時間有多長?我認爲它可以是任何大小和可用,除非用戶特別清除瀏覽器緩存。

回答

0

如果您有一個本地目錄充滿了靜態文件(HTML,JS,CSS等),sw-precache可以配置爲根據您傳入的模式自動預先緩存所有這些文件(或它們的某些子集) staticFileGlobs option。在您進行本地更改時,用戶瀏覽器中先前預先緩存的條目將保持最新狀態,重新生成service-worker.js並重新部署。

通常,使用高速緩存存儲API可以存儲的最大數據量沒有硬性上限。這取決於當前空間的空間量(可能還有其他啓發式)。

在確定哪些文件被預先存儲並確保它們實際上是用戶可能覺得有用的文件時,您應該考慮周全。例如,如果用戶第一次訪問您的(假想的)文檔站點,他們最終將下載和存儲數千個單獨的HTML文檔,這會浪費您的服務器和用戶的帶寬 - 除了佔用空間用戶的設備。

如果您有大量資源是可選或不可能被所有訪問者需要的,那麼對於關鍵資源使用預先緩存策略,以及針對可選資源的runtime caching strategy是最佳選擇。您可以將運行時緩存策略與最大緩存大小或最大時間相結合,底層的庫將負責爲您刪除舊條目。

+0

謝謝,這回答了存儲限制。我有運行時緩存設置來緩存所有內容。基本上我希望允許用戶通過點擊按鈕來緩存所有頁面,包括動態生成的頁面(更新我的問題),以允許完全離線使用。據我所知,唯一的辦法是訪問每個頁面來初始化緩存,但是沒有內置的方法可以實現這一點(不需要重新部署任何動態更改)? – riley

+0

如果您提前知道可能的URL,則可以提前預緩存動態頁面,並使用https://github.com/GoogleChrome/sw-precache#dynamicurltodependencies-objectstringarraystring選項。既然你提到「點擊一個按鈕」,這使得我不想預縮,而是按需緩存。你可以按照需要使用'window.caches'填充緩存,然後通過'runtimeCaching'設置一個路由來使用適當的更新策略(比如''''''''''''''')來處理這些緩存的響應。 –

相關問題