cookies的野蠻生長
本地儲存localstorage
本地儲存sessionstorage
web sql
indexeddb
在html5
出現之前,cookies
便佔據了客戶端儲存的整個江山,就像是蠻荒時代的野蠻生長,cookies
很好、快速地滿足實際應用的需求。但是它的問題也很明顯,cookies
會在請求頭上帶著資料,而且大小限制在4k以內,這是非常不安全的,容易被外部擷取,還存在domain
汙染。
ie
瀏覽器特別喜歡搞自己的一套,對於增加儲存容量加入了userdata
,大小是64k
,但是其他瀏覽器不喜歡跟它玩,也就只有它自己一家支援。
那麼,重點來了。既然cookies
問題那麼多,就要想辦法解決,不然沒法繼續往前發展。首先要確認它的問題有哪些,然後根據這些問題尋找解決方案。
儲存方式
以鍵值對(key-value)的方式儲存,永久儲存,永不失效,除非手動刪除。
儲存容量
每個網域名稱5m
。
常用的api
getitem
//取記錄
setitem
//設定記錄
removeitem
//移除記錄
key
//取key
所對應的值
clear
//清除記錄
html5
的本地儲存api
中的localstorage
與sessionstorage
在使用方法上是相同的,區別在於sessionstorage
在關閉頁面後即被清空,而localstorage
則會一直儲存,除非手動刪除。
本地快取應用所需的檔案
使用方法
1、配置manifest
檔案
頁面上:
manifest
檔案:
manifest
是最簡單的文字檔案,它告知瀏覽器被快取的內容(以及不快取的內容)。
manifest
檔案分為三個部分:
network
-在此標題下的檔案需要與伺服器進行連線,且不會被快取
fallback
-在此標題下的檔案規定當頁面無法被訪問時的回退頁面(比如404
頁面)
完整demo
cache manifest
# 2016-07-24 v1.0.0
/theme.css
/main.js
network:
login.jsp
fallback:
/html/ /offline.html
伺服器上:manifest
檔案需要配置正確的mime-type
,即text/cache-manifest
。
常用api
1 (idle)
:閒置,應用快取沒有得到更新
5 (idle)
:廢棄,應用快取的描述檔案已經不存在了,因此頁面無法再訪問應用快取
相關事件
表示應用快取狀態的改變:
checking
:在瀏覽器為應用快取查詢更新時觸發
noupdate
:在檢查描述檔案發現檔案無變化時觸發
cached
:在應用快取完整可用時觸發
離線瀏覽
提公升頁面載入速度
降低伺服器壓力
注意事項:
瀏覽器對快取資料的容量限制可能不太一樣(某些瀏覽器設定的限制是每個站點5m
)
引用manifest
的html
必須與manifest
檔案同源,在同乙個域下
瀏覽器會自動快取引用manifest
檔案的html
檔案,這就導致了如果更改了html
內容,也需要更新版本才能做到最新
manifest
檔案中的cache
與network
、fallback
的位置順序沒有關係,如果是隱式宣告需要在最前面
fallback
中的資源必須和manifest
檔案同源
更新完版本後,必須重新整理一次才會啟動新版本(會出現重刷一次頁面的情況),需要新增監聽版本事件
站點中的其他頁面即使沒有設定manifest
屬性,請求的資源如果在快取中也從快取中訪問
當manifest
檔案發生改變時,資源請求本身也會觸發更新
離線快取和傳統瀏覽器快取的區別
離線快取是針對整個應用,瀏覽器快取是單個檔案
離線快取可以主動通知瀏覽器更新資源
web sql
資料庫api
並不是html5
規範的一部分,但它是乙個獨立的規範,引入了一組使用sql
操作客戶端資料庫的apis
。
核心方法
opendatabase
:使用現有的資料庫或新建的資料庫建立乙個資料庫物件
transaction
: 控制乙個事務,以及基於這種情況執行提交或回滾
executesql
:用於執行實際的sql
查詢
開啟資料庫
var db = opendatabase('mydb', '1.0', 'test db', 2 * 1024 * 1024, fn);
執行查詢操作
var db = opendatabase('mydb', '1.0', 'test db', 2 * 1024 * 1024);
db.transaction(function (tx) )
插入資料
注:部落格主題裡的**塊樣式
var db = opendatabase('mydb', '1.0', 'test db', 2 * 1024 * 1024);
db.transaction(function (tx) );
注:需要實現的**塊樣式,這個是 markdowpad2 裡的操作,也是很多markdown寫作工具提供的操作,只需要按一下 tab 鍵,非常方便
var db = opendatabase('mydb', '1.0', 'test db', 2 * 1024 * 1024);
db.transaction(function (tx) );
讀取資料
db.transaction(function (tx)
}, null);
});
非同步api
在indexeddb
大部分操作並不是我們常用的呼叫方法(返回結果的模式),而是(請求-響應模式),比如開啟資料庫的操作
本文**於:猿2048→
HTML5儲存方式總結
html5之前,主要使用cookies儲存。cookie實際上是一小段的文字資訊。客戶端請求伺服器,如果伺服器需要記錄該使用者狀態,就向客戶端瀏覽器頒發乙個cookie。客戶端瀏覽器會把cookie儲存起來。當瀏覽器再請求該 時,瀏覽器把請求的 連同該cookie一同提交給伺服器。伺服器檢查該coo...
html5中web儲存方式
瀏覽器 客戶端 訪問伺服器端的時候,攜帶的資料,之前這些資料儲存在cookie中,但是cookie儲存的資料大小有限 html5的web儲存分為 localstorage儲存 sessionstorage儲存 他們的區別在於 localstorage 儲存在客戶端,大小沒有限制,時間也沒有限制 se...
HTML5儲存系統
html5中的儲存系統包括了兩種儲存方式 sessionstorage和localstorage。兩種儲存系統的操作方法相同,他們之間的區別在於 sessionstorage儲存系統儲存資料的特點 1.當瀏覽器視窗關閉時,資料全部丟失 2.當再次開啟瀏覽器視窗時,資料不能使用 localstorag...