0 基础入门React Native鸿蒙跨平台开发:Systrace API进行性能分析
本文是基于HarmonyOS API 24的进行的ReactNative 鸿蒙跨平台开发依托适配鸿蒙的 RN 运行层使用 React 与 JS 编写一套业务代码无需大量 ArkTS 原生开发通用业务实现代码复用支持按需扩展原生桥调用鸿蒙特有能力有效降低多平台开发维护成本。ReactNative 鸿蒙跨平台开发简单来说就是基于 ReactNative 技术栈依托鸿蒙平台适配层使用 JavaScript 与 React 语法编写一套业务代码经过编译适配后同时支撑鸿蒙应用、安卓、iOS 等多端运行的开发方案。开发者沿用前端熟悉的组件化、状态管理等 React 开发范式不用分别针对鸿蒙原生 ArkTS、安卓原生、iOS 原生独立实现相同业务逻辑依靠桥接层完成 JS 逻辑与鸿蒙原生能力的通信调用鸿蒙的窗口、媒体、设备硬件等系统接口最终打包生成鸿蒙应用安装包兼顾开发效率与多端复用能力同时也存在部分鸿蒙特有系统能力需要编写原生桥模块进行扩展适配复杂交互、高性能场景下要权衡跨平台通用方案与原生开发的取舍。ReactNative 鸿蒙跨平台开发优势1.前端开发者直接复用已有的 React 开发经验与存量业务代码一套代码可同时产出鸿蒙、安卓、iOS 多端应用大幅降低多平台分别开发、维护的人力与时间成本迭代更新时多数业务改动只需修改一处代码就能同步生效2.借助 JS 热更新机制还能绕过应用商店快速推送功能修复与轻度版本变更3.依托成熟的 React 生态海量第三方组件、工具库可以直接接入不用从零适配鸿蒙原生开发体系上手门槛更低4.熟悉网页与 React 技术的开发人员可以快速转型参与鸿蒙应用建设5.框架内置 JS 与原生的通信桥基础 UI、网络、存储等通用设备能力开箱可用大部分常规业务场景无需编写原生扩展模块同时支持按需开发鸿蒙原生桥接模块调用系统独有能力在跨端复用和平台特性之间保留灵活平衡相比纯原生多端开发团队可以更快完成产品落地适合业务频繁迭代、需要同时覆盖多终端的中小型应用场景。–SystraceSystrace is a standard Android marker-based profiling tool (and is installed when you install the Android platform-tools package). Profiled code blocks are surrounded by start/end markers which are then visualized in a colorful chart format. Both the Android SDK and React Native framework provide standard markers that you can visualize.ExampleSystrace allows you to mark JavaScript (JS) events with a tag and an integer value. Capture the non-Timed JS events in EasyProfiler.好的以下是关于 React Native 项目中使用 Systrace 进行 UI 性能调试的详细指南。Systrace 是一个强大的 Android 系统级性能分析工具它通过在代码的关键位置添加时间标记来记录事件最终生成一个详细的时序图表帮助开发者定位应用卡顿、渲染缓慢等问题的根源。一、准备工作在开始使用 Systrace 之前请确保完成以下准备工作关闭 JS 开发者模式在发布版本或进行性能测试时务必确保 React Native 的开发者模式已关闭。你可以在应用日志中寻找__DEV__ false或development-level warning are OFF等字样来确认。 这一步至关重要因为开发者模式会引入额外的性能开销影响分析结果的准确性。连接设备将你的 Android 设备通过 USB 线连接到电脑并确保已开启设备的 USB 调试模式。获取应用包名你需要知道你要分析的应用的包名Package Name。这个信息通常在项目根目录下的android/app/src/main/AndroidManifest.xml文件的manifest标签中定义但更准确的来源是android/app/build.gradle文件中的applicationId字段。二、运行 SystraceSystrace 通常随 Android SDK 的 platform-tools 包一同安装。你可以通过以下命令来启动数据收集AndroidSDK所在目录/platform-tools/systrace/systrace.py--time10-otrace.html sched gfx view-a你的应用包名命令参数详解--time10指定数据收集的持续时间为 10 秒。你可以根据需要调整这个时间。-o trace.html指定输出文件的名称。生成的分析结果会保存为trace.html文件你可以在浏览器中打开它。sched gfx view这是你要收集的系统跟踪标记tags集合。sched提供设备每个 CPU 核心的调度信息。gfx提供图形渲染相关的信息例如每帧的时间范围。view提供视图布局和渲染相关的性能信息。-a 你的应用包名启用应用过滤只收集与你的应用相关的数据。执行流程在终端中输入并执行上述命令。命令开始执行后立即操作你的应用执行你关心的动画、导航或可能导致卡顿的操作。在指定的时间如10秒结束后Systrace 会自动停止收集数据并生成trace.html文件。终端会输出一个链接你可以直接点击该链接或在浏览器中手动打开trace.html文件来查看结果。三、分析性能数据打开trace.html后你会看到一个详细的时序图表。以下是分析的关键步骤和要点启用垂直同步高亮在图表顶部的工具栏中点击“垂直同步”或“VSYNC”高亮复选框。这会在图表上显示16毫秒对应60FPS的帧间隔斑马纹。一个流畅的应用应该在每一帧内完成所有工作而不会跨越帧边界。如果某些线程的工作超出了帧边界就意味着该帧渲染超时可能导致卡顿。识别关键线程UI 线程线程名通常是你的应用包名或UI Thread。这里主要负责标准的 Android 布局和绘制工作。关注其中的Choreographer、traversals或DispatchUI等事件。JS 线程线程名可能是mqt_js或类似名称。这是执行 React Native JavaScript 代码的线程。寻找JSCall、Bridge.executeJSCall等事件。原生模块线程线程名可能是mqt_native_modules或类似名称。这里执行原生模块的代码如UIManager。关注NativeCall、CallJavaModuleMethod等事件。实际案例演示importReactfromreact;import{Button,Text,View,StyleSheet,Systrace}fromreact-native;constApp(){constenableProfiling(){Systrace.setEnabled(true);// Call setEnabled to turn on the profiling.Systrace.beginEvent(event_label)Systrace.counterEvent(event_label,10);}conststopProfiling(){Systrace.endEvent()}return(View style{styles.container}Text style{[styles.header,styles.paragraph]}React Native SystraceAPI/TextButton titleCapture the non-Timed JS events in EasyProfileronPress{()enableProfiling()}/Button titleStop capturingonPress{()stopProfiling()}color#FF0000//View);}conststylesStyleSheet.create({container:{flex:1,backgroundColor:#fff,alignItems:center,justifyContent:center,paddingTop:44,padding:8},header:{fontSize:18,fontWeight:bold,textAlign:center},paragraph:{margin:24,textAlign:center}});exportdefaultApp;这段代码实现了一个React Native应用核心功能是通过Systrace API进行性能分析。Systrace是Android标准的标记式性能分析工具用于监控应用的CPU、图形和视图渲染性能。代码通过两个按钮控制Systrace的开启和停止帮助开发者捕获和分析JavaScript线程的非定时事件。核心功能解析Systrace API集成Systrace.setEnabled(true)启用Systrace性能跟踪。Systrace.beginEvent(‘event_label’)开始标记一个事件记录事件的开始时间。Systrace.counterEvent(‘event_label’, 10)记录一个计数事件值为10。Systrace.endEvent()结束当前事件的标记记录事件的结束时间。这些API组合使用可以精确追踪JavaScript代码的执行时间帮助识别性能瓶颈。用户交互设计启用分析按钮点击后调用enableProfiling启动Systrace并标记事件。停止分析按钮点击后调用stopProfiling结束事件标记。通过按钮控制分析过程避免手动操作带来的复杂性。安装DevEco Studio程序选择目标安装目录设置环境变量但是需要重启一下新建一个空白模板设置API为24的模板项目初始化项目自动下载相关依赖打包接下来通过打包命令npn run harmony将reactNative的代码打包成为bundle这样可以进行在开源鸿蒙OpenHarmony中进行使用。最后运行效果图如下显示