HTML5本地存儲(chǔ)的示例分析

這篇“HTML5本地存儲(chǔ)的示例分析”除了程序員外大部分人都不太理解,今天小編為了讓大家更加理解“HTML5本地存儲(chǔ)的示例分析”,給大家總結(jié)了以下內(nèi)容,具有一定借鑒價(jià)值,內(nèi)容詳細(xì)步驟清晰,細(xì)節(jié)處理妥當(dāng),希望大家通過(guò)這篇文章有所收獲,下面讓我們一起來(lái)看看具體內(nèi)容吧。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名申請(qǐng)虛擬主機(jī)、營(yíng)銷軟件、網(wǎng)站建設(shè)、永勝網(wǎng)站維護(hù)、網(wǎng)站推廣。

html有什么特點(diǎn)

1、簡(jiǎn)易性:超級(jí)文本標(biāo)記語(yǔ)言版本升級(jí)采用超集方式,從而更加靈活方便,適合初學(xué)前端開(kāi)發(fā)者使用。 2、可擴(kuò)展性:超級(jí)文本標(biāo)記語(yǔ)言的廣泛應(yīng)用帶來(lái)了加強(qiáng)功能,增加標(biāo)識(shí)符等要求,超級(jí)文本標(biāo)記語(yǔ)言采取子類元素的方式,為系統(tǒng)擴(kuò)展帶來(lái)保證。  3、平臺(tái)無(wú)關(guān)性:超級(jí)文本標(biāo)記語(yǔ)言能夠在廣泛的平臺(tái)上使用,這也是萬(wàn)維網(wǎng)盛行的一個(gè)原因。 4、通用性:HTML是網(wǎng)絡(luò)的通用語(yǔ)言,它允許網(wǎng)頁(yè)制作人建立文本與圖片相結(jié)合的復(fù)雜頁(yè)面,這些頁(yè)面可以被網(wǎng)上任何其他人瀏覽到,無(wú)論使用的是什么類型的電腦或?yàn)g覽器。


歷史在HTML5本地存儲(chǔ)之前,如果我們想在客戶端保存持久化數(shù)據(jù),有這么幾個(gè)選擇:

  1. HTTP cookie。HTTP cookie的缺點(diǎn)很明顯,最多只能存儲(chǔ)4KB的數(shù)據(jù),每個(gè)HTTP請(qǐng)求都會(huì)被傳送回服務(wù)器,明文傳輸(除非你使用SSL)。

  2. IE userData。userData是微軟在上世紀(jì)90年代的瀏覽器大戰(zhàn)時(shí)推出的本地存儲(chǔ)方案,借助DHTML的behaviour屬性來(lái)存儲(chǔ)本地?cái)?shù)據(jù), 允許每個(gè)頁(yè)面最多存儲(chǔ)64K數(shù)據(jù),每個(gè)站點(diǎn)最多640K數(shù)據(jù),userData的缺點(diǎn)顯而易見(jiàn),它不是Web標(biāo)準(zhǔn)的一部分,除非你的程序只需要支持IE, 否則它基本沒(méi)什么用處。

  3. Flash cookie。Flash cookie的名字有些誤導(dǎo),它實(shí)際上和HTTP cookie并不是一回事,或許它的名字應(yīng)該叫做"Flash本地存儲(chǔ)”,F(xiàn)lash cookie默認(rèn)允許每個(gè)站點(diǎn)存儲(chǔ)不超過(guò)100K的數(shù)據(jù),如果超出了,F(xiàn)lash會(huì)自動(dòng)向用戶請(qǐng)求更大的存儲(chǔ)空間,借助Flash的 ExternalInterface接口,你可以很輕松地通過(guò)Javascript操作Flash的本地存儲(chǔ)。Flash的問(wèn)題很簡(jiǎn)單,就是因?yàn)樗?Flash。

  4. Google Gears。Gears是Google在07年發(fā)布的一個(gè)開(kāi)源瀏覽器插件,旨在改進(jìn)各大瀏覽器的兼容性,Gears內(nèi)置了一個(gè)基于SQLite的嵌入式 SQL數(shù)據(jù)庫(kù),并提供了統(tǒng)一API對(duì)數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn),在取得用戶授權(quán)之后,每個(gè)站點(diǎn)可以在SQL數(shù)據(jù)庫(kù)中存儲(chǔ)不限大小的數(shù)據(jù),Gears的問(wèn)題就是 Google自己都已經(jīng)不用它了。

現(xiàn)狀我們現(xiàn)在通常所說(shuō)的HTML5本地存儲(chǔ),一般指的是Web Storage規(guī)范,這個(gè)標(biāo)準(zhǔn)曾經(jīng)是HTML5規(guī)范的一部分,但后來(lái)因?yàn)榉N種原因從HTML5規(guī)范中分離了出來(lái)。但是除了Web Storage,HTML5的本地存儲(chǔ)標(biāo)準(zhǔn)還有另外2個(gè)競(jìng)爭(zhēng)者:Web SQL Database和IndexedDB。下面就讓我們依次來(lái)看看這3個(gè)規(guī)范吧。
Web StorageWeb Storage是目前得到支持最廣泛的HTML5本地存儲(chǔ)規(guī)范:IE 8+、FF 3.5+、Safari 4+、Chrome 4+、Opera 10.5+,以及iPhone 2+和Android 2+都已經(jīng)支持Web Storage,要判斷你的瀏覽器是否支持Web Storage,可以使用下面這個(gè)函數(shù):

代碼

  1. function supports_html5_storage() {  
        try {  
            return 'localStorage' in window && window['localStorage'] !== null;  
        } catch (e) {  
            return false;  
        }  
    }


HTML5 Storage的使用非常簡(jiǎn)單:

代碼

  1. var foo = localStorage.getItem("bar");  
    // ...  
    localStorage.setItem("bar", foo);


你也可以寫(xiě)成下面這樣:

代碼

  1. var foo = localStorage["bar"];  
    // ...  
    localStorage["bar"] = foo;


如果要將某個(gè)key從存儲(chǔ)空間刪除,可以調(diào)用removeItem:

代碼

  1. localStorage.removeItem(
    'foo'
    );


你也可以像遍歷數(shù)組那樣遍歷存儲(chǔ)的所有鍵值對(duì)象:

代碼

  1. for(var i=0; ivar key = localStorage.key(i);  
        console.log(key + ":" + localStorage[key]);  
    }


如果你的程序需要在不同頁(yè)面訪問(wèn)同一個(gè)值,你可能需要了解這個(gè)值是否已經(jīng)被其他頁(yè)面改變了,這可以通過(guò)向?yàn)g覽器注冊(cè)storage事件來(lái)實(shí)現(xiàn):

代碼

  1. window.addEventListener('storage', function(e) {  
        console.log(e.key + "'s value is changed from '" +  
            e.oldValue + "' to '" + e.newValue + "' by " + e.url);  
    }, false);  
    //A頁(yè)面  
    localStorage['foo'] = 'bar';  
    //B頁(yè)面  
    localStorage['foo'] = 'newBar';


這時(shí)你應(yīng)該會(huì)在A頁(yè)面的Console中看到:
foo’s value is changed from ‘bar’ to ‘newbar’ by http://localhost/test.html
要注意的是,storage事件僅僅只是通知你某個(gè)鍵對(duì)應(yīng)的值已經(jīng)發(fā)生了改變,你沒(méi)有辦法在回調(diào)中阻止這個(gè)改變發(fā)生。
HTML5 Storage看起來(lái)不錯(cuò),那它有沒(méi)什么缺點(diǎn)呢?好問(wèn)題。要說(shuō)HTML5 Storage的缺點(diǎn),唯一的問(wèn)題就是它默認(rèn)的QUOTA只有5MB,并且你沒(méi)辦法通過(guò)程序自行或是提示用戶來(lái)增加存儲(chǔ)空間。唯一的辦法就是用戶自己打開(kāi) 瀏覽器的設(shè)置,并手動(dòng)修改QUOTA的大小,如果超出了5MB的限制,你將會(huì)遇到一個(gè)“QUOTA_EXCEEDED_ERR”的錯(cuò)誤。
Web SQL DatabaseWeb SQL Database是一個(gè)已經(jīng)廢棄的規(guī)范,但是鑒于除了IE和Firefox,其他瀏覽器都已經(jīng)實(shí)現(xiàn)了Web SQL Database,并且它還具有一些HTML5 Storage所不具有的特性,所以還是值得了解一下的。
Web SQL Database就像它的名字那樣,就是一個(gè)讓你可以在Web上直接使用的SQL數(shù)據(jù)庫(kù),你要做的就是打開(kāi)數(shù)據(jù)庫(kù),然后執(zhí)行SQL,和你對(duì)MySQL做的事情沒(méi)什么兩樣:

代碼

  1. openDatabase('documents', '1.0', 'Local document storage', 5*1024*1024,  
    function (db) {  
        db.changeVersion('', '1.0', function (t) {  
            t.executeSql('CREATE TABLE docids (id, name)');  
        }, error);  
    });


關(guān)于Web SQL Database的更多介紹,可以參看這篇指南。
但是它的缺點(diǎn)也同樣明顯。最大的問(wèn)題就出在SQL上,實(shí)際上并不存在一種叫做SQL的標(biāo)準(zhǔn)結(jié)構(gòu)化查詢語(yǔ)言,我們平常使用的實(shí)際上是MS SQL、Oracle SQL、MySQL SQL、postgre SQL或者SQLite SQL(盡管有一個(gè)叫做SQL-92的規(guī)范,但它基本形同虛設(shè)),更進(jìn)一步,甚至都不存在SQLite SQL,我們使用的實(shí)際上是SQLite x.y.z SQL,而這也就是Web SQL Database最大的問(wèn)題,它無(wú)法統(tǒng)一各個(gè)瀏覽器廠商實(shí)現(xiàn)的SQL語(yǔ)言,如果你的某條Web SQL查詢只能在Chrome上運(yùn)行,這還能叫做標(biāo)準(zhǔn)嗎?
所以,如果你現(xiàn)在訪問(wèn)Web SQL Database的規(guī)范頁(yè)面,你會(huì)在頂部看到這樣一則聲明:
這個(gè)規(guī)范已經(jīng)陷入了一個(gè)僵局:目前的所有實(shí)現(xiàn)都是基于同一個(gè)SQL后端(SQLite),但是我們需要更多的獨(dú)立實(shí)現(xiàn)來(lái)完成標(biāo)準(zhǔn)化,所以除非有廠商愿意獨(dú)立實(shí)現(xiàn)這個(gè)規(guī)范,否則當(dāng)前的SQL規(guī)范只能采用SQLite的SQL方言,而作為一個(gè)標(biāo)準(zhǔn),這是不可接受的。
IndexedDB最后我們要介紹的就是IndexedDB了,相比其他兩個(gè)規(guī)范,目前只有Firefox實(shí)現(xiàn)了IndexedDB(順便提一下,Mozilla表示它們永遠(yuǎn)不會(huì)去實(shí)現(xiàn)Web SQL Database),不過(guò)Google已經(jīng)表示正在考慮在Chrome中加入IndexDB支持。
IndexedDB引入了一個(gè)object store的概念,這有點(diǎn)像是一個(gè)SQL Database,你可以在“數(shù)據(jù)庫(kù)”中存儲(chǔ)“記錄”,并且每條“記錄”可以擁有很多“字段",每個(gè)字段都有一個(gè)特定的數(shù)據(jù)類型,你可以選擇記錄的子集, 并使用“光標(biāo)”進(jìn)行遍歷,同時(shí)object store中的所有變更都是基于“事務(wù)”的。
下面讓我們來(lái)看一個(gè)小例子:

代碼

  1. var request = window.indexedDB.open("CandyDB",  
                                        "My candy store database");  
    request.onsuccess = function(event) {  
      var db = event.result;  
      if (db.version != "1") {  
        // User's first visit, initialize database.  
        var createdObjectStoreCount = 0;  
        var objectStores = [  
          { name: "kids", keyPath: "id", autoIncrement: true },  
          { name: "candy", keyPath: "id", autoIncrement: true },  
          { name: "candySales", keyPath: "", autoIncrement: true }  
        ];  
        function objectStoreCreated(event) {  
          if (++createdObjectStoreCount == objectStores.length) {  
            db.setVersion("1").onsuccess = function(event) {  
              loadData(db);  
            };  
          }  
        }  
        for (var index = 0; index < objectStores.length; index++) {  
          var params = objectStores[index];  
          request = db.createObjectStore(params.name, params.keyPath,  
                                         params.autoIncrement);  
          request.onsuccess = objectStoreCreated;  
        }  
      }  
      else {  
        // User has been here before, no initialization required.  
        loadData(db);  
      }  
    };

感謝你的閱讀,希望你對(duì)“HTML5本地存儲(chǔ)的示例分析”這一關(guān)鍵問(wèn)題有了一定的理解,具體使用情況還需要大家自己動(dòng)手實(shí)驗(yàn)使用過(guò)才能領(lǐng)會(huì),快去試試吧,如果想閱讀更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

新聞標(biāo)題:HTML5本地存儲(chǔ)的示例分析
文章位置:http://muchs.cn/article42/pppsec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、小程序開(kāi)發(fā)關(guān)鍵詞優(yōu)化、網(wǎng)站營(yíng)銷定制開(kāi)發(fā)、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

小程序開(kāi)發(fā)