性能和體驗在 iOS / Android 雙端場景下已經是一個較為成熟的,但隨著鴻蒙 OS 的發(fā)展,端側開發(fā)者需要更多的關注多端場景的差異性。在 InfoQ 舉辦的 QCon 全球軟件開發(fā)大會(上海站)上小紅書鴻蒙工程師王勁鵬為我們帶來了精彩專題演講“小紅書鴻蒙 OS 下的性能優(yōu)化探索與實踐”,分享議題將以獨特于雙端的視角,分享小紅書在鴻蒙 OS 上的性能創(chuàng)新實踐。
內容亮點:
詳細了解小紅書在鴻蒙 OS 上的性能優(yōu)化實踐案例;
對比 Android/iOS 端的類同性能優(yōu)化場景,以前端視角展示鴻蒙 OS 上特有的能力上有何不同。
以下是演講實錄(經 InfoQ 進行不改變原意的編輯整理)。
我分享的主題是小紅書在鴻蒙平臺上的工程實踐,主要聚焦于性能優(yōu)化和探索。首先,我先介紹一下自己的背景。我之前一直從事大前端領域的工作,主要專注于跨端和容器化方案。我也曾手寫過一個跨端框架,名為 Doric,它可以對標 React Native、Vue Native 和 Flutter 等。Doric 框架在落地時表現(xiàn)良好,還支持了一些自研的 3D 引擎方案。除此之外,我還有播放器內核研發(fā)經驗,以及大前端常規(guī)體系建設和 CI/CD 流水線的工程經驗。未來,我將持續(xù)關注大前端的演進,尤其是鴻蒙這樣的多端和跨端平臺。
從 2023 年開始,鴻蒙的優(yōu)勢愈發(fā)明顯,已經成為可與 iOS、安卓媲美的第三大移動操作系統(tǒng)。從一些抖音視頻中也可以看出,鴻蒙在流暢性方面甚至在某些層面上超過了 iOS。
今天的演講內容分為四個部分。第一部分是介紹整個歷程和背景;第二部分是介紹鴻蒙 OS 的相關能力和小紅書在該平臺上的優(yōu)化實踐;第三部分是通過鴻蒙 OS 提供的性能驗證工具,展示小紅書在鴻蒙平臺上的性能優(yōu)化驗證方法、優(yōu)化后的性能提升以及具體的收益和結果;最后一部分是總結和展望。
歷程和背景
小紅書迭代歷程
從 2023 年年中開始,鴻蒙的“千帆計劃”正式啟動,并很快升級為“鴻飛計劃”。小紅書作為 7 家頭部合作商之一,率先支持了鴻蒙,并于 2023 年 11 月中旬上線了一個基礎版的 beta 版本 APP。這個版本主要包含筆記瀏覽和視頻筆記瀏覽兩大功能,以及一些簡單的個人設置。當時,小紅書的動作非常迅速,可以說是頭部應用廠商中對華為支持最為積極的品牌之一。
在整個鴻飛計劃中,我們規(guī)劃了三個核心里程碑:除了 2023 年 11 月的 beta 版本外,還包括 2024 年 6 月的 HDC 版本和 2024 年 9 月的商用版本。HDC 版本主要是針對華為正式宣發(fā)鴻蒙 3(HarmonyOS Next)開發(fā)者測試的情況。在 HDC 版本中,我們上線了許多小紅書特有的存量功能,包括視頻拍攝、圖文拍攝以及多設備協(xié)同等創(chuàng)新特性。而到了 2024 年 9 月的商用版本交付時,小紅書的核心功能已經基本與主端對齊。考慮到鴻蒙的開發(fā)周期僅有一年,小紅書的鴻蒙 APP 在這一年中要對齊開發(fā)了十年甚至十幾年的安卓和 iOS 版本,難度和壓力都非常巨大。
到 2024 年 9 月,除了對齊雙端的所有功能外,我們還開發(fā)了許多其他功能,包括華為支持的創(chuàng)新特性,例如智能拖拽——用戶可以將圖片拖拽到中轉站或小藝等場景。此外,商用版本還支持了用戶呼聲較高的 HDR 或 Moonlight Photo 拍攝能力。
純血鴻蒙與安卓的區(qū)別
我從幾個維度來對比一下純血鴻蒙和安卓 OS 的主要區(qū)別。
內核架構 純血鴻蒙的本質是微內核,而安卓是基于 Linux 宏內核。微內核只提供基礎的內存和文件管理能力,驅動和其他系統(tǒng)能力都在 OS 之外。這樣做的好處是系統(tǒng)穩(wěn)定性極高,即使應用崩潰,也不會導致整個系統(tǒng)崩潰(system crash)。而在 Linux 宏內核中,應用的不當行為可能會直接導致系統(tǒng)崩潰。
多設備適配 鴻蒙目前支持多種設備類型,包括 Mate 60 Pro 這樣的直板手機、Mate X5 或非凡大師 XT 這樣的雙折疊和三折疊手機、平板電腦、車機,甚至華為正在研發(fā)的鴻蒙 PC。鴻蒙真正實現(xiàn)了類似 iOS 的多端整合能力,通過一套代碼實現(xiàn)多端部署。其工程體系和架構支持單 HAP(Harmony Ability Package)多 HSP(Harmony Service Package)模塊,指令集適配了 ARM64 等多種架構,開發(fā)者只需根據(jù)設備尺寸適配 UI 展示即可。例如,在 2024 年 9 月 的華為全場景設備發(fā)布會上,余承東展示了小紅書在從直板機到雙折疊、三折疊設備上的適配能力,完全實現(xiàn)了響應式編程,不同設備形態(tài)下有不同的瀏覽體驗。
開發(fā)工具和編程模型 鴻蒙的開發(fā)工具和編程模型與安卓差異較大。鴻蒙更類似于 Flutter 的嵌套型容器布局,而不是安卓那種面向對象的開發(fā)方式。在語言層面,鴻蒙完全封裝了底層邏輯,采用類似前端 Flux 單向數(shù)據(jù)流模式,通過數(shù)據(jù)變更驅動 UI 刷新。這種模式類似于前端 Redux 或 MobX 框架中的 state 管理 。
從 2024 年 10 月 8 日公測開始,鴻蒙的應用生態(tài)正在逐漸繁榮。不過,目前像微信這樣的應用還處于搶先體驗階段。相比之下,安卓的生態(tài)已經相對成熟。鴻蒙的最終目標是打造全場景智能設備生態(tài),涵蓋所有終端設備,以及基于 OpenHarmony 內核開發(fā)的物聯(lián)網終端。它還支持多種芯片體系,例如瑞芯微 RK3568 等。
小紅書鴻蒙應用架構層級
小紅書經過一年的迭代,其整體應用架構已經基本成熟。目前,整體代碼量接近 200 萬行,達到了一個較高的復雜度。在一般成熟的 APP 架構中,通常會包含一些基礎底層能力,例如網絡、磁盤存儲、埋點體系、APM(應用性能管理)系統(tǒng),以及一些通用組件和能力。對于鴻蒙平臺,小紅書還具備一些特殊的公共通用能力。
我們開發(fā)了一個“一多框架”,這是一個支持一套代碼多端部署的具體框架體系。通過這個框架,我們實現(xiàn)了多設備的斷點控制功能。用戶可以根據(jù)設備的尺寸和類型進行適配,因為華為設備支持多端投屏。例如,用戶可以在手機上瀏覽小紅書,然后將內容投屏到車機上。比如用戶購買了一輛問界汽車,可以在車內通過車機繼續(xù)瀏覽手機上的小紅書內容,這種場景在駕駛時尤其有用。
除了底層框架,對于上層業(yè)務,小紅書還有一套自研的組件庫方案,這套組件庫承載了上層業(yè)務的多種功能,包括圖文筆記、視頻筆記瀏覽,以及一些 Hybrid 容器能力。小紅書本質上在跨端開發(fā)中仍然使用了 React Native(RN)和類 Web 技術。RN 引擎由華為內部合作提供,采用了自研的 ohos 方案,用于解決 React Native 的 bundle 和 JS 加載以及渲染問題。此外,還包括產品定制層,這里涵蓋了所有相關的設備適配內容。
性能優(yōu)化與實踐
目前,安卓和 iOS 在性能優(yōu)化方面已經相當成熟,包括如何分析性能熱點問題、有哪些工具以及最佳實踐等。然而,對于鴻蒙來說,它是一個全新的系統(tǒng)。直到 2024 年年中,鴻蒙的穩(wěn)定性和流暢性都還存在一些問題。這里重點講述小紅書在 2024 年與華為一起進行了哪些實踐,以提升應用的性能和用戶體驗。
我們定義了一個性能指標場景。這個指標體系是小紅書與華為共同探討的結果,因為華為有一個性能工廠,它對每個應用的評級都有一個 S 標標準。小紅書與華為一起確定了針對小紅書場景需要觀測的具體指標。性能優(yōu)化的核心是慢函數(shù)指標,它主要包含兩部分:過程時長和應用體驗的流暢性。
過程時長主要包含以下三點:
冷啟動時長 :這是用戶最關心的指標之一,即從點擊應用圖標到應用完成動畫并展示第一幀的時間。對于多數(shù)應用,首頁通常有緩存機制。例如,小紅書會緩存用戶上次刷新的筆記,淘寶會緩存用戶上次瀏覽的商品內容。
場景完成時長 :指完成某個特定場景所需的時間。
應用響應時長 :指用戶操作界面后,界面真正發(fā)生變化的時間,即響應時延。
流暢性方面,最基礎的觀測指標是平均 FPS(幀率),包括丟幀數(shù)、最大連續(xù)丟幀數(shù)、丟幀卡頓次數(shù)以及卡頓率。卡頓率可以通過量化計算得出:當一個場景中出現(xiàn)丟幀時,丟幀的時長與場景總時長的比值即為卡頓率,它是一個小于 1 的百分比數(shù)值。