国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > HTML > 正文

html5離線存儲(chǔ)和cookie儲(chǔ)存分析

2020-03-24 15:52:39
字體:
供稿:網(wǎng)友
什么是html' target='_blank'>Cookies(“小甜餅”)呢?簡(jiǎn)單來說,Cookies就是服務(wù)器暫存放在你的電腦里的資料(.txt格式的文本文件),好讓服務(wù)器用來辨認(rèn)你的計(jì)算機(jī)。當(dāng)你在瀏覽網(wǎng)站的時(shí)候,Web服務(wù)器會(huì)先送一小小資料放在你的計(jì)算機(jī)上,Cookies 會(huì)幫你在網(wǎng)站上所打的文字或是一些選擇都記錄下來。當(dāng)下次你再訪問同一個(gè)網(wǎng)站,Web服務(wù)器會(huì)先看看有沒有它上次留下的Cookies資料,有的話,就會(huì)依據(jù)Cookie里的內(nèi)容來判斷使用者,送出特定的網(wǎng)頁(yè)內(nèi)容給你。在HTML5以前我們會(huì)使用 cookie,在瀏覽器端緩存一些數(shù)據(jù),例如:登錄用戶信息,歷史搜索信息等等。但是cookie所支持的容量?jī)H僅只有 4k ,也沒有專門的api來操作,只能依賴一些開源的庫(kù), 這里使用 cookies.js 存儲(chǔ)和獲取cookie信息。

// 這是一個(gè)cookie值Cookies.set( key , value // 鏈?zhǔn)秸{(diào)用Cookies.set( key , value ).set( hello , world // 可以額外設(shè)置一些參數(shù)Cookies.set( key , value , { domain: www.example.com , secure: true });// 設(shè)置緩存時(shí)間Cookies.set( key , value , { expires: 600 });// Expires in 10 minutesCookies.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存儲(chǔ)有一下幾個(gè)缺點(diǎn):

存儲(chǔ)數(shù)據(jù)的量比較小

本身沒有方便的api對(duì)其進(jìn)行操作

cookie信息會(huì)在http請(qǐng)求時(shí)加入到請(qǐng)求頭中,既不安全也增加了帶寬。

WEB Storage

HTML5 提拱更好的本地存儲(chǔ)規(guī)范 localStorage 和 sessionStorage , 它們將數(shù)據(jù)存儲(chǔ)在本地,而且在http請(qǐng)求時(shí)不會(huì)攜帶 Storage 里的信息, 使用方式也很簡(jiǎn)單:

localStorage.setItem( key , value localStorage.getItem( key localStorage.removeItem( key sessionStorage.setItem( key , value sessionStorage.getItem( key sessionStorage.removeItem( key 

sessionStorage 和 localStorage 使用方式及特性基本一致,唯一的區(qū)別是, sessionStorage 只在會(huì)話內(nèi)有效,當(dāng)瀏覽器窗口關(guān)閉,sessionStorage 緩存的數(shù)據(jù)會(huì)自動(dòng)被清除, 而 localStorage 只要不手動(dòng)清除,它會(huì)永久保存在本地。

這里有張圖片分析了 cookie 、 localStorage 、 sessionStorage 三者的區(qū)別

a.jpg


OFFLINE(離線)

為了讓 webapp 擁有像 native app 一樣的功能和體驗(yàn), 在 HTML5的規(guī)范中加入了許多新的api, 讓頁(yè)面可以在離線環(huán)境下正常訪問。 service worker 和 indexedDB 兩者配合可以就可以開發(fā)離線使用的 webapp 了,由于 service worker 目前的兼容不太好,這里我們寫介紹下比較早的方案 application cache 。

service worker

Service Worker是基于Web Worker的事件驅(qū)動(dòng)的,他們執(zhí)行的機(jī)制都是新開一個(gè)線程去處理一些額外的,以前不能直接處理的任務(wù)。對(duì)于Web Worker,我們可以使用它來進(jìn)行復(fù)雜的計(jì)算,因?yàn)樗⒉蛔枞麨g覽器主線程的渲染。而Service Worker,我們可以用它來進(jìn)行本地緩存,相當(dāng)于一個(gè)本地的proxy。說起緩存,我們會(huì)想起我們常用的一些緩存技術(shù)來緩存我們的靜態(tài)資源,但是老的方式是不支持調(diào)試的,靈活性不高。使用Service Worker來進(jìn)行緩存,我們可以用javascript代碼來攔截瀏覽器的http請(qǐng)求,并設(shè)置緩存的文件,直接返回,不經(jīng)過web服務(wù)器,然后,做更多你想做的事情。

因此,我們可以開發(fā)基于瀏覽器的離線應(yīng)用。這使得我們的web應(yīng)用減少對(duì)網(wǎng)絡(luò)的依賴。例如,我們開發(fā)了一個(gè)新聞閱讀的web應(yīng)用,當(dāng)你用手機(jī)瀏覽器在有網(wǎng)絡(luò)的情況下打開時(shí),你可以正常的獲取新聞內(nèi)容??墒牵绻謾C(jī)進(jìn)入飛行模式,那這個(gè)應(yīng)用你就沒法使用了。

如果我們使用了Service Worker做緩存,瀏覽器http請(qǐng)求會(huì)先經(jīng)過Service Worker,通過url mapping去匹配,如果匹配到了,則使用緩存數(shù)據(jù),如果匹配失敗,則繼續(xù)執(zhí)行你指定的動(dòng)作。一般情況下,匹配失敗則讓頁(yè)面顯示“網(wǎng)頁(yè)無(wú)法打開”。

service work 生命周期

b_副本.jpg


service work demo

 !DOCTYPE html html lang= en  head  meta charset= utf-8  script  navigator.serviceWorker.register( /service-worker.js ).then(function(serviceWorker) { console.log( success!  }); /script  /head  body  /body /html 

在頁(yè)面注冊(cè)service-worker成功時(shí)就會(huì)調(diào)用這個(gè)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 采用事件監(jiān)聽機(jī)制, 上面的代碼監(jiān)聽了 install 和 fetch 事件,當(dāng) server worker 安裝成功后,調(diào)用此方法,然后緩存頁(yè)面的資源文件, fetch 頁(yè)面請(qǐng)求事件, server worker 攔截到用戶請(qǐng)求,當(dāng)發(fā)現(xiàn)請(qǐng)求文件命中緩存則從緩存中取得文件,返回給頁(yè)面,無(wú)需經(jīng)過服務(wù)器,借此達(dá)到離線的目的。

當(dāng)然 service worker 的功能遠(yuǎn)不止現(xiàn)在這些

indexedDB

indexedDB 是一個(gè)用于本地存儲(chǔ)數(shù)據(jù)的 nosql 數(shù)據(jù)庫(kù),擁有極快的數(shù)據(jù)查詢速度,而且可以直接保存js 對(duì)象。相比web sql(sqlite)更加高效,包括索引、事務(wù)處理和健壯的查詢功能。indexedDB特點(diǎn):

1.一個(gè)網(wǎng)站可能有一個(gè)或多個(gè) IndexedDB 數(shù)據(jù)庫(kù),每個(gè)數(shù)據(jù)庫(kù)必須具有惟一的名稱。

2.一個(gè)數(shù)據(jù)庫(kù)可包含一個(gè)或多個(gè)對(duì)象存儲(chǔ)

一個(gè)對(duì)象存儲(chǔ)(由一個(gè)名稱惟一標(biāo)識(shí))是一個(gè)記錄集合。每個(gè)記錄有一個(gè)鍵 和一個(gè)值。該值是一個(gè)對(duì)象,可擁有一個(gè)或多個(gè)屬性。鍵可能基于某個(gè)鍵生成器,從一個(gè)鍵路徑衍生出來,或者是顯式設(shè)置。一個(gè)鍵生成器自動(dòng)生成惟一的連續(xù)正整數(shù)。鍵路徑定義了鍵值的路徑。它可以是單個(gè) JavaScript 標(biāo)識(shí)符或多個(gè)由句點(diǎn)分隔的標(biāo)識(shí)符。

基本使用方式如下:

var openRequest = indexedDB.open( auto_people , 3);var db; //數(shù)據(jù)庫(kù)對(duì)象openRequest.onupgradeneeded = function(e){ console.log( Running onupgradeeded... var thisDB = e.target.result; if(!thisDB.objectStoreNames.contains( people )){thisDB.createObjectStore( people , {autoIncrement:true}); //新建一個(gè)store并設(shè)置主鍵自增長(zhǎng)}//創(chuàng)建成功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);}//這應(yīng)該站在別的地方處理,這是做一個(gè)代碼展示var transaction = db.transaction([ people ], readwrite //創(chuàng)建一個(gè)連接var store = transaction.objectStore( people //獲取storevar request = store.add({ name: myron , email: test@qq.com , created: new Date()}); //添加信息request.onerror = function(e){ alert( error! console.dir(e);} //當(dāng)添加失敗時(shí)調(diào)用request.onsuccess = function(e){ console.log( Did it! } //添加成功時(shí)調(diào)用request = store.get(1); //獲取第一條數(shù)據(jù)request.onsuccess = function(e){ var result = e.target.result; console.dir(result); if(result){ //拿到存儲(chǔ)的對(duì)象}

以上內(nèi)容就是cookie和HTML5離線存儲(chǔ)的分析,大家都了解了嗎?

相關(guān)推薦:

如何區(qū)別html5離線存儲(chǔ)和本地緩存實(shí)例詳解

HTML5離線存儲(chǔ)原理

html5的離線存儲(chǔ)問題匯總

以上就是html5離線存儲(chǔ)和cookie儲(chǔ)存分析的詳細(xì)內(nèi)容,其它編程語(yǔ)言

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 柞水县| 壶关县| 赣榆县| 迭部县| 太仓市| 孝感市| 水城县| 无为县| 鸡东县| 尼勒克县| 新安县| 扬州市| 庆阳市| 那坡县| 尚志市| 青海省| 江西省| 象州县| 涟源市| 苍溪县| 白朗县| 临洮县| 大竹县| 通山县| 石门县| 淮阳县| 延津县| 新巴尔虎左旗| 桂平市| 弋阳县| 壶关县| 灵川县| 新源县| 喜德县| 宝清县| 兰西县| 抚松县| 建水县| 阿图什市| 双辽市| 黎城县|