DCloud_Android_ST
DCloud_Android_ST
  • 发布:2020-03-17 20:34
  • 更新:2022-12-13 09:56
  • 阅读:15646

Android平台 storage性能优化说明

分类:HTML5+

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新增异步接口的清单如下:

uni的storage操作api无变化,见:https://uniapp.dcloud.io/api/storage/storage?id=setstorage

0 关注 分享

要回复文章请先登录注册

y***@cubenergy.com.cn

y***@cubenergy.com.cn

回复 4***@qq.com :
同问,怎么解决的
2022-12-13 09:56
是是是是

是是是是

在nVue页面里面可以使用同步存储(setStorageSync)的方式吗
2022-10-07 16:07
DCloud_Android_ST

DCloud_Android_ST (作者)

回复 4***@qq.com :
android还是IOS 目前还没遇到过这种情况。可以简单实现个demo看看是否可以复现没准是其他逻辑导致引发的
2022-01-17 16:42
9***@qq.com

9***@qq.com

回复 4***@qq.com :
同问
2022-01-17 16:27
4***@qq.com

4***@qq.com

退出应用后,再次进入应用,获取不到之前setStorage或setStorageAsync缓存的数据,怎么解决啊
2021-09-18 10:25
8***@qq.com

8***@qq.com

APP端setStorage,数据大时报错 Runtime.Android.js:198 request entity too large。是不能存大量数据吗? 我这900K的数据报错
2021-08-27 11:18
愿随风丶飘雪

愿随风丶飘雪

请问IOS端数据是缓存在哪里呢
2021-07-07 19:17
愿随风丶飘雪

愿随风丶飘雪

我们是之前的mui APP升级到uniapp的,自己写了一个工具类,把mui APP的SharedPreferences信息转移到uniapp的SharedPreferences中,然后官方会自动把数据再转存到数据库中
2021-07-07 19:07
猫猫吧

猫猫吧

回复 2***@qq.com :
感谢解答
2021-05-20 17:01
2***@qq.com

2***@qq.com

回复 猫猫吧 :
是sqlite的,我调试看过了
2020-10-28 22:38