HTML5+的離線本地存儲有如下多種方案:
HTML5標準方案:cookie、localstorage、sessionstorage、websql、indexedDB
HTML5Plus擴展方案:plus.navigator.setcookie、plus.storage、plus.io
- cookie
體量最小,可以設置過期時間。不能跨域。 - localstorage
適合key、value鍵值對的存儲,數據量一般不超過5M。是常用的輕量數據存儲方案。不能跨域。 - sessionstorage
也是鍵值對,特點是關閉App就消失了,也不能跨webview,一般不用于持久化數據保存。 - websql
是手機端關系型數據庫的最佳方案,各種手機都支持。只是該標準不再更新。但是目前手機端重量數據存儲的唯一可商用方案。 - indexedDB
是HTML5里最新的數據存儲規范,但不是基于SQL,而是基于對象。
indexedDB性能更高,全是異步處理,學習難度偏大。最重要的是目前手機端支持度不行。Android4.4以上和iOS8以上才支持indexedDB。 - plus.navigator.setcookie
與HTML5的標準cookie相比,plus的擴展主要是為了跨域。所謂跨越,就是本地HTML頁面和服務器HTML頁面共享cookie數據,或者說本地頁面的js可以操作服務器頁面產生的cookie。如果沒有跨越需求,不需要使用plus擴展。 - plus.storage
plus.storage也是鍵值對數據存儲。它是把OS給原生App使用的鍵值對存儲數據庫封裝一層給JS使用。
plus.storage沒有理論上的大小限制。
plus.storage相比于localstorage 還有一個特點是可跨域。當一個存儲數據,需要被本地和來自服務器的頁面同時讀寫時,就涉及跨域問題。此時HTML5的localstorage不能滿足需求,只能使用plus.storage。
plus.storage操作要比localstorage慢幾十毫秒,如果不是因為大小限制或跨越,盡量使用localstorage。
有網友封裝了一個框架,針對key-value數據,在localstorage超過5m時自動切換到plus.storage,參考http://ask.dcloud.net.cn/article/552。雖然這么做聽起來有點復雜,但我們對這種追求性能極致的開發者非常贊賞。 - plus.io
plus.io是文件讀寫,雖然也可以通過讀寫txt等文件存儲數據,但并不如專業的storage和websql方便。
plus.io更多的是用于圖片等多媒體文件的本地保存。
比如圖文列表的離線使用,一般有2種做法:
- 圖片下載不通過img的src,而是plus.dowload下載的,先下載圖片,存好路徑后,然后img的src動態指定文件路徑
- 圖片使用img的src下載,然后用canvas把img存成圖片文件。下次不聯網,img的scr直接指向本地文件
有人問原生的sqllite是否可用,5+里沒有封裝,推薦使用HTML5標準的數據庫。
還有人問為啥不封裝sqllite?因為HTML5已經有了,HTML5+規范無法重復立項。
HTML5+從屬于w3c指導下的聯盟,DCloud也是w3c會員,重復發明輪子沒有好處,只會增加工作量和增大包體積。
有人問三方清理工具清理垃圾會不會造成某些數據丟失,這個可能性是存在的,但概率并不高,取決于清理軟件會不會分析你的存儲數據里哪些是可以清除的垃圾數據。除了OS的清理工具外,一般沒有root權限的清理工具是拿不到除了plus.io外的你的app的存儲數據的。