接下來要好好總結一些知識,秋招來啦。。。雖然有好多知識都不大會,可是仍是要努力一下,運氣這種東西,誰知道呢~javascript
整體狀況css
if(window.localStorage){ alert('This browser supports localStorage'); }else{ alert('This browser does NOT support localStorage'); }
getItem //取記錄html
setIten//設置記錄html5
removeItem//移除記錄java
key//取key所對應的值web
clear//清除記錄ajax
存儲的內容:sql
數組,圖片,json,樣式,腳本。。。(只要是能序列化成字符串的內容均可以存儲)數據庫
<!DOCTYPE HTML> <html manifest="demo.appcache"> ... </html>
manifest 文件是簡單的文本文件,它告知瀏覽器被緩存的內容(以及不緩存的內容)。json
manifest 文件可分爲三個部分:
①CACHE 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"。
如Tomcat:
<mime-mapping> <extension>manifest</extension> <mime-type>text/cache-manifest</mime-type> </mime-mapping>
經常使用API:
核心是applicationCache對象,有個status屬性,表示應用緩存的當前狀態:
0(UNCACHED) : 無緩存, 即沒有與頁面相關的應用緩存
1(IDLE) : 閒置,即應用緩存未獲得更新
2 (CHECKING) : 檢查中,即正在下載描述文件並檢查更新
3 (DOWNLOADING) : 下載中,即應用緩存正在下載描述文件中指定的資源
4 (UPDATEREADY) : 更新完成,全部資源都已下載完畢
5 (IDLE) : 廢棄,即應用緩存的描述文件已經不存在了,所以頁面沒法再訪問應用緩存
相關的事件:
表示應用緩存狀態的改變:
checking : 在瀏覽器爲應用緩存查找更新時觸發
error : 在檢查更新或下載資源期間發送錯誤時觸發
noupdate : 在檢查描述文件發現文件無變化時觸發
downloading : 在開始下載應用緩存資源時觸發
progress:在文件下載應用緩存的過程當中持續不斷地下載地觸發
updateready : 在頁面新的應用緩存下載完畢觸發
cached : 在應用緩存完整可用時觸發
Application Cache的三個優點:
① 離線瀏覽
② 提高頁面載入速度
③ 下降服務器壓力
1. 瀏覽器對緩存數據的容量限制可能不太同樣(某些瀏覽器設置的限制是每一個站點 5MB)
2. 若是manifest文件,或者內部列舉的某一個文件不能正常下載,整個更新過程將視爲失敗,瀏覽器繼續所有使用老的緩存
3. 引用manifest的html必須與manifest文件同源,在同一個域下
4. 瀏覽器會自動緩存引用manifest文件的HTML文件,這就致使若是改了HTML內容,也須要更新版本才能作到更新。
5. manifest文件中CACHE則與NETWORK,FALLBACK的位置順序沒有關係,若是是隱式聲明須要在最前面
6. FALLBACK中的資源必須和manifest文件同源
7. 更新完版本後,必須刷新一次纔會啓動新版本(會出現重刷一次頁面的狀況),須要添加監聽版本事件。
8. 站點中的其餘頁面即便沒有設置manifest屬性,請求的資源若是在緩存中也從緩存中訪問
9. 當manifest文件發生改變時,資源請求自己也會觸發更新
離線緩存與傳統瀏覽器緩存區別:
1. 離線緩存是針對整個應用,瀏覽器緩存是單個文件
2. 離線緩存斷網了仍是能夠打開頁面,瀏覽器緩存不行
3. 離線緩存能夠主動通知瀏覽器更新資源
核心方法:
①openDatabase:這個方法使用現有的數據庫或者新建的數據庫建立一個數據庫對象。
②transaction:這個方法讓咱們可以控制一個事務,以及基於這種狀況執行提交或者回滾。
③executeSql:這個方法用於執行實際的 SQL 查詢。
打開數據庫:
var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024,fn); //openDatabase() 方法對應的五個參數分別爲:數據庫名稱、版本號、描述文本、數據庫大小、建立回調
var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024); db.transaction(function (tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS WIN (id unique, name)'); });
插入數據:
var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024); db.transaction(function (tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS WIN (id unique, name)'); tx.executeSql('INSERT INTO WIN (id, name) VALUES (1, "winty")'); tx.executeSql('INSERT INTO WIN (id, name) VALUES (2, "LuckyWinty")'); });
讀取數據:
db.transaction(function (tx) { tx.executeSql('SELECT * FROM WIN', [], function (tx, results) { var len = results.rows.length, i; msg = "<p>查詢記錄條數: " + len + "</p>"; document.querySelector('#status').innerHTML += msg; for (i = 0; i < len; i++){ alert(results.rows.item(i).name ); } }, null); });
由這些操做能夠看出,基本上都是用SQL語句進行數據庫的相關操做,若是你會MySQL的話,這個應該比較容易用。
function closeDB(db){ db.close(); } function deleteDB(name){ indexedDB.deleteDatabase(name); }
數據存儲:
indexedDB中沒有表的概念,而是objectStore,一個數據庫中能夠包含多個objectStore,objectStore是一個靈活的數據結構,能夠存放多種類型數據。也就是說一個objectStore至關於一張表,裏面存儲的每條數據和一個鍵相關聯。
咱們可使用每條記錄中的某個指定字段做爲鍵值(keyPath),也可使用自動生成的遞增數字做爲鍵值(keyGenerator),也能夠不指定。選擇鍵的類型不一樣,objectStore能夠存儲的數據結構也有差別。
這個就有點複雜了。看這裏的教程:
1.http://www.cnblogs.com/dolphinX/p/3415761.html