目錄
切勿在清單文件中列出清單文件
緩存頁面上未緩存的資源不會加載
始終在服務器的 .htaccess 文件中設置應用程序類型清單
避免因找不到文件而丟棄整個清單
即使在線,數據也從 AppCache 加載
服務器上的更改不會發生,直到清單文件更新
清單文件必須與主機來自相同的來源提供服務
相對 URL 相對於清單的 URL
以編程方式檢查清單的狀態
結論
關於 HTML5 應用程序緩存的常見問題解答 (FAQ)
什麼是 HTML5 應用程序緩存,為什麼它很重要?
HTML5 應用程序緩存是如何工作的?
使用 HTML5 應用程序緩存時有哪些常見的陷阱?
如何避免這些陷阱?
HTML5 應用程序緩存的未來是什麼?
如何創建清單文件?
如何將網頁與清單文件關聯?
如何更新緩存?
如果清單文件中列出的資源無法下載會發生什麼?
我可以將 HTML5 應用程序緩存用於所有資源嗎?
首頁 web前端 js教程 使用HTML5應用程序緩存時,常見的陷阱要避免

使用HTML5應用程序緩存時,常見的陷阱要避免

Feb 20, 2025 am 10:05 AM

Common Pitfalls to Avoid when using HTML5 Application Cache

關鍵要點

  • 切勿將清單文件包含在應用程序緩存清單中,這會造成循環,幾乎無法通知您的網站有新的緩存文件可用。
  • 始終在服務器的 .htaccess 文件中設置應用程序類型清單,以確保 AppCache 正確運行。如果未設置媒體類型,AppCache 將無法工作。
  • 請注意,如果清單文件中指定的單個文件都找不到或無法下載,則整個清單文件將被丟棄。這是 AppCache 的一種特殊行為。
  • 更新網站後,始終更新清單文件,否則用戶將看不到更改,只會看到以前緩存的數據。您可以在清單文件中註釋中更新版本號或日期,以強制用戶的 Web 瀏覽器下載清單文件的新版本。

HTML5 應用程序緩存(也稱為 AppCache)近來成為 Web 開發人員關注的熱點話題。 AppCache 使您可以允許網站訪問者在離線時瀏覽您的網站。您甚至可以將網站的部分內容(例如圖像、樣式表或 Web 字體)存儲在用戶計算機上的緩存中。這可以幫助您的網站加載速度更快,從而減少服務器的負載。

要使用 AppCache,您可以創建一個擴展名為“appcache”的清單文件,例如:manifest.appcache。在此文件中,您可以列出要緩存的所有文件。要在您的站點上啟用它,您必須在 html 元素的網頁上包含對該清單文件的引用,如下所示:

<html lang="en" manifest="manifest.appcache">
登入後複製
登入後複製
登入後複製

這是一個示例清單文件:

<code>CACHE MANIFEST
# 2015-01-23 v0.1
/style.css
/logo.gif
/script.js

NETWORK:
*

FALLBACK:
/server/ /fallback.html</code>
登入後複製
登入後複製
登入後複製

除了 AppCache 的好處之外,還有一些常見的陷阱應該避免,以防止破壞用戶體驗並破壞您的應用程序。

切勿在清單文件中列出清單文件

如果您在應用程序緩存清單中包含清單文件本身,它會陷入某種循環,幾乎無法通知您的網站有新的緩存文件可用,並且它應該下載並使用新的清單文件而不是舊的清單文件。因此,務必小心不要犯以下錯誤:

<code>CACHE MANIFEST
# 2015-01-23 v0.1

manifest.appcache
page2.css</code>
登入後複製
登入後複製
登入後複製

緩存頁面上未緩存的資源不會加載

這是第一次使用 AppCache 時非常常見的錯誤。這就是清單文件中的 NETWORK 標誌發揮作用的地方。清單文件的 NETWORK 部分指定 Web 應用程序需要在線訪問的資源。

在 NETWORK 標誌下指定的 URL 基本上是“白名單”,也就是說,在此標誌下指定的文 件在有互聯網連接時始終從服務器加載。例如,以下代碼片段確保對加載包含在 /api/ 子樹中的資源的請求始終從網絡加載,而不是從緩存加載。

<html lang="en" manifest="manifest.appcache">
登入後複製
登入後複製
登入後複製

始終在服務器的 .htaccess 文件中設置應用程序類型清單

清單文件應始終在正確的媒體類型 text/cache-manifest 下提供服務。如果未設置媒體類型,則 AppCache 將無法工作。

它應始終在生產服務器的 .htaccess 文件中配置。大多數講解 AppCache 的教程中都提到了這一點,但在將 Web 應用程序從開發服務器遷移到生產服務器時,許多開發人員都會忽略這一點。

在 Apache 的 .htaccess 文件中輸入以下內容:

<code>CACHE MANIFEST
# 2015-01-23 v0.1
/style.css
/logo.gif
/script.js

NETWORK:
*

FALLBACK:
/server/ /fallback.html</code>
登入後複製
登入後複製
登入後複製

如果您將應用程序上傳到 Google App Engine,則可以通過將以下代碼段添加到 app.yaml 文件中來完成相同的任務:

<code>CACHE MANIFEST
# 2015-01-23 v0.1

manifest.appcache
page2.css</code>
登入後複製
登入後複製
登入後複製

避免因找不到文件而丟棄整個清單

如果清單文件中指定的單個文件都找不到或無法下載,則整個清單文件將被丟棄。這是 AppCache 的一種奇怪的行為,在設計使用 AppCache 的 Web 應用程序時應牢記這一點。

例如:

<code>NETWORK:

/api</code>
登入後複製
登入後複製

如果刪除了 logo.gif,AppCache 將無法找到已刪除的圖像文件,因此清單文件中的任何內容都不會執行。

即使在線,數據也從 AppCache 加載

一旦您的 Web 瀏覽器保存了緩存清單文件,即使用戶已連接到互聯網,文件也會從緩存清單本身加載。此功能有助於提高網站的加載速度,並有助於減少服務器負載。

服務器上的更改不會發生,直到清單文件更新

由於您從前一點知道即使用戶在線,數據也會從 AppCache 加載,因此對網站或服務器中文件的更改不會發生,直到清單文件更新。

更新網站後,您始終必須更新清單文件,否則您的用戶將永遠無法看到更改,他們只會看到以前緩存的數據。您可以在清單文件中註釋中更新版本號或日期,以強制用戶的 Web 瀏覽器下載清單文件的新版本。例如,如果在對網站進行更改之前,以下是您使用的清單文件:

<code>AddType text/cache-manifest .manifest</code>
登入後複製

它可以更改為類似於以下代碼塊的內容,以便用戶的瀏覽器可以下載清單文件的新副本。

<code>- url: /public_html/(.*\.appcache)
  static_files: public_html/
  mime_type: text/cache-manifest
  upload: public_html/(.*\.appcache)</code>
登入後複製

請注意,以 # 開頭的行是不會執行的註釋行。

清單文件必須與主機來自相同的來源提供服務

儘管清單文件可以保存對要從其他域緩存的資源的引用,但它應從與主機頁面相同的來源提供給 Web 瀏覽器。如果不是這種情況,則清單文件將無法加載。例如,以下清單文件是正確的:

<code>CACHE MANIFEST
# 2015-01-23 v0.1
/style.css
/logo.gif
/script.js</code>
登入後複製

在這裡,我們指定了要存儲在用戶瀏覽器緩存中的內容,該內容是從另一個域引用的,這完全沒問題。

相對 URL 相對於清單的 URL

需要注意的一件重要事情是,您在清單中提到的相對 URL 相對於清單文件,而不是相對於您引用清單文件的文檔。如果清單和引用不在同一路徑中,則資源將無法加載,進而清單文件將無法加載。

如果您的應用程序結構如下所示:

<html lang="en" manifest="manifest.appcache">
登入後複製
登入後複製
登入後複製

那麼您的清單文件應如下所示:

<code>CACHE MANIFEST
# 2015-01-23 v0.1
/style.css
/logo.gif
/script.js

NETWORK:
*

FALLBACK:
/server/ /fallback.html</code>
登入後複製
登入後複製
登入後複製

以編程方式檢查清單的狀態

您可以通過測試 window.applicationCache.status 以編程方式檢查您的應用程序是否正在使用緩存清單的更新版本。這是一些示例代碼:

<code>CACHE MANIFEST
# 2015-01-23 v0.1

manifest.appcache
page2.css</code>
登入後複製
登入後複製
登入後複製

在網站上運行上述代碼可以讓你知道何時有 AppCache 清單的新更新可用。請注意,UPDATEREADY 是一個已定義的狀態。您甚至可以在 onUpdateReady() 函數中使用 swapCache() 方法來將舊的清單文件替換為新的清單文件:

<code>NETWORK:

/api</code>
登入後複製
登入後複製

結論

AppCache 是一項有用的技術,但正如我們所看到的,在項目中實現它時應謹慎。開發人員應選擇性地選擇應在清單文件中包含的內容。理想情況下,清單文件應包含靜態內容,例如樣式表、腳本、Web 字體和圖像。但是,您始終是對清單文件中包含哪些內容的最佳判斷者。 Appcache 是一把雙刃劍,因此在使用它時要小心!

上述內容中的大部分內容已在其他地方介紹過,還有一些其他要點。您可以查看以下資源以了解更多信息:

  • MDN 上的應用程序緩存陷阱
  • Jake Archibald 的應用程序緩存是個混蛋
  • Jake Archibald 的離線食譜

關於 HTML5 應用程序緩存的常見問題解答 (FAQ)

什麼是 HTML5 應用程序緩存,為什麼它很重要?

HTML5 應用程序緩存 (AppCache) 是一項允許開發人員指定瀏覽器應緩存哪些文件並使其可供用戶離線使用的功能。它之所以重要,是因為它可以通過減少服務器負載和節省帶寬來提高 Web 應用程序的性能。它還允許應用程序即使在用戶離線時也能運行,從而提供更好的用戶體驗。

HTML5 應用程序緩存是如何工作的?

HTML5 應用程序緩存的工作原理是使用清單文件。此文件列出了瀏覽器應緩存以供離線使用的資源。當用戶訪問網頁時,瀏覽器會檢查是否與其關聯了清單文件。如果是,瀏覽器將下載並存儲列出的資源。下次用戶訪問網頁時,瀏覽器將加載緩存的資源,而不是從服務器下載它們。

使用 HTML5 應用程序緩存時有哪些常見的陷阱?

使用 HTML5 應用程序緩存時,一些常見的陷阱包括:未正確更新清單文件,導致提供舊資源;未正確處理緩存清單回退部分,導致錯誤;以及未考慮緩存對用戶設備存儲的影響。

如何避免這些陷阱?

為避免這些陷阱,請在資源更改時始終正確更新清單文件。使用清單文件的 NETWORK 部分指定永遠不應該緩存的資源。此外,請考慮用戶的設備存儲,並且只緩存必要的資源。

HTML5 應用程序緩存的未來是什麼?

HTML5 應用程序緩存正在被棄用,取而代之的是 Service Workers。 Service Workers 提供對緩存的更多控制,並且可以處理更複雜的場景。但是,目前並非所有瀏覽器都支持 Service Workers,因此了解和使用 HTML5 應用程序緩存仍然很重要。

如何創建清單文件?

清單文件是一個簡單的文本文件,其中列出了要緩存的資源。它應該以 MIME 類型“text/cache-manifest”提供服務。文件的首行應為“CACHE MANIFEST”,後跟要緩存的資源。

如何將網頁與清單文件關聯?

要將網頁與清單文件關聯,請將“manifest”屬性添加到網頁的“html”標記中。 “manifest”屬性的值應為清單文件的 URL。

如何更新緩存?

要更新緩存,請對清單文件進行更改。每次用戶訪問網頁時,瀏覽器都會檢查清單文件的更新。如果清單文件已更改,瀏覽器將下載並緩存新資源。

如果清單文件中列出的資源無法下載會發生什麼?

如果清單文件中列出的資源無法下載,則整個緩存更新過程將失敗。瀏覽器將繼續使用舊緩存。

我可以將 HTML5 應用程序緩存用於所有資源嗎?

雖然從技術上講您可以將 HTML5 應用程序緩存用於所有資源,但不建議這樣做。緩存過多的資源可能會填滿用戶的設備存儲並對性能產生負面影響。最好只緩存必要的資源。

以上是使用HTML5應用程序緩存時,常見的陷阱要避免的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

前端熱敏紙小票打印遇到亂碼問題怎麼辦? 前端熱敏紙小票打印遇到亂碼問題怎麼辦? Apr 04, 2025 pm 02:42 PM

前端熱敏紙小票打印的常見問題與解決方案在前端開發中,小票打印是一個常見的需求。然而,很多開發者在實...

神秘的JavaScript:它的作用以及為什麼重要 神秘的JavaScript:它的作用以及為什麼重要 Apr 09, 2025 am 12:07 AM

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

誰得到更多的Python或JavaScript? 誰得到更多的Python或JavaScript? Apr 04, 2025 am 12:09 AM

Python和JavaScript開發者的薪資沒有絕對的高低,具體取決於技能和行業需求。 1.Python在數據科學和機器學習領域可能薪資更高。 2.JavaScript在前端和全棧開發中需求大,薪資也可觀。 3.影響因素包括經驗、地理位置、公司規模和特定技能。

JavaScript難以學習嗎? JavaScript難以學習嗎? Apr 03, 2025 am 12:20 AM

學習JavaScript不難,但有挑戰。 1)理解基礎概念如變量、數據類型、函數等。 2)掌握異步編程,通過事件循環實現。 3)使用DOM操作和Promise處理異步請求。 4)避免常見錯誤,使用調試技巧。 5)優化性能,遵循最佳實踐。

如何實現視差滾動和元素動畫效果,像資生堂官網那樣?
或者:
怎樣才能像資生堂官網一樣,實現頁面滾動伴隨的動畫效果? 如何實現視差滾動和元素動畫效果,像資生堂官網那樣? 或者: 怎樣才能像資生堂官網一樣,實現頁面滾動伴隨的動畫效果? Apr 04, 2025 pm 05:36 PM

實現視差滾動和元素動畫效果的探討本文將探討如何實現類似資生堂官網(https://www.shiseido.co.jp/sb/wonderland/)中�...

JavaScript的演變:當前的趨勢和未來前景 JavaScript的演變:當前的趨勢和未來前景 Apr 10, 2025 am 09:33 AM

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

如何使用JavaScript將具有相同ID的數組元素合併到一個對像中? 如何使用JavaScript將具有相同ID的數組元素合併到一個對像中? Apr 04, 2025 pm 05:09 PM

如何在JavaScript中將具有相同ID的數組元素合併到一個對像中?在處理數據時,我們常常會遇到需要將具有相同ID�...

console.log輸出結果差異:兩次調用為何不同? console.log輸出結果差異:兩次調用為何不同? Apr 04, 2025 pm 05:12 PM

深入探討console.log輸出差異的根源本文將分析一段代碼中console.log函數輸出結果的差異,並解釋其背後的原因。 �...

See all articles