html本地緩存
① html 頁面怎麼對緩存進行設置
根據伺服器系統環節的不同設置方法不一樣
1、在Apache環境下
可以通過在.htaccess文件中添加下面的代碼,設置圖片的HTTP緩存和有效期(需要開啟apache的headers模塊支持):
#.gimhoy.com<FilesMatch".(flv|gif|jpg|jpeg|png|ico|swf)$">HeadersetCache-Control"max-age=3156000"
其中max-age後面這個數字就是設置的緩存有效期(以秒為單位),比如上面的代碼設置了網站的圖片使用為期一年(3156000秒)的HTTP緩存。
2、在Nginx下
可以通過修改nginx.conf配置文件,來修改緩存設置:
location ~* .(flv|gif|jpg|jpeg|png|ico|swf)$ { expires 1y; access_log off; break; }
注意:同樣的方法,可以給js和css文件設置緩存。
② HTML5中,新增加了什麼,用於實現本地數據的緩存
h5新增localStorage和sessionStorage兩種用於把數據存儲在本地的方法,前者可以將數據永久保存在本地,可手動刪除。後者只能在本次瀏覽器啟動時存儲有效,關閉瀏覽器之後存儲的數據會自動清空。
③ 關於html緩存設置
通過HTTP的META設置expires和cache-control
指令不區分大小寫,並且具有可選參數,可以用令牌或者帶引號的字元串語法。多個指令以逗號分隔。
客戶端可以在HTTP請求中使用的標准 Cache-Control 指令。
Cache-Control: max-stale[=<seconds>]
Cache-Control: min-fresh=<seconds>
Cache-control: no-cache
Cache-control: no-store
Cache-control: no-transform
Cache-control: only-if-cached
伺服器可以在響應中使用的標准 Cache-Control 指令。
Cache-control: no-cache
Cache-control: no-store
Cache-control: no-transform
Cache-control: public
Cache-control: private
Cache-control: proxy-revalidate
Cache-Control: max-age=<seconds>
Cache-control: s-maxage=<seconds>
拓展緩存指令不是HTTP緩存標準的一部分,使用前請注意檢查 兼容性 !
Cache-control: immutable
Cache-control: stale-while-revalidate=<seconds>
Cache-control: stale-if-error=<seconds>
public
表明響應可以被任何對象(包括:發送請求的客戶端,代理伺服器,等等)緩存。
private
表明響應只能被單個用戶緩存,不能作為共享緩存(即代理伺服器不能緩存它)。
no-cache
強制所有緩存了該響應的緩存用戶,在使用已存儲的緩存數據前,發送帶驗證器的請求到原始伺服器
only-if-cached
表明如果緩存存在,只使用緩存,無論原始伺服器數據是否有更新
max-age=<seconds>
設置緩存存儲的最大周期,超過這個時間緩存被認為過期(單位秒)。與Expires相反,時間是相對於請求的時間。
s-maxage=<seconds>
覆蓋max-age 或者 Expires 頭,但是僅適用於共享緩存(比如各個代理),並且私有緩存中它被忽略。
max-stale[=<seconds>]
表明客戶端願意接收一個已經過期的資源。 可選的設置一個時間(單位秒),表示響 應不能超過的過時時間。
min-fresh=<seconds>
表示客戶端希望在指定的時間內獲取最新的響應。
must-revalidate
緩存必須在使用之前驗證舊資源的狀態,並且不可使用過期資源。
proxy-revalidate
與must-revalidate作用相同,但它僅適用於共享緩存(例如代理),並被私有緩存忽略。
immutable
表示響應正文不會隨時間而改變。資源(如果未過期)在伺服器上不發生改變,因此客戶端不應發送重新驗證請求頭(例如If-None-Match或If-Modified-Since)來檢查更新,即使用戶顯式地刷新頁面。在Firefox中,immutable只能被用在 https:// transactions.
發送如下指令可以關閉緩存。此外,可以參考Expires 和 Pragma 標題。
對於應用程序中不會改變的文件,你通常可以在發送響應頭前添加積極緩存。這包括例如由應用程序提供的靜態文件,例如圖像,CSS文件和JavaScript文件。另請參閱Expires標題。
緩存主要兩個策略 強制緩存 ,協商緩存
強制緩存就是設置本地資源html img js等等緩存多長時間 超過時間就去伺服器端取。
協商緩存就是每次都詢問伺服器資源是否已經過期 沒有過期就使用緩存 已經過期就從伺服器上重新取。
緩存流程可以分三個階段 本地緩存,協商緩存 ,緩存失敗
現在的vue項目里都不是這樣緩存的 我個人感覺這是在靜態頁面時的緩存辦法
現在都是webpack打包時通過 hash chunkhash contenthash來決定緩存方式 主要就是在請求的文件名稱後面加一個id 來判斷文件是否已經更新。
④ 如何區別html5離線存儲和本地緩存實例詳解
一.離線存儲
有一個web應用有三個文件index.html,a.js,b.css,現在需要把js和css文件緩存起來
1.在index.html里加上<html manifest="test.manifest">
2.manifest清單格式如下
復制代碼
CACHE MANIFEST
#上面一句必須
#v1.0.0
#需要緩存的文件
CACHE:
a.js
b.css
#不需要緩存的文件
NETWORK:
*
#無法訪問頁面
FALLBACK:
404.html
復制代碼
3.manifest文件的mime-type必須是 text/cache-manifest類型
注意點:
1.對於每個index.html?id=1或index.html?id=2都會分別緩存index.html頁面,可以通過chrome瀏覽器Resources/Application Cache觀察
2.如果想更新緩存內容,只要修改下manifest文件即可,如改版本號v1.0.1
4.離線存儲如果資源有更新,可以通過如下代碼來監聽,但第一次載入還會是原來的版本
復制代碼
window.applicationCache.addEventListener('updateready',function(e){
if(window.applicationCache.status == window.applicationCache.UPDATEREADY){
window.applicationCache.swapCache();
if(confirm("loding new?")){
window.location.reload()
}
}
},false)
復制代碼
二.本地緩存
復制代碼
localStorage.setItem("key","value")
localStorage.getItem("key","value")
localStorage.removeItem("key")
localStorage.clear()
復制代碼
1.本地存儲永不過期,除非自己去清除
2.可以通過chrome瀏覽器Resources/Local Storage來查看
3.不同域下就算key相同取不到的值也不同,如localhost和127.0.0.1
⑤ html5的web存儲中對於本地緩存是怎麼解決的
html5對於本地緩存支持力度大大增加,支持Local Storage和Session Storage鍵值對存儲方式,對於大數據處理HTML5支持Web SQL Database資料庫
以下介紹一種常用的Local Storage鍵值對存儲方式
設置緩存:
window.localStorage.setItem(name,val);
讀取緩存:
window.localStorage.getItem(name);
刪除緩存:
deletewindow.localStorage.name;
⑥ 請教高手,html頁面中的圖片,如何讓瀏覽器緩存至本地
方法很簡單,你把保留網頁歷史的時間改長而且加大緩存目錄的體積就行了,方法就是看瀏覽器頂部,工具,internet選項,這個界面有歷史長度,最多999天,看裡面的「設置」,可以改保存網頁的路徑,以及體積大小。在歷史時間內,比如30天,不需要再次緩存頁面,但是有個問題,就是你如果在線聽歌,看大圖片,如果過多,會導致你的IE緩存很龐大,有可能超出你的IE默認的體積,所以你最好轉移到非系統分區,而且設置體積很大,1G甚至更大,否則超出後默認刪除早期的圖片,歌曲,flash等文件。
⑦ HTML5應用程序緩存Application Cache詳解
什麼是Application Cache
HTML5引入了應用程序緩存技術,意味著web應用可進行緩存,並在沒有網路的情況下使用,通過創建cache manifest文件,可以輕松的創建離線應用。
Application Cache帶來的三個優勢是:
① 離線瀏覽
② 提升頁面載入速度
③ 降低伺服器壓力
而且主要瀏覽器皆以支持Application Cache,就算不支持也不會對程序造成什麼影響
離線存儲技術
HTML5提出了兩大離線存儲技術:localstorage與Application Cache,兩者各有應用場景;傳統還有離線存儲技術為Cookie。
經過實踐我們任務localstorage應該存儲一些非關鍵性ajax數據,做錦上添花的事情;
Application Cache用於存儲靜態資源,緩銀仍然是干錦上添花的事情;
而cookie只能保存一小段文本(4096位元組);所以不能存儲大數據,這是cookie與上述緩存技術的差異之一,而因為HTTP是無狀態的,伺服器為了區分請求是否來源於同一個伺服器,需要一個標識字元串,而這個任務就是cookie完成的,這一段文本每次都會在伺服器與瀏覽器之間傳遞,以驗證用戶的許可權。
所以Application Cache的應用場景不一樣,所以使用也不一致。
Application Cache簡介
Application Cache的使用要做兩方面的工作:
① 伺服器端需要維護一個manifest清單
② 瀏覽器上只需要一個簡單的設置即可
#p#副標題#e#
以例子做說明:
CACHE MANIFEST
CACHE:
# 需要緩存的列表
style1.css
1.jpg
01.js
NETWORK:
# 不需要緩存的
4.jpg
FALLBACK:
# 訪問緩存失敗後,備用訪問的資源,第一個是訪問源,第二個是替換文件*.html /offline.html
2.jpg/3.jpg
復制代碼
首先我這里報了一個錯:
Application Cache Error event: Manifest fetch failed (404)
這個錯誤的原因是:manifest 文件需要配置正確的 MIME-type,即 「text/cache-manifest」。必須在 web 伺服器上進行配置,不同的伺服器不一樣
APPLICATIONCACHE
01.js
02.js
1.jpg
2.jpg
3.jpg
4.jpg
demo.appcache
index.html
style1.css
style2.css
web.config
zepto.js
這樣一來便可以離線應用了,這個時候就算斷網了,那些文件依舊能訪問
這里有一點值得注意,比如這里不帶/index.html他會將「applicationcache/」緩存,其實這個就是index.html
manifest 文件可薯哪槐分為三個部分:
CACHE MANIFEST - 在此標題下列出的文件將在首次下載後進行緩存
NETWORK - 在此標題下列出的文件需要與伺服器的連數友接,且不會被緩存
FALLBACK - 在此標題下列出的文件規定當頁面無法訪問時的回退頁面(比如 404 頁面)
如圖所示,HTML5定義了幾個事件點,但是我們一般不會主動使用js去操作什麼,大多數情況下,我們完全依賴瀏覽器的處理即可。
#p#副標題#e#
尺寸限制
Application Cache的尺寸限制統一在5M,我這里做一個測試:
如所示,兩個css文件依舊超過了5M這個時候
Document was loaded from Application Cache with manifest
index.html:1 Application Cache Checking event
index.html:6 GET
index.html:1 Application Cache NoUpdate event
index.html:11 GET
index.html:12 GET
如所示,style2已經不能緩存了,這個會造成什麼問題呢?
比如我A頻道維護了自己的Application Cache,B頻道也維護了自己的,這個時候A頻道如果使用達到了一個峰值,會導致B頻道所有的緩存失效,所以:
建議Application Cache,存儲公共資源,不要存儲業務資源
一些問題
由更新機制來說,首次更新manifest時,因為頁面載入已經開始甚至已經完成,緩存更新尚未完成,瀏覽器仍然會使用過期的資源;瀏覽器是當Application Cache有更新時,該次不會使用新資源,第二次才會使用。這個時候update事件中執行window.reload事件。
window.applicationCache.addEventListener(updateready, function(){
window.location.reload()
});
由上例可以知道,緩存的不只是顯示定義的文件,比如上例中的applicationcache/時便會默認保存index.html為映射的數據,並且包含demo.appcache文件,很多時候會遇到一次文件更新線上老是不更新,這個時候隨便在manifest配置文件中做一點修改即可更新。
從可用性與易用性來說,Application Cache是值得使用的,但是最好是做靜態資源的緩存,真正要實現離線應用還得花更多的功夫呢!
⑧ 請教高手,html頁面中的圖片,如何讓瀏覽器緩存至本地
方法很簡單,你把保留網頁歷史的時間改長而且加大緩存目錄的體積就行了,方法就是看瀏覽器頂部,工具,internet選項,這個界面有歷史長度,最多999天,看裡面的「設置」,可以改保存網頁的路徑,以及體積大小。在歷史時間內,比如30天,不需要再次緩存頁面,但是有個問題,就是你如果在線聽歌,看大圖片,如果過多,會導致你的IE緩存很龐大,有可能超出你的IE默認的體積,所以你最好轉移到非系統分區,而且設置體積很大,1G甚至更大,否則超出後默認刪除早期的圖片,歌曲,flash等文件。