我不明白HTML5 AppCache的意義。我們已經有了一個普通的緩存。如果您第一次訪問網站,它將已經緩存所有資產。 AppCache提供了什麼額外的價值?它只是一個文件列表,以便瀏覽器知道要下載哪些資源,即使它們現在沒有被HTML引用?瀏覽器是否確保緩存是「全有或全無」,即是否確保清單所引用的所有內容都被緩存,或者什麼也不做?HTML5 AppCache和普通瀏覽器緩存之間有什麼區別?
回答
我認爲您錯過的一點是AppCache
專門設計用於允許離線使用Web應用程序(和網站),儘管當用戶在線時,普通瀏覽器緩存提供的速度相同,也由AppCache
提供。
與瀏覽器緩存的主要區別在於,您可以指定瀏覽器緩存在清單文件中的所有資產(可能是您的整個站點),而瀏覽器緩存只會存儲您實際擁有的頁面(和相關資產)參觀。我不是AppCache
的專家,但我知道這不是沒有問題。有一篇非常好的文章here來自一位使用AppCache
以允許他的移動網站部分可以脫機使用的人。它包含了他們決定使用它的一些基本原理以及他們在這樣做時遇到的一些問題。
這HTML5 Rocks article關於這個問題也有一些很好的信息。
AppCache實際上使用瀏覽器緩存來支持其操作。這是瀏覽器等同於下載應用程序在本地運行。
用戶第一次訪問該頁面時,該頁面的資源將從服務器加載並存儲在普通緩存中。如果頁面指定了appcache清單,那麼瀏覽器將下載清單並獲取其中的所有資源(即使它們沒有出現在嵌入清單的頁面上)。然後這些被存儲在appcache中。
用戶第二次訪問該頁面時,瀏覽器將檢查其appcache。如果該URL存在條目,則它會根據清單中指定的規則(清單可以將某些資源顯式標記爲從網絡中獲取)加載來自appcache而不是來自服務器的頁面。
瀏覽器從appcache加載頁面後,它會聯繫服務器以查看是否有更新的清單。如果清單已更新,它將從清單中獲取資源。這些提取是使用普通的瀏覽器緩存規則完成的,因此其中一些資源實際上最終可能會從常規瀏覽器緩存而不是從服務器獲取(這允許您在使用appcache開發離線應用程序時執行差異更新)。新版本的appcache與舊版本保持分開。獲取新版本後,用戶將繼續與舊版本的資源進行交互,直到刷新主頁面,然後加載新版本並丟棄舊版本。
另一個重要的問題是appcache在丟棄資源時有不同的規則。 Appcache基本上不會丟棄最新的一組資源,並將它們作爲一個整體進行緩存。爲了防止濫用,它強制實施存儲限制(有時低至5 MB),即網站緩存的容量有多大。相比之下,瀏覽器緩存沒有每站點限制,但是如果達到全局緩存限制,則會丟棄站點中的單個資源。
HTML 5應用程序緩存的重要特點是它可以使Web應用程序脫機。普通的瀏覽器緩存沒有給出。
除了這個應用程序緩存將提供
速度 - 因爲指定頁面的全部內容將被緩存到瀏覽器,它會提供比瀏覽器緩存更好的速度
降低服務器加載 - 因爲所有內容都存在緩存中,所以無需一直回發,直到清單文件中有任何更改爲止
緩存清單: - 緩存清單文件是HTML5應用程序緩存的核心。我們可以指定什麼是網頁不需要緩存,什麼不應該,甚至我們可以重用這一個作爲差錯處理技術,爲此,我們可以在回退指定自定義錯誤頁部分顯示,如果在用戶請求需要網絡連接的
有關應用程序緩存可以有基本的瞭解內容See this tutorial
- 1. Android和Chrome瀏覽器之間的Chrome有什麼區別?
- 2. 引發緩存和空緩存之間有什麼區別?
- 3. AIR和瀏覽器有什麼區別?
- 4. 製片人和普通演員之間有什麼區別?
- 5. 瀏覽器中的本地存儲和緩存有什麼區別?
- 6. Flash調試播放器和普通播放器之間有什麼區別?
- 7. MacVim和普通Vim有什麼區別?
- 8. 使用Service Worker Cache API和常規瀏覽器緩存有什麼區別?
- 9. randn和普通Python之間的區別
- 10. 天青共享緩存和新天青REDIS緩存之間有什麼區別?
- 11. 網頁緩存和ajax調用緩存之間有什麼區別?
- 12. 客戶端緩存和服務器緩存有什麼區別
- 13. OpenCL中的圖像和緩衝區之間有什麼區別?
- 14. 瀏覽器之間的區別
- 15. 代理服務器和普通服務器有什麼區別?
- 16. 緩存和共享有什麼區別?
- 17. 普通語言和普通語法之間的區別
- 18. Gecko支持的瀏覽器和Webkit支持的瀏覽器有什麼區別?
- 19. 瀏覽器擴展和瀏覽器幫助對象有什麼區別
- 20. 「層」和「層」之間有什麼區別?
- 21. Tableau和QlikView之間有什麼區別
- 22. Microsoft.CompilerServices.AsyncTargetingPack和Microsoft.Bcl.Async之間有什麼區別?
- 23. @Entity和@embeddable之間有什麼區別
- 24. ContentObservable和DataSetObservable之間有什麼區別?
- 25. touchmove和gesturechange之間有什麼區別?
- 26. :notification.flags和notification.defaults之間有什麼區別?
- 27. proc和lambda之間有什麼區別?
- 28. :: after和after之間有什麼區別?
- 29. read()和io.read()之間有什麼區別?
- 30. Request()和Request.Form()之間有什麼區別?