搜尋
首頁web前端H5教程html5離線儲存知識詳解

html5離線儲存知識詳解

Dec 05, 2017 pm 04:22 PM
h5html5詳解

STORAGE(存儲)

Cookie

在HTML5以前我們會使用cookie,在瀏覽器端緩存一些數據,例如:登入使用者資訊,歷史搜尋資訊等等。但是cookie所支援的容量僅只有4k ,也沒有專門的api來操作,只能依賴一些開源的庫, 這裡使用cookies.js 儲存和取得cookie資訊

// 这是一个cookie值
Cookies.set('key', 'value');

// 链式调用
Cookies.set('key', 'value').set('hello', 'world');

// 可以额外设置一些参数
Cookies.set('key', 'value', { domain: 'www.example.com', secure: true });

// 设置缓存时间
Cookies.set('key', 'value', { expires: 600 }); // Expires in 10 minutes
Cookies.set('key', 'value', { expires: '01/01/2012' });
Cookies.set('key', 'value', { expires: new Date(2012, 0, 1) });
Cookies.set('key', 'value', { expires: Infinity });

// 获取
Cookies.get('key');

 

#由此可見用cookie儲存有一下幾個缺點:

儲存資料的量比較小

本身沒有方便的api對其進行操作

cookie資訊會在http請求時加入到請求頭中,既不安全也增加了頻寬。

WEB Storage

HTML5 提拱更好的本地儲存規範localStorage 和sessionStorage , 它們將資料儲存在本地,而且在http請求時不會攜帶Storage 裡的資訊, 使用方式也很簡單:

localStorage.setItem('key', 'value');
localStorage.getItem('key');
localStorage.removeItem('key');

sessionStorage.setItem('key', 'value');
sessionStorage.getItem('key');
sessionStorage.removeItem('key');

 

sessionStorage 和localStorage 使用方式及特性基本上一致,唯一的差別是, sessionStorage 只在會話內有效,當瀏覽器視窗關閉,sessionStorage 快取的資料會自動被清除, 而localStorage 只要不手動清除,它會永久保存在本地。

這裡有張圖片分析了cookie 、 localStorage 、 sessionStorage 三者的區別

html5離線儲存知識詳解

OFFLINE(離線)

#為了讓webapp 擁有像native app 一樣的功能和體驗, 在HTML5的規格中加入了許多新的api, 讓頁面可以在離線環境下正常存取。 service worker 和 indexedDB 兩者配合可以就可以開發離線使用的 webapp 了,由於 service worker 目前的兼容性不太好,這裡我們寫介紹下比較早的方案 application cache 。

service worker

Service Worker是基於Web Worker的事件驅動的,他們執行的機制都是新開一個執行緒去處理一些額外的,以前不能直接處理的任務。對於Web Worker,我們可以使用它來進行複雜的運算,因為它不會阻塞瀏覽器主執行緒的渲染。而Service Worker,我們可以用它來進行本地緩存,相當於一個本地的proxy。說起緩存,我們會想起我們常用的一些緩存技術來緩存我們的靜態資源,但是老的方式是不支援調試的,靈活性不高。使用Service Worker來進行緩存,我們可以用javascript程式碼來攔截瀏覽器的http請求,並設定快取的文件,直接返回,不經過web伺服器,然後,做更多你想做的事情。

因此,我們可以開發基於瀏覽器的離線應用程式。這使得我們的web應用程式減少對網路的依賴。例如,我們開發了一個新聞閱讀的web應用,當你用手機瀏覽器在有網絡的情況下打開時,你可以正常的獲取新聞內容。可是,如果手機進入飛航模式,那這個應用你就沒辦法使用了。

如果我們使用了Service Worker做緩存,瀏覽器http請求會先經過Service Worker,透過url mapping去匹配,如果匹配到了,則使用快取數據,如果匹配失敗,則繼續執行你指定的動作。一般情況下,符合失敗則讓頁面顯示「網頁無法開啟」。

service work 生命週期

html5離線儲存知識詳解

service work demo

nbsp;html>

  
    <meta>
    <script>
        navigator.serviceWorker.register("/service-worker.js").then(function(serviceWorker) {
            console.log("success!");
        });
    </script>
  
  
  

 

在頁面註冊service-worker成功時就會呼叫這個js

this.oninstall = function(e) {
    var resources = new Cache();
    var visited = new Cache();
    // Fetch them.
    e.waitUntil(resources.add(
        "/index.html",
        "/fallback.html",
        "/css/base.css",
        "/js/app.js",
        "/img/logo.png"
    ).then(function() {
        // Add caches to the global caches.
        return Promise.all([
            caches.set("v1", resources),
            caches.set("visited", visited)
        ]);
    }));
};

this.onfetch = function(e) {
    e.respondWith(
        // Check to see if request is found in cache
        caches.match(e.request).catch(function() {
            // It's not? Prime the cache and return the response.
            return caches.get("visited").then(function(visited) {
                return fetch(e.request).then(function(response) {
                    visited.put(e.request, response);
                    // Don't bother waiting, respond already.
                    return response;
                });
            });
        }).catch(function() {
            // Connection is down? Simply fallback to a pre-cached page.
            return caches.match("/fallback.html");
        });
    );
};

 

service worker 採用事件監聽機制, 上面的程式碼監聽了install 和fetch 事件,當server worker 安裝成功後,呼叫此方法,然後快取頁面的資源文件, fetch 頁面請求事件, server worker 攔截到使用者請求,當發現請求文件命中快取則從快取中取得文件,返回給頁面,無需經過伺服器,藉此達到離線的目的。

當然service worker 的功能遠不止現在這些

indexedDB

indexedDB 是一個用於本地儲存資料的nosql 資料庫,擁有極快的資料查詢速度,而且可以直接儲存js 物件。相較於web sql(sqlite)更有效率,包括索引、事務處理和健壯的查詢功能。 indexedDB特點:

1.一個網站可能有一個或多個 IndexedDB 資料庫,每個資料庫必須有惟一的名稱。

2.一個資料庫可包含一個或多個物件儲存

一個物件儲存(由一個名稱惟一標識)是一個記錄集合。每個記錄有一個鍵 和一個值。該值是一個對象,可擁有一個或多個屬性。鍵可能基於某個鍵生成器,從一個鍵路徑衍生出來,或者是明確設定。一個鍵生成器自動產生惟一的連續正整數。鍵路徑定義了鍵值的路徑。它可以是單一 JavaScript 標識符或多個由句點分隔的標識符。

基本使用方式如下:

 

var openRequest = indexedDB.open("auto_people", 3);
var db; //数据库对象
openRequest.onupgradeneeded = function(e){
    console.log("Running onupgradeeded...");
	var thisDB = e.target.result;
	if(!thisDB.objectStoreNames.contains("people")){
			thisDB.createObjectStore("people", {autoIncrement:true}); //新建一个store并设置主键自增长
	}
}
//创建成功
openRequest.onsuccess = function(e){
    console.log("success!");
    db = e.target.result;
	//Listen for add clicks

}
openRequest.onerror = function(e){
	console.log("error!");
	console.dir(e);
}
//这应该站在别的地方处理,这是做一个代码展示
var transaction = db.transaction(['people'], "readwrite"); //创建一个连接
var store = transaction.objectStore("people");  //获取store
var request = store.add({
    name: 'myron',
    email: 'test@qq.com',
    created: new Date()
}); //添加信息

request.onerror = function(e){
    alert('error!');
    console.dir(e);
} //当添加失败时调用

request.onsuccess = function(e){
    console.log('Did it!');
} //添加成功时调用

request = store.get(1);  //获取第一条数据

request.onsuccess = function(e){
    var result = e.target.result;
    console.dir(result);
    if(result){
        //拿到存储的对象
	}
}

 

application cache

以上內容就是html5離線儲存知識詳解,希望能幫助大家。

相關推薦:

如何區別html5離線儲存與本機快取實例詳解

HTML5離線儲存原則及實作的程式碼實例

HTML5離線儲存原則

#

以上是html5離線儲存知識詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
H5:探索最新版本的HTMLH5:探索最新版本的HTMLMay 03, 2025 am 12:14 AM

html5isamajorrevisionofthehtmlStandardThatRevolutionsWebDevelopmentBybyIntroDucingNewSemanticeLementSemelementsandAndCapabilities.1)itenhancesCodereAdabilityAndSeowitability andSeowithelientsLike,and.2)

超越基礎:H5代碼中的高級技術超越基礎:H5代碼中的高級技術May 02, 2025 am 12:03 AM

H5的高級技巧包括:1.利用進行複雜圖形繪製,2.使用WebWorkers提升性能,3.通過WebStorage增強用戶體驗,4.實現響應式設計,5.利用WebRTC實現實時通信,6.進行性能優化和最佳實踐。這些技巧幫助開發者構建更動態、互動和高效的Web應用。

H5:網絡內容和設計的未來H5:網絡內容和設計的未來May 01, 2025 am 12:12 AM

H5(HTML5)將通過新元素和API提升網頁內容和設計。 1)H5增強了語義化標記和多媒體支持。 2)它引入了Canvas和SVG,豐富了網頁設計。 3)H5的工作原理是通過新標籤和API擴展HTML功能。 4)基本用法包括使用創建圖形,高級用法涉及WebStorageAPI。 5)開發者需注意瀏覽器兼容性和性能優化。

H5:網絡開發的新功能和功能H5:網絡開發的新功能和功能Apr 29, 2025 am 12:07 AM

H5帶來了多項新功能和能力,極大提升了網頁的互動性和開發效率。 1.語義化標籤如、增強了SEO。 2.多媒體支持通過和標籤簡化了音視頻播放。 3.Canvas繪圖提供了動態圖形繪製工具。 4.本地存儲通過localStorage和sessionStorage簡化了數據存儲。 5.地理位置API便於開發基於位置的服務。

H5:HTML5的關鍵改進H5:HTML5的關鍵改進Apr 28, 2025 am 12:26 AM

HTML5帶來了五個關鍵改進:1.語義化標籤提升了代碼清晰度和SEO效果;2.多媒體支持簡化了視頻和音頻嵌入;3.表單增強簡化了驗證;4.離線與本地存儲提高了用戶體驗;5.畫布與圖形功能增強了網頁的可視化效果。

HTML5:標準及其對Web開發的影響HTML5:標準及其對Web開發的影響Apr 27, 2025 am 12:12 AM

HTML5的核心特性包括語義化標籤、多媒體支持、離線存儲與本地存儲、表單增強。 1.語義化標籤如、等,提升代碼可讀性和SEO效果。 2.和標籤簡化多媒體嵌入。 3.離線存儲和本地存儲如ApplicationCache和LocalStorage,支持無網絡運行和數據存儲。 4.表單增強引入新輸入類型和驗證屬性,簡化處理和驗證。

H5代碼示例:實際應用和教程H5代碼示例:實際應用和教程Apr 25, 2025 am 12:10 AM

H5提供了多種新特性和功能,極大地增強了前端開發的能力。 1.多媒體支持:通過和元素嵌入媒體,無需插件。 2.畫布(Canvas):使用元素動態渲染2D圖形和動畫。 3.本地存儲:通過localStorage和sessionStorage實現數據持久化存儲,提升用戶體驗。

H5和HTML5之間的連接:相似性和差異H5和HTML5之間的連接:相似性和差異Apr 24, 2025 am 12:01 AM

H5和HTML5是不同的概念:HTML5是HTML的一個版本,包含新元素和API;H5是基於HTML5的移動應用開發框架。 HTML5通過瀏覽器解析和渲染代碼,H5應用則需要容器運行並通過JavaScript與原生代碼交互。

See all articles

熱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

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

熱工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器