内核架构纯血鸿蒙的本质是微内核,而安卓是基于 Linux 宏内核。微内核只提供基础的内存和文件管理能力,驱动和其他系统能力都在 OS 之外。这样做的好处是系统稳定性极高,即使应用崩溃,也不会导致整个系统崩溃(system crash)。而在 Linux 宏内核中,应用的不当行为可能会直接导致系统崩溃。
在小红书的图文笔记场景中,分帧方案得到了应用。当用户在首页的双列场景中点击一篇笔记进入笔记详情页时,这个过程涉及到许多组件的加载。我们可以将这些组件拆分成不同的帧,例如帧 a、帧 b 和帧 c。对于用户而言,他们通常希望在第一时间看到整个大屏的画面,因此我们会优先在帧 a 中展示大图。而在帧 b 和帧 c 中,我们再处理顶部导航栏或底部交互区等内容。通过这种分帧策略,我们能够确保用户在第一时间看到最关键的内容,同时避免了因为一次性加载过多组件而导致的性能问题。
10、鸿蒙NEXT调优工具
传统的主观工具对于鸿蒙 OS 的性能分析仍然适用。例如,抖音和小红书都通过竞品分析来进行主观测评。这种能力主要是通过录屏来展示整个流程的耗时和时长,特别适合评估冷启动完成时延和转场过程的性能。通过录屏,我们可以逐帧查看用户从点击开始到结束的帧数和真实时长,以此来衡量整个过程的持续时间。
10.1 鸿蒙性能分析工具:IDE Profiler
除了主观工具,我们还可以使用 IDE 提供的性能分析工具,如 Profiler,来分析慢函数。由于 ArkTS 编程语言框架主要通过 RTS 和 NAPI(原生应用接口)进行关联,因此需要能够查看 ArkTS 和 NAPI 的整个堆栈层级。这与安卓有所不同,因为当 Java 通过 Java Native API 与原生代码交互时,堆栈并不那么容易查看。
在小红书的性能分析中,我们展示了一个整体线程分析的例子。在左侧,可以看到小红书的主线程(如 com 点开头的线程)、Daemon 线程、Worker 线程以及 FFRT 线程。FFRT 是一种运行函数流的线程,可以执行 TaskPool 上的函数。在下图右侧,我们可以看到在 RTS 环境下的分析结果,其中顶部显示了 NAPI 调用,底部则是一些 C++ 函数。整个调用栈和它们的执行时长是通过一种自上而下的视图来展示的。利用这种视图,我们可以精确地识别出哪些慢函数是造成界面卡顿的原因。