日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

華為自研的前端框架是什么樣的?

來源: 責編: 時間:2023-12-04 17:27:10 281觀看
導讀大家好,我卡頌。最近,華為開源了一款前端框架 —— openInula[1]。根據官網提供的信息,這款框架有3大核心能力:響應式API兼容ReactAPI官方提供6大核心組件并且,在官方宣傳視頻里提到 —— 這是款「大模型驅動」的「智能框

AJY28資訊網——每日最新資訊28at.com

大家好,我卡頌。AJY28資訊網——每日最新資訊28at.com

最近,華為開源了一款前端框架 —— openInula[1]。根據官網提供的信息,這款框架有3大核心能力:AJY28資訊網——每日最新資訊28at.com

響應式API

AJY28資訊網——每日最新資訊28at.com

兼容ReactAPI

AJY28資訊網——每日最新資訊28at.com

官方提供6大核心組件

AJY28資訊網——每日最新資訊28at.com

并且,在官方宣傳視頻里提到 —— 這是款「大模型驅動」的「智能框架」。AJY28資訊網——每日最新資訊28at.com

那么,這究竟是款什么樣的前端框架呢?我在第一時間體驗了Demo,閱讀了框架源碼,并采訪了框架核心開發者。本文將包括兩部分內容:AJY28資訊網——每日最新資訊28at.com

  • 對框架核心開發者陳超濤的采訪
  • 卡頌作為一個老前端,閱讀框架源碼后的一些分析

采訪核心開發者

開發Inula的初衷是?

回答:AJY28資訊網——每日最新資訊28at.com

華為內部對于業務中強依賴的軟件,考慮到競爭力,,會開發一個內部使用的版本。AJY28資訊網——每日最新資訊28at.com

Inula在華為內部,從立項到現在兩年多,基本替換了公司內絕大部分React項目。AJY28資訊網——每日最新資訊28at.com

卡頌補充背景知識:Inula兼容React 95% API,最初開發的目的就是為了替換華為內部使用的React。為了方便理解,你可以將Inula類比于華為內部的ReactAJY28資訊網——每日最新資訊28at.com

為什么開源?

回答:AJY28資訊網——每日最新資訊28at.com

華為對于「自研軟件」的公司策略,只要是公司內部做的,覺得還ok的自研都會開源。AJY28資訊網——每日最新資訊28at.com

接下來的提問涉及到官網宣傳的內容AJY28資訊網——每日最新資訊28at.com

宣傳片提到的大模型賦能、智能框架是什么意思?

回答:AJY28資訊網——每日最新資訊28at.com

這主要是Inula團隊與其他外部團隊在AI、低代碼方向的一些探索。比如:AJY28資訊網——每日最新資訊28at.com

  • 團隊與上海交大的一個團隊在探索「大模型賦能chrome調試業務代碼」方面有些合作,目的是為了「自動定位問題」
  • 團隊與華為內部的「大模型編輯器」團隊合作,探索「框架與編輯器定制」可能性

以上還都屬于探索階段。AJY28資訊網——每日最新資訊28at.com

Inula未來有明確的發展方向么?

回答:AJY28資訊網——每日最新資訊28at.com

團隊正在探索引入「響應式API」,相比于「React的虛擬DOM」方案,響應式API能夠提高運行時性能。24年可能會從Vue composition API中尋求些借鑒。AJY28資訊網——每日最新資訊28at.com

新的發展方向會在項目倉庫以RFC的形式展開。AJY28資訊網——每日最新資訊28at.com

補充:RFC是「Request for Comments」的縮寫。這是一種協作模式,通常用于提出新的特性、規范或者改變現有的一些規則。RFC的目的是收集不同的意見和反饋,以便在最終確定一個決策前,考慮盡可能多的觀點和影響。AJY28資訊網——每日最新資訊28at.com

為什么要自研核心組件而不用社區成熟方案?

卡頌補充:所謂「核心組件」,是指狀態管理、路由、國際化、請求庫、腳手架這樣的框架生態相關的庫。既然Inula兼容React,為什么不直接用React生態的成熟產品,而要自研呢?畢竟,這些庫是沒有軟件風險的。AJY28資訊網——每日最新資訊28at.com

AJY28資訊網——每日最新資訊28at.com

回答:AJY28資訊網——每日最新資訊28at.com

主要還是豐富Inula生態,根據社區優秀的庫總結一套Inula官方推薦的最佳實踐。至于開發者怎么選擇,我們并不強求。AJY28資訊網——每日最新資訊28at.com

卡頌的分析

以上是我對Inula核心開發者陳超濤的采訪。下面是我看了Inula源碼后的一些分析。AJY28資訊網——每日最新資訊28at.com

要分析一款前端框架,最重要的是明白他是如何更新視圖的?這里我選擇了兩種觸發時機來分析:AJY28資訊網——每日最新資訊28at.com

首次渲染

觸發的方式類似如下:AJY28資訊網——每日最新資訊28at.com

Inula.render(<App />, document.getElementById("root"));

執行useState的更新方法觸發更新

觸發的方式類似如下:AJY28資訊網——每日最新資訊28at.com

function App() {  const [num, update] = useState(0);  // 觸發更新  update(xxx);  // ...}

順著調用棧往下看,他們都會執行兩步操作:AJY28資訊網——每日最新資訊28at.com

  • 創建名為update的數據結構
  • 執行launchUpdateFromVNode方法

比如這是首屏渲染時:AJY28資訊網——每日最新資訊28at.com

AJY28資訊網——每日最新資訊28at.com

這是useState更新方法執行時:AJY28資訊網——每日最新資訊28at.com

AJY28資訊網——每日最新資訊28at.com

launchUpdateFromVNode方法會向上遍歷到根結點(源碼中遍歷的節點叫VNode),再從根節點開始遍歷樹。由此可以判斷,Inula的更新機制與React類似。AJY28資訊網——每日最新資訊28at.com

所有主流框架在觸發更新后,都不會立刻執行更新,中間還有個調度流程。這個流程的存在是為了解決:AJY28資訊網——每日最新資訊28at.com

  • 哪些更新應該被優先執行?
  • 是否有些更新是冗余的,需要合并在一塊執行?

在Vue中,更新會在微任務中被調度并統一執行,在React中,同時存在微任務(promise)與宏任務(MessageChannel)的調度模式。AJY28資訊網——每日最新資訊28at.com

在Inula中,存在宏任務的調度模式 —— 當宿主環境支持MessageChannel時會使用它,不支持則使用setTimeout調度:AJY28資訊網——每日最新資訊28at.com

AJY28資訊網——每日最新資訊28at.com

同時,與這套調度機制配套的還有個簡單的優先級算法 —— 存在兩種優先級,其中:AJY28資訊網——每日最新資訊28at.com

  • ImmediatePriority:對應正常情況觸發的更新。
  • NormalPriority:對應useEffect回調。

每個更新會根據「更新的ID」(一個自增的數字)+ 「優先級對應的數字」 作為優先級隊列中的排序依據,按順序執行。AJY28資訊網——每日最新資訊28at.com

假設先后觸發2次更新,優先級分別是ImmediatePriority與NormalPriority,那么他們的排序依據分別是:AJY28資訊網——每日最新資訊28at.com

  • 100(假設當前ID到100了)- 1(ImmediatePriority對應-1) = 99。
  • 101(100自增到101)+ 10000(NormalPriority對應10000)= 10101。

99 < 10101,所以前者會先執行。AJY28資訊網——每日最新資訊28at.com

需要注意的是,Inula中對更新優先級的控制粒度沒有React并發更新細,比如對于如下代碼:AJY28資訊網——每日最新資訊28at.com

useEffect(function cb() {  update(xxx);  update(yyy);})

在React中,控制的是每個update對應優先級。在Inula中,控制的是cb回調函數與其他「更新所在回調函數」之間的執行順序。AJY28資訊網——每日最新資訊28at.com

這意味著本質來說,Inula中觸發的所有更新都是「同步更新」,不存在React并發更新中「高優先級更新打斷低優先級更新」的情況。AJY28資訊網——每日最新資訊28at.com

這也解釋了為什么Inula兼容 95% 的React API,剩下 5% 就是「并發更新相關API」(比如useTransition、useDeferredvalue)。AJY28資訊網——每日最新資訊28at.com

現在我們已經知道Inula的更新方式類似React,那么官網提到的「響應式API」該如何實現呢?這里存在三條路徑:AJY28資訊網——每日最新資訊28at.com

  • 一套外掛的響應式系統,類似React與Mobx的關系。
  • 內部同時存在兩套更新系統(當前一套,響應式一套),調用不同的API使用不同的系統。
  • 重構內部系統為響應式系統,通過編譯手段,使所有API(包括當前的React API與未來的類 Vue Composition API)都走這套系統。

AJY28資訊網——每日最新資訊28at.com

其中第一條路徑比較簡單,第二條路徑應該還沒框架使用,第三條路徑想象空間最大。不知道Inula未來會如何發展。AJY28資訊網——每日最新資訊28at.com

總結

當前,Inula是一款「類React的框架」,功能上可以類比為「React并發更新之前的版本」。AJY28資訊網——每日最新資訊28at.com

下一步,Inula會引入「響應式API」,目的是提高渲染效率。AJY28資訊網——每日最新資訊28at.com

對于未來的發展,主要圍繞在:AJY28資訊網——每日最新資訊28at.com

  • 探索類 Vue Composition API的可能性
  • 迭代官方核心生態庫

對于華為出的這款前端框架,你怎么看?AJY28資訊網——每日最新資訊28at.com

參考資料

[1]openInula:https://www.openinula/。AJY28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-37690-0.html華為自研的前端框架是什么樣的?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 前端開發者如何消除代碼中的技術債務

下一篇: WorkManager讓開發者輕松地管理后臺任務調度和執行的庫

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 海原县| 海丰县| 察隅县| 尚义县| 临湘市| 怀柔区| 临泽县| 湘西| 通道| 梁山县| 长阳| 容城县| 沾化县| 靖远县| 龙州县| 宜州市| 亚东县| 张家港市| 离岛区| 南陵县| 南阳市| 梧州市| 金川县| 景谷| 宁蒗| 潮安县| 根河市| 应用必备| 时尚| 乌鲁木齐县| 通渭县| 澄江县| 定安县| 扎鲁特旗| 高要市| 西乌珠穆沁旗| 绍兴市| 北海市| 峨眉山市| 清徐县| 招远市|