RN本地存儲總結

最近在調研RN的本地存儲,發現目前RN的本地存儲大多數最終調的都是端的sqlite(ios上可能區分大小文件使用不同存儲系統),只是根據不用的封裝有幾個典型的庫:

1.AsyncStorage

官方文檔里推薦使用的存儲方案。提供的是一個簡單的、異步的、持久化的Key-Value存儲系統。
優點:

  • (1)使用簡單,常用的API同localstorage;
  • (2)異步機制,帶了成功失敗回調,方便向業務靠攏;
  • (3)目前有一個不錯的,對存儲條數、過期時間等做了封裝。

存在問題:

  • (1)Key-Value存儲系統不好應對復雜數據處理(所以要考慮好需要存儲的內容);
  • (2)存儲上限的問題。
    這是一篇react-native討論存儲上限的 issues,目前Android默認的上限是6M,看源碼,我們發現可以通過重寫setMaximumSize的方式來擴大上限,代碼類似如下:
long size = 50L * 1024L * 1024L; // 50 MB 
com.facebook.react.modules.storage.ReactDatabaseSupplier.getInstance(getApplicationContext()).setMaximumSize(size);`

IOS上的存儲是區分大小的,官方是這么說的

AsyncStorage is backed by native code that stores small values in a serialized dictionary and larger values in separate files.

stackoverflow找到,好像上限是2G。這樣似乎存儲比想象中大,另外我也給之前提到react-native-storage庫的作者提了上限防爆機制的issues,加之我們在使用上注意,這一點暫時可以放心。

2.react-native-sqlite-storage

react-native-sqlite-storage是對端的sqlite封裝,api設計上最接近sqlite,接入需要引入模塊,使用場景:需要復雜大量數據的處理

3.Realm

Realm是一個適應多平臺,功能強大的數據庫,它也支持React Native。Realm底層既不使用sqlite也不使用coredata,它有一套自己的數據庫存儲引擎,官方說在性能上也高于sqlite和coredata很多,而且api更偏向nosql,比起sqlite的方式簡單。確定就是有一定的學習陳本,擴展性不高,只支持IOS8+。

4.總結

在項目前期,AsyncStorage已經能很好的滿足需求,并且簡單、易擴展,建議使用。等到遇到瓶頸時,再考慮是否接入其它兩種。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容