首页 > 其他分享 ># HarmonyOSNEXT应用开发性能优化篇(四)

# HarmonyOSNEXT应用开发性能优化篇(四)

时间:2024-09-18 20:23:29浏览次数:10  
标签:Trace width 性能 number HarmonyOSNEXT height item 优化 100%

本篇是性能优化的最后一篇,合理使用系统接口,前边三篇分别介绍了预加载、布局和状态变量方面上的优化

合理使用系统接口,避免冗余操作

在使用系统的高频回调接口时,删除不必要的Trace和日志打印,避免冗余操作,以减少系统的开销,优化性能,下边分几个小点进行介绍。

避免在系统高频回调用打印Trace

Trace的打印是会额外消耗系统性能的,因此应该避免在这些系统高频回调接口中打印Trace,示例代码如下:

// 反例
Scroll() {
  ForEach(this.arr, (item: number) => {
    Text("ListItem" + item)
    .width("100%")
    .height("100%")
  }, (item: number) => item.toString())
}
.width('100%')
.height('100%')
.onScroll(() => {
  hitrace.startTrace("ScrollSlide", 1002);
  // 业务逻辑
  // ...
  hitrace.finishTrace("ScrollSlide", 1002);
})

// 正例
@Component
struct PositiveOfOnScroll {
  private arr: number[] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

  build() {
    Scroll() {
      List() {
        ForEach(this.arr, (item: number) => {
          ListItem() {
            Text("TextItem" + item)
          }
          .width("100%")
          .height(100)
        }, (item: number) => item.toString())
      }
      .divider({ strokeWidth: 3, color: Color.Gray })
    }
    .width('100%')
    .height('100%')
    .onScroll(() => {
      // 业务逻辑
      // ...
    })
  }
}
避免在系统高频回调用打印日志

日志的打印是会额外消耗系统性能的,特别是有些日志还读取了状态变量的信息,会加剧资源开销,因此应该避免在这些系统高频回调接口中打印日志,示例代码如下:

// 反例
@Component
struct NegativeOfOnScroll {
  private arr: number[] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

  build() {
    Scroll() {
      List() {
        ForEach(this.arr, (item: number) => {
          ListItem() {
            Text("TextItem" + item)
          }
          .width("100%")
          .height(100)
        }, (item: number) => item.toString())
      }
      .divider({ strokeWidth: 3, color: Color.Gray })
    }
    .width('100%')
    .height('100%')
    .onScroll(() => {
      hilog.info(1002, 'Scroll', 'TextItem');
      // 业务逻辑
      // ...
    })
  }
}

// 正例
@Component
struct PositiveOfOnScroll {
  private arr: number[] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

  build() {
    Scroll() {
      List() {
        ForEach(this.arr, (item: number) => {
          ListItem() {
            Text("TextItem" + item)
          }
          .width("100%")
          .height(100)
        }, (item: number) => item.toString())
      }
      .divider({ strokeWidth: 3, color: Color.Gray })
    }
    .width('100%')
    .height('100%')
    .onScroll(() => {
      // 业务逻辑
      // ...
    })
  }
}
避免设置冗余系统回调监听

冗余的系统回调监听,会额外消耗系统开销去做计算和函数回调消耗。比如设置了onAreaChange,就算回调中没有任何逻辑,系统也会在C++侧去计算该组件的大小和位置变化情况,并且把结果回调到TS侧,额外消耗了系统开销。示例代码如下:

// 反例代码
@Component
struct NegativeOfOnClick {
  build() {
    Button('Click', { type: ButtonType.Normal, stateEffect: true })
      .onClick(() => {
        hitrace.startTrace("ButtonClick", 1004);
        hilog.info(1004, 'Click', 'ButtonType.Normal')
        hitrace.finishTrace("ButtonClick", 1004);
        // 业务代码
        // ...
      })
      .onAreaChange((oldValue: Area, newValue: Area) => {
        // 无任何代码
      })
   }
}


// 正例代码
@Component
struct PositiveOfOnClick {
  build() {
    Button('Click', { type: ButtonType.Normal, stateEffect: true })
      .onClick(() => {
        // 业务代码
        // ...
    })
}

使用性能工具分析和定位问题

学会合理使用工具进行问题分析和定位,提升问题解决效率。

使用SmartPerf-Host分析应用性能

SmartPerf-Host是一款深入挖掘数据、细粒度展示数据的性能功耗调优工具,可采集CPU调度、频点、进程线程时间片、堆内存、帧率等数据,采集的数据通过泳道图清晰地呈现给开发者,同时通过GUI以可视化的方式进行分析。工具当前为开发者提供了五个分析模板,分别是帧率分析、CPU/线程调度分析、应用启动分析、TaskPool分析、动效分析。

使用状态变量组件定位工具分析状态变量关联信息

开发者可以使用状态变量组件定位工具获取状态管理相关信息,例如自定义组件拥有的状态变量、状态变量的同步对象和关联组件等,了解状态变量影响UI的范围,写出高性能应用代码。

使用常用trace使用指导协助定位性能问题

本文旨在介绍OpenHarmony中常用的Trace,解释它们的含义和用途,并阐述如何通过这些Trace来识别潜在的性能问题。同时,我们还将详细介绍Trace的工作原理,帮助读者更好地理解这些Trace及如何实现性能数据的采集和分析。通过本文的阅读,读者将对OpenHarmony中的Trace有一个深入的了解,为应用程序性能优化提供有力支持。

标签:Trace,width,性能,number,HarmonyOSNEXT,height,item,优化,100%
From: https://blog.csdn.net/m0_57271017/article/details/142341592

相关文章

  • ChatGPT 多媒体应用设计师备考考点讲解(七):音视频编码与传输优化策略
    音视频编码与传输技术是多媒体应用设计中至关重要的环节。高效的音视频编码不仅能够保证内容质量,还可以减少带宽占用,提升传输效率。而在传输过程中,优化音视频流的传输策略可以降低延迟、减少丢包、保证播放的流畅性。在本篇文章中,我们将详细讲解音视频编码的基础知识、常见编码格式......
  • 【他山之石】优化 JavaScript 的乐趣与价值(下)
    前言继本文的上篇发表之后,没想到反响还挺好,看来大家在JS优化的问题上越来越注重“与国际接轨”了。一起来看本文的下篇,也是干货满满。文章目录6.AvoidlargeobjectsWhattheeffshouldIdoaboutthis?7.Useeval8.Usestrings,carefullyWhattheeffs......
  • 高性能服务器适合哪些应用场景
    高性能服务器通常指的是具备强大计算能力、高内存容量、快速I/O处理能力以及高度可靠性的服务器系统。它们适合运行要求严格的计算任务和关键业务应用。以下是一些高性能服务器适合的应用场景:企业级数据库系统:如Oracle,SQLServer,MySQL等大型数据库,需要高性能服务器来处理大量的......
  • 大模型企业级RAG应用优化(二):检索与生成阶段的8个必知技巧
    一、使用查询重写提高检索的精确性查询重写(也称为查询转换或查询分析等)已经成为RAG工作流的常见环节。当用户的查询不够明确或具体时,可以通过查询重写来分解或者细化问题,以提升检索与生成的准确性。因此,查询转换是一种“检索前”的处理步骤。一个常见的重写方案是HyDE(假设性文档嵌......
  • 大模型企业级RAG应用优化(一):数据索引阶段的8个必知技巧
    基于大模型的RAG应用,一个普遍的认识是:做原型很简单,投入生产很难为什么我的RAG应用很难按预期工作?在之前的文章中我们曾经陆续的对RAG应用优化做过零星与局部的探讨,如融合检索、查询转换、多模态处理、AgenticRAG等。接下来我们将结合之前的方法与实践,总结形成更完整的企业级RAG应......
  • 大模型RAG优化策略总结(二):利用向量数据库实现高效的 RAG、针对 RAG 的微调语言模型、实
    五、利用向量数据库实现高效的RAG向量数据库专门用于存储和高效查询数据的高维向量表示,使其成为RAG检索组件的理想选择。以下是向量数据库如此重要的原因以及如何有效利用它们:a)可扩展性和性能:向量数据库针对处理大规模相似性搜索进行了优化,这对于具有广泛知识库的RAG系统至关......
  • 火山引擎数智平台:高性能ChatBI的技术解读和落地实践
    导读:大模型能力的发展和成熟,催生出新一代智能化BI——ChatBI,即通过自然语言处理(NLP)与大型语言模型(LLMs)的结合,极大简化数据分析过程,提高效率并降低分析门槛。火山引擎数智平台旗下智能数据洞察产品DataWind近期上线ChatBI能力,提供智能修复、多语法适用等能力,在性能上实现秒......
  • 视频美颜SDK与直播美颜工具的实现原理与优化方案
    本篇文章,小编将为大家详细讲解视频美颜SDK的实现原理,并提出优化方案。 一、视频美颜SDK的实现原理1.图像采集与处理2.人脸识别与关键点检测3.美颜滤镜与特效处理4.实时性与低延迟二、直播美颜工具的实现原理直播美颜工具与视频美颜SDK的原理相似,但其核心区别在于需要面对更多的实......
  • 多输入多输出 | Matlab实现SMA-BP黏菌算法优化BP神经网络多输入多输出预测
    多输入多输出|Matlab实现SMA-BP黏菌算法优化BP神经网络多输入多输出预测目录多输入多输出|Matlab实现SMA-BP黏菌算法优化BP神经网络多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料预测效果基本介绍多输入多输出|Matlab实现SMA-BP黏菌算法优......
  • 2024年JCR一区极光优化算法+分解对比!VMD-PLO-Transformer-BiLSTM多变量时间序列光伏功
    中秋献礼!2024年中科院一区极光优化算法+分解对比!VMD-PLO-Transformer-LSTM多变量时间序列光伏功率预测目录中秋献礼!2024年中科院一区极光优化算法+分解对比!VMD-PLO-Transformer-LSTM多变量时间序列光伏功率预测效果一览基本介绍程序设计参考资料效果一览......