flutter與fuchsia簡介

flutter是什么

最近同事分享了一篇flutter操作系統(tǒng)慕淡,感覺不錯,自己總結(jié)了一下树姨,發(fā)上來給大家一個參考冤今,F(xiàn)lutter 是 Google 開發(fā)的一套全新的跨平臺闺兢、開源 UI 框架,支持 iOS戏罢、Android 系統(tǒng)開發(fā)屋谭,它也是構(gòu)建未來的 Google Fuchsia 系統(tǒng)應(yīng)用的主要方式。在全世界龟糕,F(xiàn)lutter 正在 被越來越多的開發(fā)者和組織使用桐磁。

Fuchsia是什么

Fuchsia,是由Google公司開發(fā)的繼Android和Chrome OS之后的第三個系統(tǒng)翩蘸,已在Github中公開的部分源碼可以得知所意。Google對于Fuchsia的說明是“Pink(粉紅)+Purple(紫色)=Fuchsia(燈籠海棠,一個新的操作系統(tǒng))
官方文檔地址 https://github.com/FuchsiaOS/FuchsiaOS-docs-zh_CN

Fuchsia 由 Google 公司開發(fā)的繼 Android 和 Chrome OS 之后的第三個系統(tǒng)催首,它不同于安卓使用的 Linux 內(nèi)核扶踊,而是采用的比較新的 Zircon 的內(nèi)核 。該系統(tǒng)與當下 Android 相比郎任,無論是存儲器還是內(nèi)存之類的硬件要求都大幅降低秧耗。Flutter 引擎+Dart 語言將可能會成為 Fuchsia 系統(tǒng)主要的 UI 開發(fā)框架。

順便所以下fuchsia

為什么要發(fā)布這個操作系統(tǒng)舶治?

  1. google認為linux不具有穩(wěn)定的驅(qū)動街口分井,F(xiàn)uchsia希望提供這樣一個穩(wěn)定的驅(qū)動接口,讓各個廠商根據(jù)這個接口自行開發(fā)和維護驅(qū)動霉猛,也是google對=掌控物聯(lián)網(wǎng)的一個決心尺锚。
  2. 雖然現(xiàn)在android的手機基本不會卡頓,但是現(xiàn)在的android手機對內(nèi)存要求還是不低惜浅,而
    Magenta是微內(nèi)核瘫辩,無論是對存儲還是內(nèi)存之類的硬件要求都大幅降低,
  3. 操作系統(tǒng)的擴展坛悉,該操作系統(tǒng)可擴展到智能手機和桌面計算機上
  4. 該操作系統(tǒng)是支持Dart和flutter框架開發(fā)的伐厌,F(xiàn)lutter 是 Google 用以幫助開發(fā)者在 Android 和 iOS 兩個平臺,同時開發(fā)高質(zhì)量原生應(yīng)用的全新移動 UI 框架裸影。dart被直接編譯成原生代碼運行在硬件上挣轨,所以比android要快一點

fuchsia的內(nèi)核

不同于android使用的linux內(nèi)核,而是使用一種全新的內(nèi)核Zircon轩猩,那么這個內(nèi)核與linux有什么區(qū)別呢卷扮?

linux的驅(qū)動其實都是文件荡澎,但Magenta不是,F(xiàn)uchsia沒有傳統(tǒng)的“根文件系統(tǒng)”的概念画饥,各種文件系統(tǒng)衔瓮、設(shè)備驅(qū)動、服務(wù)都作為一個進程抖甘,讀寫文件就變成了先跟文件系統(tǒng)進程建立一個通道,所有的操作都是異步

因為Zircon是微內(nèi)核
微內(nèi)核與單體內(nèi)核不同葫慎,微內(nèi)核只是將OS中最核心的功能加入內(nèi)核衔彻,包括IPC通信、地址空間分配和基本的調(diào)度偷办,這些東西處在內(nèi)核態(tài)運行艰额。
而其他功能如設(shè)備驅(qū)動、文件系統(tǒng)椒涯、存儲管理柄沮、網(wǎng)絡(luò)等作為一個個處于用戶態(tài)的進程而向外提供某種服務(wù)來實現(xiàn),而且這些處于用戶態(tài)的進程可以針對某些特定的應(yīng)用和環(huán)境需求進行定制

Flutter 特點以及優(yōu)勢

提高開發(fā)效率

  • 跨平臺 同一份代碼開發(fā) iOS 和 Android 節(jié)省資源
  • 用更少的代碼做更多的事情 采用 dart 語言簡潔高效
  • 輕松迭代
    - 在應(yīng)用程序運行時更改代碼并重新加載(熱重載)
    - 修復(fù)崩潰并繼續(xù)從應(yīng)用程序停止的地方進行調(diào)試

創(chuàng)建美觀废岂,高度定制的用戶體驗

  • 受益于使用 Flutter 框架提供的豐富的 Material Design 和 Cupertino(iOS 風 格)的 widget
  • 原生性能使用 skia2D 渲染引擎祖搓,既不使用 WebView,也不使用操作系統(tǒng) 的原生控件湖苞,保證在各平臺上 UI 的一致性拯欧,而且也可以避免對原生控件依賴 而帶來的限制及高昂的維護成本,實現(xiàn)定制财骨、美觀镐作、品牌驅(qū)動的設(shè)計

一切皆為控件

Widget 是 Flutter 應(yīng)用程序用戶界面的基本構(gòu)建塊。每個 Widget 都是用戶界面一部分的不可變聲明隆箩。 與其他將視圖该贾、控制器、布局和其他屬性分離的框架不同捌臊,F(xiàn)lutter 具有一致的統(tǒng)一對象模型:widget杨蛋。

核心原則

  • Flutter 包括一個現(xiàn)代的響應(yīng)式框架(Framework 開源)、一個2D渲染引擎娃属、現(xiàn)成的 widget 和開發(fā)工具六荒。這些組件可以幫助您快速地設(shè)計、構(gòu)建矾端、測試和調(diào)試應(yīng)用程序掏击。

關(guān)于跨平臺框架

跨平臺工具包歷來采用以下兩種方法之一:
1.將 Web 視圖包裝在本機應(yīng)用程序中,并將應(yīng)用程序構(gòu)建為網(wǎng)頁秩铆。
2.包裝原生平臺控件并提供對它們的一些跨平臺抽象砚亭。
第一種相關(guān)的框架有:Ruby on Rails灯变, Cordova ,Instant App...

優(yōu)勢:一套 HTML5APP 即可同時適用 iOS捅膘、Android 平臺添祸,適配性和體驗較好。版本服務(wù)器更新快寻仗,技術(shù)難度較低刃泌,開發(fā)工作量小,開發(fā)成本低署尤。

劣勢:用戶體驗大幅落后于原生 APP耙替,操作的流暢度,程序的執(zhí)行效率曹体,與原生 APP都有較大差距; HTML5 APP 受網(wǎng)速的影響較大俗扇,在網(wǎng)絡(luò)情況較差的情況下,HTML5 APP 往往連打開都困難箕别。

第二種相關(guān)的框架有:RN铜幽, Weex 等。

RN 可以最大限度的接近原生框架串稀,能夠在 Javascript 和 React 的基礎(chǔ)上獲得完全一致的開發(fā)體驗;構(gòu)建原生 App除抛,僅需學習一次,編寫任何平臺;支持線上動態(tài)性厨诸,可有效避免頻繁更新版本镶殷。缺點:是采用 Javascript 開發(fā),需學 React微酬,成本高;需要JavaScript 橋接器绘趋,實現(xiàn) JS 到 Native 轉(zhuǎn)化,性能耗損大;必須不同平臺寫兩套代碼颗管,依賴暴露的接口陷遮。

weex 具有完美兼顧性能與動態(tài)性,讓移動開發(fā)者通過簡捷的前端語法寫出 Native 級別的性能體驗垦江,并支持 iOS帽馋、Android、YunOS 及 web 等多端部署比吭。缺點:控件太少绽族,基本只能實現(xiàn)最基本的效果;上手難度大。

Flutter 采取不同的方法衩藤。Flutter 既不使用 WebView吧慢,也不使用操作系統(tǒng)的原生控件。Flutter 使用 Skia 作為其 2D 渲染引擎赏表。該框架建立在 Skia 圖形庫上检诗,提供實際呈現(xiàn)的部件匈仗,而不僅僅是原生控件的包裝。

對比RN:Flutter 采用 Dart 開發(fā),可直接編譯成 Native 代碼逢慌,簡單易學悠轩,又能夠像web 一樣靈活,同時提供流暢的性能攻泼。自帶 UI 組件和渲染器火架,僅依賴系統(tǒng)提供的 Canvas無橋接耗損)。
Flutter 附帶的部件庫以及開源部件使其成為一個功能豐富的平臺忙菠。簡單地說距潘,F(xiàn)lutter是最接近移動開發(fā)人員用于跨平臺開發(fā)的理想平臺,靈活性只搁、性能幾乎毫無妥協(xié)。
暫不支持線上動態(tài)性俭尖,目前 Android 支持氢惋,ios 不支持。

Flutter 框架

Flutter 框架是一個分層的結(jié)構(gòu)稽犁,每個層都建立在前一層之上焰望。


屏幕快照 2019-03-22 下午3.41.45.png

Flutter Framework:純 Dart 實現(xiàn) SDK

  • 底下兩層:底層 UI 庫,提供動畫已亥、手勢及繪制能力
  • Rendering層:構(gòu)建 UI 樹熊赖,當 UI 樹有變化時,會計算出有變化的部分虑椎,然后更新UI 樹震鹉,最終將 UI 樹繪制到屏幕上
  • Widgets 層:基礎(chǔ)組件庫,提供了 Material 和 Cupertino 兩種視覺風格的組件庫

Flutter Engine:純 C++實現(xiàn)的 SDK

  • Skia:渲染引擎 開源的二維圖形庫
  • Dart:Dart 運行時
  • Text:文字排版引擎
    Android 平臺捆姜,F(xiàn)lutter 引擎的 C/C++代碼是由 NDK 編譯传趾,iOS 平臺,則是由 LLVM 編譯泥技,兩個平臺的 Dart 代碼都是 AOT 編譯為本地代碼浆兰,F(xiàn)lutter 應(yīng)用程序使用本機指令集運行。Flutter 正是是通過使用相同的渲染器珊豹、框架和一組 widget簸呈,來同時構(gòu)建 iOS 和 Android 應(yīng)用,而無需維護兩套獨立的代碼庫店茶。

Flutter 渲染機制

Flutter 布局渲染的整體流程

當需要更新UI的時候蜕便,F(xiàn)ramework通知Engine,Engine 會等到下個 Vsync 信號到達的時候忽妒,會通知Framework玩裙,然后Framework 會進行 animations, build兼贸,layout,compositing吃溅,paint溶诞,最后生成 layer 提交給 Engine。Engine 會把 layer 進行組合决侈,生成紋理螺垢,最后通過 Open Gl 接口提交數(shù)據(jù)給 GPU, GPU 經(jīng)過處理后在顯示器上面顯示赖歌。整個流程如下圖:

屏幕快照 2019-03-22 下午3.37.13.png
屏幕快照 2019-03-22 下午3.37.19.png

從流程圖可以看出來枉圃,只有當有 UI 更新的才需要重新渲染,當然程序啟動的是默認

虛擬 DOM 技術(shù)

  • Widget 樹:就是我們的 UI 組件樹庐冯,但這個只是一種描述信息孽亲,渲染引擎是不認識的
  • RenderObject 樹:這才是渲染引擎真的認識的,我們需要將 Widget 轉(zhuǎn)化為能用來渲染視圖的 Render Object
  • 虛擬 DOM 解決了一個重要的矛盾:就是 DOM 操作的性能損耗與頻繁進行局部DOM 操作的矛盾
  • 沒用虛擬 DOM 之前:DOM 會在每一次元素更新到來之時渲染一次 DOM
  • 用了虛擬 DOM 之后:虛擬 DOM 會先匯總各個元素的更新情況展父,通過 diff 算法計算出與原來 DOM 樹的差異返劲,最后通過一次 DOM 更新解決。

Flutter 編譯機制

Flutter 之所以采用 Dart 語言栖茉,其中很重要的一點就是因為 Dart 同時支持 JIT 和 AOT兩種編譯方式

基于 JIT 的快速開發(fā)周期(熱重載):Flutter 在開發(fā)階段采用篮绿,采用 JIT 模式,這樣就避免了每次改動都要進行編譯吕漂,極大的節(jié)省了開發(fā)時間;

基于 AOT 的發(fā)布包: Flutter 在發(fā)布時可以通過 AOT 生成高效的 ARM 代碼以保證應(yīng)用性能亲配。而 JavaScript 則不具有這個能力。

JIT惶凝,Just-in-time,動態(tài)(即時)編譯吼虎,邊運行邊編譯;
AOT,Ahead Of Time梨睁,指運行前編譯;

Flutter 為什么選擇 Dart

Flutter 在四個主要維度進行了評估鲸睛,并考慮了框架作者、開發(fā)人員和最終用戶的需求等因素坡贺。發(fā)現(xiàn)不同的語言在不同的層面符合一部分需求官辈,但 Dart 在所有評估維度上得分都很高,并且符合我們的所有要求和標準遍坟。
Dart 運行時和編譯器支持 Flutter 的兩個關(guān)鍵特性的組合:基于 JIT 的快速開發(fā)周期:允許使用類型的語言進行形狀更改和有狀態(tài)的熱重載;以及 AOT 編譯器拳亿,可生成高效的 ARM 代碼,可以快速啟動并擁有可預(yù)測的生產(chǎn)部署性能愿伴。
此外肺魁,我們有機會與 Dart 社區(qū)密切合作,Dart 社區(qū)正在積極投入資源改進 Dart 在Flutter 中的使用隔节。例如鹅经,當我們采用 Dart 時寂呛,該語言沒有提供生成原生二進制文件的工具鏈(這對于實現(xiàn)可預(yù)測的高性能是很有幫助的),但是現(xiàn)在實現(xiàn)了瘾晃,因為 Dart 團隊為Flutter 構(gòu)建了它贷痪。同樣,Dart VM 之前已經(jīng)針對吞吐量進行了優(yōu)化蹦误,但團隊現(xiàn)在正在優(yōu)化VM 的延遲時間劫拢,這對于 Flutter 的工作負載更為重要。

Dart 在以下主要標準上得到高分:

  • 開發(fā)人員的效率强胰。Flutter 的主要價值主張之一是通過讓開發(fā)人員使用相同的代碼庫為iOS 和 Android 創(chuàng)建應(yīng)用程序舱沧,從而節(jié)省了工程資源。使用高效的語言可以進一步加速開發(fā)周期偶洋,并使 Flutter 更具吸引力熟吏。這對我們的 framework 團隊和開發(fā)人員都非常重要。大部分 Flutter 功能都是用 Dart 實現(xiàn)玄窝,因此我們需要在 10 萬行代碼時能保持高效的而不會犧牲 framework 和 widget 的可讀性分俯。
  • 面向?qū)ο蟆km然我們可以使用非面向?qū)ο蟮恼Z言哆料,但這意味著要重新解決幾個難題。另外吗铐,絕大多數(shù)開發(fā)人員都具有面向?qū)ο箝_發(fā)的經(jīng)驗东亦,因此更容易學習如何使用 Flutter進行開發(fā)。
  • 可預(yù)測唬渗,高性能典阵。借助 Flutter,我們希望使開發(fā)人員能夠快速創(chuàng)建流暢的用戶體驗镊逝。為了實現(xiàn)這一點壮啊,我們需要能夠在每個動畫幀中運行大量的代碼。這意味著我們需要一種既能提供高性能又能提供可預(yù)測性能的語言撑蒜,而不會出現(xiàn)會導致丟幀的周期性暫停歹啼。
  • 快速內(nèi)存分配。Flutter 框架使用函數(shù)式流座菠,它很大程度上依賴于底層的內(nèi)存分配器狸眼,從而有效地處理小的、短期的內(nèi)存分配會非常重要浴滴,所以在缺乏此功能的語言中 Flutter無法有效地工作拓萌。

參考網(wǎng)址:

https://flutterchina.club/ https://juejin.im/tag/Flutter https://juejin.im/post/5c4e6dc66fb9a049eb3c516a https://www.colabug.com/4164166.html http://www.reibang.com/p/5aa4f2a7ed0e http://www.reibang.com/p/d41952e51120 http://www.reibang.com/p/9e5f4c81cc7d
https://www.zhihu.com/question/50156415/answer/280947564?utm_source=wechat_session&utm_medium=social

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市升略,隨后出現(xiàn)的幾起案子微王,更是在濱河造成了極大的恐慌屡限,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炕倘,死亡現(xiàn)場離奇詭異钧大,居然都是意外死亡,警方通過查閱死者的電腦和手機激才,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門拓型,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瘸恼,你說我怎么就攤上這事劣挫。” “怎么了东帅?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵压固,是天一觀的道長。 經(jīng)常有香客問我靠闭,道長帐我,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任愧膀,我火速辦了婚禮拦键,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘檩淋。我一直安慰自己芬为,他們只是感情好,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布蟀悦。 她就那樣靜靜地躺著媚朦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪日戈。 梳的紋絲不亂的頭發(fā)上询张,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機與錄音浙炼,去河邊找鬼份氧。 笑死,一個胖子當著我的面吹牛弯屈,可吹牛的內(nèi)容都是我干的半火。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼季俩,長吁一口氣:“原來是場噩夢啊……” “哼钮糖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤店归,失蹤者是張志新(化名)和其女友劉穎阎抒,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體消痛,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡且叁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了秩伞。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逞带。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖纱新,靈堂內(nèi)的尸體忽然破棺而出展氓,到底是詐尸還是另有隱情,我是刑警寧澤脸爱,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布遇汞,位于F島的核電站,受9級特大地震影響簿废,放射性物質(zhì)發(fā)生泄漏空入。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一族檬、第九天 我趴在偏房一處隱蔽的房頂上張望歪赢。 院中可真熱鬧,春花似錦单料、人聲如沸轨淌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至盟步,卻和暖如春藏斩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背却盘。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工狰域, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人黄橘。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓兆览,卻偏偏與公主長得像,于是被迫代替她去往敵國和親塞关。 傳聞我的和親對象是個殘疾皇子抬探,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容