HBuilderX2.6.6+起,Android平台对App本地storage数据存储进行了性能优化,包括plus.storage和uni的storage相关api,主要包括以下改进:
- 数据存储方式优化
之前的storage数据存储到Android系统的SharedPreferences
中,现在修改为存储到数据库文件
中。
SharedPreferences
是 Android 平台为应用开发者提供的一个轻量级的存储辅助类,不适合存储大量的数据,当数据量过大时会影响性能甚至引发ANR。
数据库文件
存储则可以更好的支持大量数据存储,但需要注意JS与原生通讯时传输数据时也存在性能限制,因此不要一次存储大量的数据,建议每次存储数据不要超过100K。 - 新增异步操作接口
原来5+ API中plus.storage只提供同步操作接口,uni-app中的异步接口在App端也是封装同步接口实现的,之前并非真正异步。
新版本已提供异步接口读取、保存数据,避免同步接口阻塞JS。uni-app中的异步接口也调整为真正的异步操作实现。
通过对比测试,以上优化单次读取速度提升10%
,并发300次读取速度提升70%
。
应用升级向下兼容处理
为了确保应用的新版平滑兼容,当基于新版打包的App升级覆盖老版本App时,会在应用启动时自动将原来存储在SharedPreferences
中的数据迁移到数据库文件中,开发者不需要做特殊处理就可以读取到老版本保存的数据。
如果老版App在手机端已经保存了大量数据,覆盖升级新版后,第一次运行新版会因为迁移数据而导致splash界面显示时间稍微变长一些。
注意事项
SharedPreferences
方式存储的数据向数据库文件
存储的升级,是不可逆的过程。
举个极端例子,开发者已有app版本1.0,并且已经在手机端存储了storage数据,然后开发者使用HBuilderX2.6.6+打包生成2.0的app,新app覆盖安装1.0版后,将storage数据从SharedPreferences
迁移到了数据库文件
。接着开发者又回退了HBuilderX版本,使用HBuilderX2.6.6-的版本,打包生成了3.0app,那么这个3.0app覆盖安装到手机上后,使用plus.storage和uni的storage相关api将无法读取历史数据,相关api会继续操作SharedPreferences
方式存储的数据。
plus.storage新增异步接口的清单如下:
- plus.storage.clearAsync
异步清除存储数据 - plus.storage.getAllKeysAsync
异步获取所有键名 - plus.storage.getItemAsync
异步获取存储的键值 - plus.storage.setItemAsync
异步存储键值 - plus.storage.removeItemAsync
异步删除键值
uni的storage操作api无变化,见:https://uniapp.dcloud.io/api/storage/storage?id=setstorage
14 个评论
要回复文章请先登录或注册
猫猫吧
第七十三天至
DCloud_Android_ST (作者)
第七十三天至