HarmonyOS 鸿蒙Next中开发使用了多个Preference实例,串行await获取首选项的值出现较大延迟

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS 鸿蒙Next中开发使用了多个Preference实例,串行await获取首选项的值出现较大延迟 在开发使用了多个Preference实例,在封装的首选项操作方法中进行了是否存在实例的判断。如下文,一个操作里面存在两个await的异步操作,在批量获取数据时,多个获取首选项操作串行,有明显的延迟。而且在存储数据时多个put串行,如果操作过快,有可能在后续获取数据时拿不到指定的数据。

个人想了两个解决办法,一是删除验证是否存在首选项实例的异步操作,可以减少一半的异步操作,而是使用taskpool,将同一批get或put操作分配到各个线程,等到所有都完成后统一进入下一个步骤。

// 从用户首选项获取数据 
async getPreferenceValue(name:string, key:string, defaultValue:preferences.ValueType){
  if (!this.prefMap.has(name)) {
    console.log('testTag', `Preferences[${name}]尚未初始化`)
    return
  }
  try {
    // 获取preference对象 
    let pref = this.prefMap.get(name)
    // 读数据 
    let value = await pref.get(key, defaultValue)
    console.log('testTag', `读取Preferences[${name}.${key} = ${value}]成功`)
    return value
  } catch (error) {
    console.log('testTag', `读取Preferences[${name}.${key}]失败`, JSON.stringify(error))
  }
}

更多关于HarmonyOS 鸿蒙Next中开发使用了多个Preference实例,串行await获取首选项的值出现较大延迟的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

1、首选项场景介绍,参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/data-persistence-by-preferences-V5#

2、async/await,通过使用async关键字声明一个函数为异步函数,并使用await关键字等待Promise的解析(完成或拒绝),以同步的方式编写异步操作的代码。

参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/async-concurrency-overview-V13#asyncawait

更多关于HarmonyOS 鸿蒙Next中开发使用了多个Preference实例,串行await获取首选项的值出现较大延迟的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,使用多个Preference实例并通过串行await获取首选项值出现较大延迟,可能涉及以下原因:

  1. 存储机制:鸿蒙的Preference数据存储在本地文件中,频繁的读写操作可能导致I/O瓶颈,尤其是在多个Preference实例同时操作时。

  2. 异步处理:await会阻塞当前任务,等待异步操作完成。如果多个Preference实例的读取操作依次执行,每个操作都需要等待前一个完成,累积的延迟会显著增加。

  3. 线程调度:鸿蒙的任务调度机制可能会影响异步操作的执行效率,尤其是在多任务并发时,线程切换和资源分配可能导致延迟。

  4. 数据量:如果Preference中存储的数据量较大,每次读取时的解析和加载时间也会增加,尤其是在串行操作中,延迟会被放大。

  5. 系统负载:设备的整体负载情况(如CPU、内存占用)也会影响Preference读取操作的响应时间。

解决方法可考虑并行化读取操作或优化Preference的使用方式,但具体实现需根据实际场景调整。

在HarmonyOS鸿蒙Next中,串行使用await获取多个Preference实例的值可能导致延迟。建议优化如下:

  1. 并行获取:使用Promise.all并行获取多个Preference值,减少等待时间。

  2. 缓存机制:对频繁访问的首选项数据进行缓存,避免重复读取。

  3. 减少依赖:检查是否所有Preference实例都需要实时读取,部分数据可以延迟加载。

  4. 优化逻辑:重新评估业务逻辑,确保首选项的使用是必要的,避免不必要的I/O操作。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!