Hummer Standard Benchmarks

November 23, 2023 · View on GitHub

此项目是一个用于测试各家跨端开发框架 App 各项 benchmark 数据指标的一个示例工程集合,包括了基于五种不同的跨端开发框架开发的示例 APP 工程项目(NativeHummerTenonReactNativeFlutter),每个项目都包含了 AndroidiOS 两端,并分别对以下两大方面做了对比基准测试:

一、包大小对比测试

我们分别对基于五种不同的跨端开发框架开发的示例 APP 工程项目(NativeHummerTenonReactNativeFlutter),在单架构模式下(Android: armeabi-v7aiOS: arm64),编译生成的 Release 包做了包大小的对比测试,以下是具体测试版本和测试结果。

测试版本

  • Hummer(Android): 'com.didi.hummer:hummer:0.3.18'
  • Hummer(iOS): 0.2.3
  • ReactNative: 'com.facebook.react:react-native:0.63.4'
  • Weex: 'com.taobao.android:weex_sdk:0.26.0'
  • Flutter: 1.22.6

测试代码

/package_size

测试结果

平台NativeHummerReactNativeWeexFlutter
Android2.5M4.2M8.5M6.9M5.2M
iOS0.097M0.697M1.2M0.997M5.9M

二、各项性能指标基准测试

我们分别对基于五种不同的跨端开发框架开发的示例 APP 工程项目(NativeHummerTenonReactNativeFlutter),针对四种不同的测试用例(见下面用例介绍),对四组不同维度的性能指标(首屏渲染时间CPU内存和帧率),分别做了各自的 benchmark 性能测试,并且保存了相关测试数据。

用例介绍

  • 用例1: 列表基准测试(Scroller)。列表中500行视图,每一行视图中包含5个子视图,测试快速滚动整个列表时的性能。
  • 用例2: 列表视图基准测试(List)。列表中1000行视图,每一行视图中包含5个子视图,测试快速滚动整个列表时的性能。
  • 用例3: 动画基准测试。500个视图,每个视图分别做5种动画中的其中1种,测试所有动画同时执行时的性能。
  • 用例4: 拖拽基准测试。测试在屏幕范围内拖拽一个视图时的性能。

测试机型

Android

  • 系统: Android 10
  • 型号: vivo X27 Pro - V1836A
  • vivo ROM: Funtouch OS_10 PD1836_A_6.20.1

iOS

  • 系统: iOS 14.4
  • 型号: iPhoneX

测试版本

  • Hummer(Android): 'com.didi.hummer:hummer:0.3.18'
  • Hummer(iOS): 0.2.3
  • Tenon: 1.2.1
  • Weex: 'com.taobao.android:weex_sdk:0.26.0'
  • ReactNative: 'com.facebook.react:react-native:0.63.4'
  • Flutter: 1.22.6

用例代码

/performance

用例页面

下面是以 Native 用例为例做的页面截图,其他 App 开发框架的用例运行页面效果均与 Native 用例相同。

首页用例1用例2用例3用例4
首页用例1用例2用例3用例4

测试结果

无论是 Android 端还是 iOS 端,Hummer 和 Tenon 的整体表现,基本都很接近原生性能。

Android

用例1 (Scroller)NativeHummerTenonReactNativeWeexFlutter
页面渲染时间(首次, ms)7411835261716642834862
页面渲染时间(非首次, ms)5901560218215082579568
CPU(%)7.5310.7210.6911.710.119.94
内存(M)114.89133.45137.94167.8178.5210.17
帧率(fps)585051474931
用例2 (List)NativeHummerTenonReactNativeWeexFlutter
页面渲染时间(首次, ms)3343875595453477535
页面渲染时间(非首次, ms)1702153353683238215
CPU(%)4.074.856.8514.435.0810.44
内存(M)58.1464.6270.48173.89224.08152.38
帧率(fps)606060586059
用例3 (动画)NativeHummerTenonReactNativeWeexFlutter
页面渲染时间(首次, ms)34564110447781881538
页面渲染时间(非首次, ms)1953857306361394224
CPU(%)14.2715.4815.333.3117.2218.58
内存(M)86.988.97102.53118.75102.56172.28
帧率(fps)303030312930
用例4 (拖拽)NativeHummerTenonReactNativeWeexFlutter
页面渲染时间(首次, ms)253310342425396514
页面渲染时间(非首次, ms)168175183287185213
CPU(%)3.035.1967.515.966.94
内存(M)55.5563.1666.5102.1766.57142.21
帧率(fps)606059606060

iOS

用例1 (Scroller)NativeHummerTenonReactNativeWeexFlutter
页面渲染时间(ms)17271970224923581694806
CPU(%)1.73225.453.188.18
内存(M)116149156.27177.27144125.18
卡顿率(ms/s)1.6671.6671.6681.6781.6680
用例2 (List)NativeHummerTenonReactNativeWeexFlutter
页面渲染时间(ms)4695456849754141608
CPU(%)3.365.645.8218.459.918.27
内存(M)9.3621.1823.5588.3691.5591.82
卡顿率(ms/s)004.167.593.4192.902
用例3 (动画)NativeHummerTenonReactNativeWeexFlutter
页面渲染时间(ms)773905113113531535655
CPU(%)1.5521.9130.556.738.45
内存(M)61317.272656.7381.73
卡顿率(ms/s)000000
用例4 (拖拽)NativeHummerTenonReactNativeWeexFlutter
页面渲染时间(ms)539563578922545708
CPU(%)25.556.187.557.185
内存(M)51012141654
卡顿率(ms/s)000000