精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

掘力計劃第 20 期:孫哲-Flutter 動態(tài)方案 Fair 原理與實踐

開發(fā) 前端
在掘力計劃系列活動第20場, 58 集團-房產(chǎn)事業(yè)部跨端技術(shù)負責人、移動端架構(gòu)師孫哲為我們分享 Flutter 動態(tài)方案 Fair 原理與實踐。

在掘力計劃系列活動第20場, 58 集團-房產(chǎn)事業(yè)部跨端技術(shù)負責人、移動端架構(gòu)師孫哲為我們分享 Flutter 動態(tài)方案 Fair 原理與實踐。

摘要

跨平臺技術(shù)對整體大前端的研發(fā)效率提升明顯,58 集團對跨平臺方案同樣有著強烈訴求。Flutter 相較于其它跨端技術(shù),在渲染效率和多端適配度上有非常大的優(yōu)勢,但其無法實現(xiàn)動態(tài)化更新,使得 Flutter 的發(fā)版成本較高。基于此背景,58 技術(shù)委員會推出了 Flutter 動態(tài)化開源項目—Fair。本次分享將對 Fair 進行一些介紹,講解 Fair 是如何實現(xiàn) Flutter 動態(tài)化以及使用 Fair 的一些最佳實踐。

1 Fair 背景介紹

近年來,跨平臺技術(shù)的迅速發(fā)展為移動端開發(fā)帶來了革命性的變化。以 React Native 和 Flutter 為代表的跨平臺技術(shù),極大地提升了前端開發(fā)者的工作效率。

58 同城作為房產(chǎn)行業(yè)的龍頭企業(yè),其技術(shù)部門也在積極探索跨平臺技術(shù)的應用。經(jīng)過調(diào)研和實踐,58 選擇了 Flutter 作為主要的跨平臺開發(fā)方案。相較于 React Native 等方案,F(xiàn)lutter 在性能和適配性方面更占優(yōu)勢。

但是,F(xiàn)lutter 也存在一些短板。其中最主要的就是無法實現(xiàn)動態(tài)化更新。這導致每次功能修改都需要重新構(gòu)建發(fā)布,大大增加了發(fā)布成本。

為了解決這一痛點,58 技術(shù)委員會推出了開源項目 Fair,通過一系列工具鏈實現(xiàn)了 Flutter 頁面的動態(tài)化。

2 Fair 實現(xiàn)原理淺析

2.1 架構(gòu)設(shè)計

Fair 整體設(shè)計原則是要打造一個還是 Flutter 技術(shù)棧的、可通過市場審核的熱更新方案。所以整體架構(gòu)設(shè)計,是將 Dart 源文件轉(zhuǎn)譯成 DSL 通過下發(fā) JSON 和 JS 來分別實現(xiàn)布局動態(tài)化和邏輯動態(tài)化。

Fair 架構(gòu)圖

因此 Fair 的動態(tài)化方案就包含以下三個方面:

  1. 布局動態(tài)化
  2. 邏輯動態(tài)化
  3. 動態(tài)內(nèi)容通信

布局動態(tài)化通過自定義 DSL 語法,將 Flutter 頁面描述為可解析的 JSON 格式,然后在運行時動態(tài)加載解析,重建頁面布局。

邏輯動態(tài)化則是通過自定義的 Dart 轉(zhuǎn) JS 的編譯工具,將 Dart 中的業(yè)務(wù)邏輯抽取出來,編譯為 JS 格式,與頁面交互。

動態(tài)內(nèi)容通信是通過 FFI 和 method channel 搭建的 JSBridge,在 Dart 端與 JS 端建立了橋梁,讓兩端可以相互調(diào)用對方的方法。

2.2 布局動態(tài)化實現(xiàn)

布局動態(tài)化的實現(xiàn)主要分為三個步驟:

  1. 使用 Analyzer 庫解析 Dart 代碼生成抽象語法樹 AST
  2. 遍歷 AST,生成自定義的 JSON DSL 格式描述頁面結(jié)構(gòu)
  3. 運行時通過反射調(diào)用 flutter 組件構(gòu)建頁面

具體來說,F(xiàn)air 會解析 Dart 代碼,生成包含組件信息的 AST。然后根據(jù) AST 生成 JSON 格式的 DSL,比如:

JSON
{
"className": "Center",
"na": {
"child":"%(_buildText)"
},
"methodMap": {
"buildText": {
"className": "Text",
"pa" : [
"Hello World"
]
}
}
}

該 JSON 描述了一個 Center widget,child 屬性為一個 Text widget。

運行時,F(xiàn)air 通過 className 映射組件構(gòu)造函數(shù),通過反射調(diào)用該構(gòu)造函數(shù)即可動態(tài)構(gòu)建頁面布局。

再通過 Function.apply()方法動態(tài)運行映射出的方法返回 widget。

詳細解析可以查看:布局 DSL 生成原理

2.3 邏輯動態(tài)化實現(xiàn)

邏輯動態(tài)化同樣分三步:

  1. 分析 Dart 代碼,提取業(yè)務(wù)邏輯部分
  2. 自定義 Dart 轉(zhuǎn) JS 的編譯器,生成 JS 文件
  3. 頁面通過 JsChannel 與 JS 運行環(huán)境通信

Fair 會解析 Dart 代碼,提取所有的變量,方法等作為業(yè)務(wù)邏輯。然后通過自定義的編譯器,將這些邏輯轉(zhuǎn)換成 JS。

舉個例子:

Fair 中的 MVVM 依賴于 Flutter 原生模式,如上圖所示,JS 域的數(shù)據(jù)同步給 Dart 域,只需要在 JS 側(cè)調(diào)用熟悉的 setState 即可。當然這部分對使用 Fair 框架的開發(fā)者是無感知的,編譯工具幫我們完成了相關(guān)的轉(zhuǎn)換。原生代碼和生成的 JS 代碼,對比如下:

JavaScript
_incrementCounter: function _incrementCounter() {const __thiz__ = this;with (__thiz__) {setState('#FairKey#', function dummy() {
_counter++;});}},


Dart
void _incrementCounter() {
setState(() {
_counter++;
});
}

大家可以看到,除了 JS 簡化訪問域的 with 和通信目標對象需要的 FairKey,其他代碼差別并不大。

詳細解析可以查看:Fair 邏輯動態(tài)化架構(gòu)設(shè)計與實現(xiàn)

2.4 動態(tài)內(nèi)容通訊

js 與布局文件的通信,本質(zhì)上就是 js 與 dart 之間的通信,因為兩者都是以 native 平臺做依托,所以需要 native 作為消息的轉(zhuǎn)發(fā)器,負責消息的分發(fā)。

對于 dart 與 native 之間的通信,我們使用的是官方提供的 message-channel 與 dart:FFI。message-channel 主要有、BasicMessageChannel、MethodChannel、EventChannel,該通道主要用于異步通信,dart:FFI 是官方提供的直接調(diào)用 native c/c++代碼的工具,主要用于同步通信。

對于 native 與 js 之間的通信,我們則可以用注入方法的形式建立聯(lián)系,native 側(cè)注入本地方法,那么 js 則可以調(diào)用該方法發(fā)送消息并獲取結(jié)果值,而如果是 js 提供本地方法, 那 native 側(cè)可以執(zhí)行 js 中的方法獲取 js 發(fā)送的結(jié)果。

詳細解析可以查看:Fair 邏輯動態(tài)化通信實現(xiàn)

3 Fair 生態(tài)建設(shè)

為了更好地幫助開發(fā)者使用 Fair 實現(xiàn) Flutter 動態(tài)化,F(xiàn)air 項目組還開發(fā)了一系列輔助工具。

3.1 構(gòu)建工具

提供了命令行工具,在 Flutter 項目中通過簡單配置即可生成動態(tài)化代碼。

只需三步即可構(gòu)建 Flutter 動態(tài)化工程

獲取 faircli

JSON
dart pub global activate faircli

創(chuàng)建動態(tài)化工程

Dart
faircli create -n dynamic_project_name

dynamic_project_name: 動態(tài)化工程名

創(chuàng)建載體工程

Dart
faircli create -k carrier -n carrier_project_name

carrier_project_name: 載體工程名

3.2 模板插件


下載 Fair 模板插件,可以通過 idea 直接選擇模板頁面進行二次開發(fā)。

3.3 熱更新平臺

提供了開源的遠程更新平臺,可以在構(gòu)建后自動上傳編譯產(chǎn)物,進行云端更新。

熱更新平臺所有代碼也已開源,全部使用 dart 進行開發(fā),具體原理實現(xiàn)可推薦閱讀:Flutter + Dart 三端一體化動態(tài)化平臺實踐

4 Fair 落地實踐

Fair 目前在 58 同城內(nèi)部已經(jīng)有 10 多個 App 使用,覆蓋不同的業(yè)務(wù)場景。無論是整頁動態(tài)化還是卡片動態(tài)化都可以完美支持。

同時還開源了組件庫,提供常用的列表、導航等組件的動態(tài)化實現(xiàn),降低開發(fā)成本。

動態(tài)化后的頁面和原生頁面沒有明顯區(qū)別。

在性能方面,F(xiàn)air 對性能影響很小,接入前后平均幀率無影響。由于解析和引擎的影響,內(nèi)存和啟動時間方面會略有增加,但在可接受范圍內(nèi)。

具體使用和實踐可參考:Flutter 熱更新 Fair 真。體驗

5 總結(jié)與規(guī)劃

Fair 為 Flutter 提供了動態(tài)化能力,可以極大降低 Flutter 的發(fā)布成本。同時還提供了一整套從開發(fā)到發(fā)布的解決方案。

未來計劃會繼續(xù)完善組件庫,增加對 Flutter 狀態(tài)管理框架的支持,讓 Fair 更加簡單、穩(wěn)定。

歡迎大家使用 Fair,也歡迎大家為我們點亮 star
Github 地址:github.com/wuba/fair
Fair 官網(wǎng):fair.58.com

責任編輯:鳶瑋 來源: 掘金
相關(guān)推薦

2023-08-03 10:25:49

Flutter

2023-08-01 09:09:05

崔紅保跨平臺開發(fā)

2023-08-04 10:46:57

掘力計劃前端Pake

2023-08-18 17:25:45

掘力計劃大語言模型

2023-08-18 17:24:09

掘力計劃大語言模型

2023-08-17 10:29:28

掘力計劃大語言模型

2023-08-16 18:23:28

掘力計劃網(wǎng)易有道大模型

2010-02-03 09:01:01

Java動態(tài)模塊化

2017-03-22 15:27:49

信息化CIO智能制造

2022-05-11 12:52:25

框架實踐應用

2017-08-22 21:55:18

SQL語法離散性

2016-11-30 16:33:59

2020-05-22 09:12:46

HTTP3網(wǎng)絡(luò)協(xié)議

2014-01-13 17:12:38

IT技術(shù)周刊

2011-12-30 01:10:09

點贊
收藏

51CTO技術(shù)棧公眾號

午夜av一区| 男人天堂亚洲天堂| 日本中文一区二区三区| xxxxx91麻豆| 色哟哟无码精品一区二区三区| 美女扒开腿让男人桶爽久久软| 欧美激情中文不卡| 国产成人免费电影| 在线观看视频二区| 99精品国产一区二区青青牛奶| 中文字幕欧美日韩在线| 亚洲男女在线观看| 日韩第二十一页| 欧美日韩在线免费| www.欧美黄色| av电影在线观看| 成人av资源站| 成人在线观看视频网站| 在线观看免费av片| 午夜日韩电影| 日韩有码在线视频| 日韩精品电影一区二区| 最新国产精品精品视频| 欧美日韩免费观看一区二区三区| 国产又粗又大又爽的视频| 美丽的姑娘在线观看免费动漫| 国产伦精一区二区三区| 国产精品美腿一区在线看| 日本中文字幕免费观看| 欧美黄色免费| 久久久久www| 国产一区二区三区四区在线| 欧洲亚洲一区二区三区| 欧美大片一区二区三区| xxww在线观看| 欧美与亚洲与日本直播| 日韩欧美在线网址| 人人妻人人添人人爽欧美一区| 影音先锋男人资源在线| 亚洲欧洲另类国产综合| 视频一区二区三| 久蕉在线视频| 久久久不卡影院| 国产精品一区视频| 欧性猛交ⅹxxx乱大交| 国产伦精品一区二区三区视频青涩 | 亚洲人成精品久久久久| 亚洲福利av在线| 在线观看麻豆蜜桃| 国产精品久久久久永久免费观看| 欧美一区二区三区成人久久片| 天堂а在线中文在线无限看推荐| 成人国产一区二区三区精品| 俄罗斯精品一区二区三区| 成人高潮片免费视频| 国模少妇一区二区三区| 亚洲aⅴ日韩av电影在线观看| 91精品视频免费在线观看| 久久综合综合久久综合| 国产欧美一区二区三区四区| 一区二区久久精品66国产精品| 麻豆精品视频在线观看| 91热精品视频| 草草视频在线播放| 成人免费av网站| 国严精品久久久久久亚洲影视| 手机看片福利永久| 久久久久国产一区二区三区四区| 日韩片电影在线免费观看| 午夜视频在线| 亚洲精品免费在线观看| 今天免费高清在线观看国语| 丝袜美腿av在线| 天天色天天操综合| 妞干网在线免费视频| 精品福利在线| 日韩午夜三级在线| 天堂久久久久久| blacked蜜桃精品一区| 精品国内产的精品视频在线观看| 婷婷在线精品视频| 99riav1国产精品视频| 国产成人涩涩涩视频在线观看| 18国产免费视频| 国产一区二区三区四区在线观看| ts人妖另类在线| 日本护士...精品国| 日本一区二区免费在线| 成人短视频在线观看免费| 国产中文在线播放| 欧美久久久久久久久久| 亚洲色偷偷色噜噜狠狠99网| 精品国产精品国产偷麻豆| 久久亚洲精品国产亚洲老地址| 日韩欧美国产亚洲| 精品一区二区三区免费视频| 国产亚洲欧美一区二区三区| 浮生影视网在线观看免费| 亚洲激情六月丁香| 青青草av网站| 国产精品天天看天天狠| 中文字幕自拍vr一区二区三区| 免费在线黄色片| 日韩黄色免费网站| 国产精品一区二区三区四区五区 | 国产精品综合久久| 国产日韩专区在线| 五月婷婷六月色| 一区二区中文视频| 国产欧美在线一区| 深夜福利一区| 中文欧美在线视频| 日韩av女优在线观看| 久久国产欧美日韩精品| 鲁丝片一区二区三区| 97超碰资源站在线观看| 日本乱人伦一区| 北岛玲一区二区| 五月精品视频| 国产精品久久久久久久久| 日韩永久免费视频| 亚洲一区二区三区爽爽爽爽爽| 欧美日韩亚洲自拍| 希岛爱理av免费一区二区| 久久99精品视频一区97| 亚洲一区 中文字幕| 久久久91精品国产一区二区三区| 久久99久久99精品| 欧美日本三级| 久久婷婷国产麻豆91天堂| 亚洲 小说区 图片区| 久久美女高清视频| 免费无码不卡视频在线观看| 大奶在线精品| 欧美丰满老妇厨房牲生活| 国产女人18毛片水18精| 综合久久综合久久| 中文字幕 日韩 欧美| 日韩国产在线| 国产日产欧美精品| 日本视频在线播放| 精品视频一区三区九区| 人妻精品久久久久中文| 日韩在线一区二区| 日韩中文一区二区三区| 欧美精品高清| 一区二区三区视频免费| 中文字幕日日夜夜| 中文字幕精品一区二区三区精品| 国产精品乱码久久久久| 日韩av大片| 成人激情av在线| fc2ppv国产精品久久| 欧美一区二区三区四区视频| 婷婷伊人五月天| 久久狠狠亚洲综合| 日本美女爱爱视频| 极品束缚调教一区二区网站| 国语对白做受69| 亚洲色大成网站www| 色综合久久中文综合久久97| 西西444www无码大胆| 奇米在线7777在线精品| 在线成人性视频| 久久国产精品美女| 欧美精品videosex极品1| 图片区 小说区 区 亚洲五月| 精品久久久中文| 成人国产精品久久久网站| 日韩高清不卡在线| 少妇熟女一区二区| 欧美日韩一区二区三区不卡视频| 欧美亚洲国产另类| av基地在线| 禁果av一区二区三区| 亚洲成人精品在线| 亚洲 欧美 成人| 欧美国产国产综合| 极品人妻一区二区| 久久成人精品| 美国av在线播放| 欧美绝顶高潮抽搐喷水合集| 国产91免费观看| 中文字幕在线播放网址| 亚洲精品国产精品自产a区红杏吧| 久久久免费高清视频| 亚洲欧洲日韩在线| 黄色短视频在线观看| 美女一区二区三区| 青草青青在线视频| 日韩一区亚洲二区| 国产在线精品一区| 成人在线视频区| 91成人精品网站| 久操免费在线| 精品视频偷偷看在线观看| 亚洲网站免费观看| 亚洲成人黄色影院| 国产在线免费av| 99久久亚洲一区二区三区青草 | 免费影视亚洲| 国产亚洲激情在线| 成人乱码一区二区三区| 欧美午夜一区二区| 91久久国产视频| 亚洲欧洲精品一区二区精品久久久| 不许穿内裤随时挨c调教h苏绵| 久久亚洲视频| 国产一级做a爰片久久毛片男| 精品国产123区| 精品一区在线播放| 日韩精品视频在线看| 国产精品丝袜一区二区三区| 激情aⅴ欧美一区二区欲海潮| 在线视频亚洲欧美| 色综合888| 精品国产乱码久久久久久浪潮| 在线观看不卡的av| 色婷婷综合久久久| 日韩久久久久久久久| 亚洲精品久久7777| 能直接看的av| 久久精品男人天堂av| 这里只有精品在线观看视频| 黄色精品一二区| 一区二区成人网| 视频一区二区三区在线| 精品中文字幕av| 亚洲经典自拍| 日韩成人三级视频| 欧美a级片网站| 超碰97免费观看| 国产精品久久久久久久| 日韩在线第一区| 国产成人精品三级高清久久91| 国产精品一区二区三区免费观看| 欧美另类中文字幕| 91在线观看免费| 激情不卡一区二区三区视频在线| 国产精品电影网站| 日韩av电影资源网| 国产精品69av| 日本h片久久| 国产精品激情自拍| 亚洲不卡系列| 国产精品无码专区在线观看| 99欧美精品| 国产美女扒开尿口久久久| 欧美国产日韩电影| 国产精品视频白浆免费视频| 麻豆精品蜜桃| 国产免费一区视频观看免费| 色狠狠一区二区三区| 国产中文字幕日韩| 国产免费区一区二区三视频免费| 国产日韩综合一区二区性色av| 久久99久久久精品欧美 | 精品中文在线| 91原创国产| 国产精品极品在线观看| 国产女人水真多18毛片18精品| 精品三级在线观看视频| 精品国产综合久久| 国产一区二区三区日韩精品| 亚洲国产欧洲综合997久久 | 日韩中文字幕免费看| 麻豆系列在线观看| 欧美极品少妇xxxxⅹ免费视频| f2c人成在线观看免费视频| 欧美性视频在线| 福利一区二区免费视频| 91亚洲精品久久久久久久久久久久| 日本一区影院| 久久99精品国产一区二区三区| 综合国产视频| 一区二区在线观看网站| 欧美.www| 777久久久精品一区二区三区| 日韩福利电影在线| 亚洲图片 自拍偷拍| 成人av在线资源网| 99久久99久久精品免费看小说.| 亚洲少妇中出一区| 国产免费av一区二区| 欧美视频一区二区在线观看| www.欧美国产| 国产香蕉一区二区三区在线视频| 国产欧美黑人| 全亚洲最色的网站在线观看| 2020国产精品小视频| 狠狠综合久久av| 欧美3p在线观看| www污在线观看| 久久国产精品一区二区| 中国免费黄色片| 国产精品久久久久永久免费观看 | 国产精品毛片| 天堂在线一区二区三区| 99久久久精品免费观看国产蜜| 天美传媒免费在线观看| 亚洲福利一区二区| 91激情在线观看| 亚洲色图在线观看| 久草免费在线色站| 国产主播精品在线| 亚洲另类春色校园小说| 中文精品无码中文字幕无码专区| 日日摸夜夜添夜夜添国产精品| ass极品水嫩小美女ass| 欧美国产丝袜视频| 日韩乱码一区二区| 日韩一区二区三区电影在线观看| 成人午夜在线观看视频| 午夜精品www| 99re91这里只有精品| 一区二区不卡在线视频 午夜欧美不卡'| 免费电影视频在线看| 亚洲蜜臀av乱码久久精品蜜桃| 国产对白videos麻豆高潮| 欧美日本在线播放| 激情视频在线观看免费| 97视频在线观看视频免费视频| 久久久久九九精品影院| 亚洲人成77777| 日日摸夜夜添夜夜添精品视频| 中文文字幕文字幕高清| 亚洲综合激情另类小说区| 国产精品探花视频| 在线成人免费网站| 亚洲www啪成人一区二区| 乱色588欧美| 国产精品一区毛片| 色哟哟无码精品一区二区三区| 一区二区三区欧美久久| 国产又大又长又粗| 精品国产一区二区三区久久久| av免费在线一区| 香蕉久久夜色| 免费精品99久久国产综合精品| 37p粉嫩大胆色噜噜噜| 欧美日韩精品在线观看| 亚洲 精品 综合 精品 自拍| 欧美国产精品va在线观看| 91丨精品丨国产| 影音先锋男人的网站| 激情综合色综合久久| 人妻人人澡人人添人人爽| 在线综合视频播放| 污污网站在线观看| 国产精品久久久久久久久婷婷| 欧美日韩a区| 亚洲欧美日韩偷拍| 天涯成人国产亚洲精品一区av| 天天摸夜夜添狠狠添婷婷| 91精品国产精品| 欧美禁忌电影网| 杨幂毛片午夜性生毛片| 国产精品高清亚洲| www.av导航| 91精品国产91久久久久久久久| 欧亚精品一区| 亚洲综合在线网站| 中文字幕中文在线不卡住| 99er热精品视频| 欧美大片免费观看| 日韩高清成人在线| 亚洲黄色a v| 亚洲免费三区一区二区| 亚洲第一天堂影院| 欧美在线中文字幕| 成人影院天天5g天天爽无毒影院| 国产精品视频中文字幕| 一区二区三区中文免费| 五月婷婷丁香六月| 国产精品免费电影| 午夜精品网站| 中文字幕在线1| 欧美一区二区免费视频| 爱草tv视频在线观看992| 日韩av一区二区三区美女毛片| 久久精品999| 波多野结衣国产| 色狠狠久久aa北条麻妃| 一区二区三区欧洲区| 日韩av播放器| 亚洲免费资源在线播放| 五月色婷婷综合| 国产色视频一区| 亚洲欧美bt| 日韩av手机在线免费观看| 亚洲成在人线av| 婷婷激情成人| 欧美日韩黄色一级片| 亚洲欧洲成人精品av97| 四季av日韩精品一区| 成人中文字幕+乱码+中文字幕| 亚洲日本欧美| 2014亚洲天堂| 亚洲精品一区二区久| 91精品一区|