ArkUI,更高效的框架設計
ArkUI,更高效的框架設計
上期文章我們講到了ArkUI的三大特性,同時提到了ArkUI是一套用於構建HarmonyOS應用介面的UI開發框架,本期我們將從架構設計上來聊聊ArkUI的設計理念。
ArkUI架構圖
從架構圖可以看出,ArkUI的設計理念是在端到端整條技術路徑設計上建立了一整套完整的分層機制。接下來我們依次分層為大家介紹。
ArkUI框架的“前驅”——【前端層】
前端層
架構的第一層【前端層】又稱【宣告式UI前端】,這一層包含了上期文章介紹的極簡的UI資訊語法規範,UI元件以及ArkTS語言特有的狀態管理機制。
獨立的封裝
此外,ArkUI對常用的UI元件的結構、樣式、事件三大屬性進行了獨立的封裝,內建於SDK中。開發人員可以根據專案設計需求,呼叫與設計匹配的元件函式,傳入相應的引數來完成UI描述。
宣告式UI資訊語法
同時使用宣告式UI資訊語法,可以讓資料和View進行聯動更新,華為自研語言ArkTS為這種聯動重新整理提供了多維度的狀態管理機制,開發人員透過對資料進行註釋標記,合理控制資料對應View的更新作用範圍。
三種更新方式
如: 只單獨更新、父子單向更新,父子雙向同步更新等。
到這裡,第一層【前端層】就介紹完畢了。
ArkUI框架的“核心部分”——【核心層】
接下來我們來到了框架的第二層【核心層】。
核心層
這一層主要包含兩部分【方舟編譯執行時】和【宣告式UI後端引擎】。
方舟編譯執行時
【核心層】的第一部分是【方舟編譯執行時】,它涉及到開發環境和終端環境
執行流程圖
【方舟編譯執行時】的流程包含4步
跨語言呼叫
第1步是跨語言呼叫
ArkUI在開發專案時支援多語言開發,為不同的開發語言相互通訊提供了通道,例如:提供了JS/TS與C/ C++互動的NAPI機制。
新語言ArkTS
而在ArkUI支援的多種語言中,ArkTS是以TS為語法基礎的應用程式語言。
型別系統
在預編譯的過程中,資料的靜態型別資訊會攜帶在生成的統一位元組碼中,後端編譯的時候能直接利用這種型別資訊加速機器碼的執行,避免了執行時收集物件造成的額外開銷,同時這些型別資訊被用於AOT編譯過程,使得應用啟動時就可以執行AOT生成的最佳化機器碼獲得高效能執行體驗。
統一位元組碼
第2步是統一位元組碼
完成專案開發將專案進行打包時,方舟編譯器將編寫的高階程式語言透過內建的工具鏈,編譯為一種與執行裝置和系統無關的可移植介質,這種介質就叫統一位元組碼(又稱方舟碼,abc檔案),這個過程也稱為位元組碼預編譯。
統一位元組碼
第3步是機器碼和安裝包
位元組碼在裝置上可以透過解釋執行或者編譯後執行的方式執行,對於執行效能要求高的部分位元組碼呼叫AOT生成機器碼。
最後,應用經歷了開發、位元組碼預編譯、AOT靜態最佳化編譯、打包簽名就形成了一個完整安裝包,這樣一來就終於可以在裝置上執行預覽了。
GC機制
第4步是GC(Garbage Collection)機制
搭載HarmonyOS系統的裝置
對比其他裝置,搭載HarmonyOS系統的裝置上執行應用時會顯得特別流暢,這裡的秘密是什麼呢?
GC機制技術問題
由於在傳統的作業系統中,基於Tracing的GC存在著STW(Stop The World)階段暫停時間較長的問題。
STW
當手機記憶體資源不夠用的時候,傳統作業系統虛擬機器就會召喚GC(Garbage Collection)封鎖公路,暫停手機執行的所有執行緒,等待它回收記憶體空間。
STW暫停時間較長
而且STW(Stop The World)階段的暫停時間段較長,開發者無法精確控制和干預,在效能較差的手機上會表現出較強的“間歇性”卡頓。這就好比行駛在市區道路的車輛,在經過每個路口都遇到了較長時間的紅燈等待,一路走走停停,行駛體驗感較差。
HPP GC
而方舟編譯執行時在記憶體回收方面重新設計,基於Tracing GC推出了高效能記憶體回收技術——HPP GC(High Performance Partial Garbage Collection)。HPP GC綜合了多種Tracing GC演算法,根據不同物件區域,採用不同的回收方式。這種GC機制可以縮短STW階段的時長,用在市區駕駛車輛來比喻,就是縮短了車輛在路口紅燈等待的時間,增加了行駛的體驗感。
HPP GC
接下來我們來看核心層的第二部分——宣告式UI後端引擎。
它在HarmonyOS系統終端執行時,由C++編寫UI的基本元件、佈局、動效和事件組成。供UI前端開發人員呼叫。
渲染管線
渲染管線是位於執行時內部的一個獨立的渲染執行緒,它負責支配CPU多執行緒地去工作,讓CPU為GPU提供更多的渲染資料,最大額度的調取GPU的能力。
到此,【核心層】已全部介紹完畢。
透過本期ArkUI架構的學習,相信大家已經瞭解方舟編譯執行時的技術和流程,也對ArkUI的設計理念有了基礎的認識。完整版的內容可檢視上方的影片,我們下期再見~
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70009402/viewspace-2928839/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ArkUI框架,更懂程式設計師的UI資訊語法UI框架程式設計師
- Harmony學習2:ArkUI,更高效的架構設計UI架構
- ArkUI框架又有哪些新增能力?UI框架
- 鴻蒙程式設計江湖:ArkUI 的宣告式 UI 程式設計與狀態管理鴻蒙程式設計UI
- 高效程式設計程式設計
- 智慧城市:如何設計的更安全?
- C++ 高效能伺服器網路框架設計細節C++伺服器框架
- JetBrains AppCode 2023啟用版: 讓程式設計變得更簡單,更高效AIAPP程式設計
- CSM|敏捷設計,讓設計更高效敏捷
- 【程式設計框架】Android可配置的ScrollView框架程式設計框架AndroidView
- RPC 框架設計RPC框架
- 基於ArkUI框架開發-ImageKnife渲染層重構UI框架
- 基於ArkUI框架開發——圖片模糊處理的實現UI框架
- 谷歌程式設計師有哪些高效的程式設計習慣?谷歌程式設計師
- 高效設計一個LRU
- 高效能是設計出來的
- 高效能 Java 框架。Solon v1.12.3 釋出(春節前兮的最後更)Java框架
- 如何快速體驗鴻蒙全新宣告式UI框架ArkUI?鴻蒙UI框架
- Java程式設計師必備:微服務+開源框架+架構基礎+高效能架構+設計模式Java程式設計師微服務框架架構設計模式
- RPC框架的可靠性設計RPC框架
- 讓 json 解析更簡單高效的 GJSONJSON
- 高效程式設計師的七個習慣程式設計師
- MySQL | 05 如何設計高效能的索引?MySql索引
- 高效能佇列設計佇列
- 高效前端程式設計實踐前端程式設計
- 如何高效管理設計交付,提升設計團隊效率?
- 五種Java程式設計高效程式設計方法 - BablaJava程式設計
- 遊戲設計分析:框架設定的好處遊戲設計框架
- 如何比設計更懂設計-做好前端錯誤提示前端
- 如何設計一個更通用的查詢介面
- Dubbo框架的1個核心設計點框架
- 如何設計一個高效能的圖 Schema
- 程式設計師的macOS系列:高效Alfred進階程式設計師MacAlfred
- 如何設計出高可用、高效能的介面
- 元件/框架設計原則元件框架
- dubbo框架設計學習框架
- loc框架設計原則框架
- 10個高效的Python爬蟲框架Python爬蟲框架