最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

純js實現(xiàn)無限空間大小的本地存儲

 更新時間:2015年06月18日 09:17:58   投稿:hebedich  
這篇文章主要介紹了純js實現(xiàn)無限空間大小的本地存儲的功能,源碼和demo都放給大家,本文著重說下實現(xiàn)的原理,具體的實踐擴展小伙伴們自由發(fā)揮吧。

好久沒有寫博客了,想到2年前答應要放出源代碼的也沒放出來,最近終于有空先把純js實現(xiàn)無限空間大小的本地存儲的功能開源了,

項目地址https://github.com/xueduany/localstore,

demo見http://xueduany.github.io/localstore/,

下面給大家簡單說說大概原理,具體細節(jié)和異常處理后面有機會在單獨說

先說下突破本地localStorage的原理,官方原話是這么說的http://www.w3.org/TR/2013/PR-webstorage-20130409/

所以你懂的,你可以利用多個子域名的localStorage是不互相依賴的性質(zhì),來通過多個子域名的localStorage來設計實現(xiàn)一個storePool,突破上限

那么,在實際API存儲的時候,就不是對本地localStorage的保存了

這有點類似一個Manager模式,就是你告訴倉庫管理員你要保存什么,倉庫管理員給你一把鑰匙,然后你拿著鑰匙去對應的倉庫把你的東西托管起來,管理員再給你一個token憑證,以后你只要拿著這個憑證就可以把的保存的東西取出來

最終用戶不用care我的數(shù)據(jù)保存在哪里,只要實現(xiàn)類似localStorage的API即可

然后設計一個js對象來充當倉庫管理員的角色即可,這個管理員需要支持有多少個token,對應的保存的東西寄放在哪里,就是寄放在哪個子域名下的空間里面,那么我們需要設計實現(xiàn)這么一套數(shù)據(jù)結構

對應的key下面是存放它存在的倉庫的地址,以及保存時間,保存時間的概念是用來計算數(shù)據(jù)新鮮度的,即計算是否過期

所以我們首先要創(chuàng)建多個iframe,來加載多個域名下代理文件,通過HTML5的api postMessage或者之前老的頁面跨域方式互相交互,來通過這個代理的proxy來保存數(shù)據(jù)

在當前主域名下保存,數(shù)據(jù)的key的存根,然后實際數(shù)據(jù)保存在各個子域名下

Ok,那么現(xiàn)在突破了存儲上限,我們要保存一個網(wǎng)頁下來,就要考慮把網(wǎng)頁相關的靜態(tài)資源都拉下來,對于網(wǎng)頁相關的資源,有包括js,css,這些都是文本,這些都簡單,只要一個ajax請求過,就可以拿到內(nèi)容,唯一要考慮的就是安全性就是跨域問題導致js拿不到響應數(shù)據(jù),這里只要在CDN節(jié)點服務器上設置響應頭為

即可,跨域得到內(nèi)容

js,就是<script src=”url”></script>這種只要改成<script>遠程拿到的內(nèi)容</script>即可,css,<link rel=”stylesheet” href=”url”>這種只要改成<style>內(nèi)容</style>即可

這里只要考慮能匹配到原來html的這些代碼塊即可,只要考慮一個問題,就是js的regexp默認是貪婪模式,所以我們的正則要做到最小匹配,

然后找到html里面對應的內(nèi)容,替換成為已經(jīng)保存在localStorage里面的內(nèi)容即可

那么對于圖片,如何獲得圖片的內(nèi)容呢?我們知道圖片是rawdata,2進制,首先我們要解決獲取圖片2進制流的問題

然后通過fileReader直接轉換成為base64,既可以保存在本地了,然后替換圖片的src從一個url變成一段base64的字符串即可

然后把整個網(wǎng)頁html里面對應資源替換成為我們特殊標記

LOCALSTORE標記,然后通過遞歸查找算法,從各個子store取得內(nèi)容,還原平湊成為原來的完整html

然后直接通過document.write來還原原來的頁面

通過這種原理,你可以把一個網(wǎng)站離線化到本地,然后基于singlePage技術,來實現(xiàn)不發(fā)任何請求的瀏覽,當然了,這里面還有一些別的技術細節(jié)需要處理,具體有哪些坑,且聽我下回分解?。?!

以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。

相關文章

最新評論

红桥区| 木兰县| 阜新| 东乌珠穆沁旗| 福泉市| 九龙县| 二连浩特市| 兴海县| 濮阳市| 焉耆| 固始县| 四子王旗| 保亭| 德化县| 曲阜市| 常山县| 汉寿县| 邢台县| 堆龙德庆县| 于都县| 贺兰县| 漠河县| 丹凤县| 寿宁县| 扬州市| 佛冈县| 敖汉旗| 阿尔山市| 依兰县| 涪陵区| 牙克石市| 邹城市| 邵东县| 岳普湖县| 和硕县| 烟台市| 琼结县| 西丰县| 岳西县| 额济纳旗| 托克托县|