掘金 AMA:聽閒魚客戶端架構師--鄔吉風聊 Flutter 和移動端開發那些事

清蒸不是水煮發表於2019-04-18

第二十一期 AMA 掘金團隊請來了閒魚客戶端架構師,《Fish-Redux》作者-- 鄔吉風做了為期三天的 Ask Me Anything (AMA) 活動(活動已結束)。 我們在此精選了一些來自使用者的提問及鄔吉風的回答。

關於 鄔吉風

阿里花名吉豐, 《Fish-Redux》作者。現任閒魚客戶端架構師,負責研發效能 & 高可用相關工作。

掘金 AMA:聽閒魚客戶端架構師--鄔吉風聊 Flutter 和移動端開發那些事

提問目錄

社群小夥伴精選提問--技術相關

用 Flutter 的過程中遇到幾點問題? -@戀貓de小郭

  1. 沒找到普通意義上的文字行間距設定方式,基本上都是leadind和height等引數而不是兩行之間間隔大小。
  2. 在Refresh控制元件重新整理過程中,除了等待Future之外,貌似沒有辦法直接打斷重新整理狀態。
  3. Flutter的熱更新方案除了閒魚提出的模板json外,對於ios還有其他可行方案嗎?
  4. Flutter狀態管理fish redux和google的provide優劣?
  1. flutter目前是沒有line-space的選項,但是我們可以通過換算得到相同的結果。
  2. 自定義Refresh控制元件的原理和native基本相同,是可以完全控制的。Future是一個對非同步的封裝,在重新整理過程中,使用Future是一種實現手段。
  3. Flutter的熱更新方案除了閒魚提出的模板json外,建議是跟隨Google的官方方案。
  4. provide方案目前已經不再建議使用,它的替代者是 scoped_model。

拋開場景直接做比較是不合理的,scoped_model和fish-redux,在各自的場景下有各自的優勢。

相對而言,fish-redux 更適合有一定複雜度的中大型的專案。它核心解決了狀態集中管理和元件分治管理的關係,所以一方面我們能享受到Redux集中管理的巨大好處,另一方面我們也能享受到元件化分治的能力。同時對移動應用中最常見的ListView場景對了做了上層抽象,得到最佳的效能和最佳的分治模型。

Dart會替代js嗎? ─ @A小恐龍

Dart會替代js嗎?

我認為dart不會完全替代js,但是會作為一種對js的補充存在。同時dart語法上有非常多的對js的繼承,對js的同學在語法上算是友好的。

你們是如何解決TextField Widget 的游標高度問題的? -@掘金社群首席裝逼CTO

你們是如何解決TextField Widget 的游標高度問題的? flutter環境Flutter (Channel beta, v1.3.8, on Mac OS X 10.14.3 18D109, locale zh-Hans-CN) 左邊是鹹魚,右邊是我做的

掘金 AMA:聽閒魚客戶端架構師--鄔吉風聊 Flutter 和移動端開發那些事

你截圖裡的閒魚頁面是用的native的輸入法,不過我們目前已經在將它變成flutter的實現了(內部對flutter的patch)。

而你的右截圖是flutter的實現,其實是一個flutter的bug,它將空格符的高度作為游標的高度和所有textfield文字內容的高度,這導致了一系列的問題。

github.com/flutter/flu… github.com/flutter/flu…

好訊息是flutter團隊正在處理這個問題,相信不久後,這個問題將得到徹底解決。

對Provide狀態管理怎麼看?可以直接在fish_redux裡面用嗎? -@洺魚

對Provide狀態管理怎麼看?可以直接在fish_redux裡面用嗎

Provide狀態管理目前已經不再推薦了,它可以在fish_redux內使用,但並不推薦這樣做。fish_redux更加強調的是單一資料來源驅動。 當然如果有更加具體的case的話,歡迎去https://github.com/alibaba/fish-redux/issues 給我們issue。

widget巢狀太不方便閱讀了,有什麼解決的辦法?-@caiweijian

widget巢狀太不方便閱讀了,有什麼解決的辦法

可以通過IDE的重構能力,拆分成若干小的函式,一定程度上會讓可讀性提高。

非技術相關-- 技術觀點

如何讓我能夠在redux的世界裡能夠殺出一條血路? -@正楷

你好,我也是redux愛好者,不過基於對redux的不滿重新寫了一個flux架構的實現:react-control-center, counter例項:stackblitz.com/edit/cc-cou…, cc-antd-pro: github.com/fantasticso…, 我自己認為這樣的方式是最接近react的方式去管理react狀態,但是苦於redux生態已經做大做強,不知道你cc有何看法,或者建議,讓我能夠在redux的世界裡能夠殺出一條血路。

redux愛好者和強烈的不滿似乎是個矛盾體。 我簡單看了你給的連結,看上去是個不錯的設計。 開源本身是成就你我,普惠眾人,沒有那麼強的對立性,建議是擁抱redux社群,做出更好的作品。

關於移動端和大前端的未來?-@hanliuxin5

  1. 在目前大前端浪潮越刮越湧的情況下,原生開發的優勢和劣勢何在。
  2. 小公司如何更有效的開展大前端技術的佈道。
  3. 對移動端開發未來的展望。

在當下,原生開發的優勢依然存在,但從軟體架構分層看,它更加適合往下層發展。 而對於廣大的軟體開發者而言,日常最多的往往是上層的具體業務需求,受效率和成本的驅動,將越來越趨向統一的跨端解決方案。

大前端是一種解決方案,flutter也是,它們有各自適合的場景,在這個基礎上,我相信它們都會成為下一代的主流的跨平臺解決方案。

而在這個過程中,小公司反而是更加容易擁抱變化,成為這個技術領域的先驅。

關於 Flutter 的幾個問題 -@Vadaski

  1. 客戶端新手直接學習Flutter來入門可以嗎,對於新手來講學習Flutter難點有哪些呢,在瞭解Flutter之後如果想要進一步擴充,下一步的技術學習方向定哪些會比較好呢。
  • 現在Fish Redux的學習成本相對還比較高,未來有沒有計劃對這個進行優化呢,例如詳細教程等。
  1. Flutter目前生態中有沒有硬傷的部分,前兩天在圖文混排上遇到了坑,文字自動填充圖片右邊和下面空間這樣的排版,暫時還沒有踩過去,閒魚有相關解決方案麼。還有其他哪些不太好踩的坑需要注意呢。
  2. 目前看到有在用TensorFlow自動生成UI程式碼,三端一體化,元件化,確實很有吸引力,您認為客戶端開發的理想狀態是什麼。 問題比較多,嘿嘿。? 期待吉豐老師答覆。
  1. Flutter,就上層應用開發而言,對於新同學是非常友好的一個框架。我建議在有實踐的場景學以致用,是比較有效的學習方式。選擇技術方向也是類似,只有在對的場景才有用。
  2. Fish Redux 是通過大量實踐檢驗的專案,但在文件方面僅僅是滿足最基礎的要求,後面我們會對文件整理和細化,也非常歡迎更多的社群同學加入進來,一起讓它變得更好,讓它慢慢演進成一個有影響力的flutter應用框架。
  3. 從閒魚的實踐來看,flutter的問題已經很少了,目前在鍵盤、輸入法相關場景下,flutter比native稍差些。圖文混排可以自定義,一般是將圖片轉化為一個寬度為0字元,然後給它設定寬高。
  4. Ui2code也是閒魚技術團隊在做的一個技術專案,我自己也曾參與其中, 我相信它是未來終端技術的一部分,並且在不遠的將來,就會變為一種通用的能力。

我是一名安卓研發,現在在考慮接下來學習rn還是flutter,能給個建議麼? -@啃手指的大笨熊

現在閒魚ios版本也使用了flutter麼?選用flutter而不是rn的考慮是什麼?混合開發的情況下,為了部分頁面而引入flutter的sdk,導致安裝包大小變大,會不會得不償失? 我是一名安卓研發,現在在考慮接下來學習rn還是flutter,能給個建議麼?

是的,目前閒魚的Flutter是執行在兩個平臺上的。 引入Flutter,在Android端大致增加了6M大小,並不是特別大,是可接受的範圍。

RN和Flutter之間的比較,應該有非常多的文章。以我淺見看,RN是一種中間妥協方案,它會被瀏覽器技術的進步而取代,而Flutter是更加面向未來的一種徹底的跨平臺渲染框架。

對使用flutter與其他語言混合開發比較感興趣(比如用flutter構建使用者介面,用rust/kotlin寫業務邏輯),能否講講? -@VitalyR

對使用flutter與其他語言混合開發比較感興趣(比如用flutter構建使用者介面,用rust/kotlin寫業務邏輯),能否講講?想這樣做是因為不太喜歡dart的語法,以及希望用rust可以提高效能。

選擇任何技術都有它對應的場景,拋開具體場景談技術是不合適的。

比如使用rust來編寫業務邏輯,它適合什麼場景,解決了什麼問題?

如果比較效能,dart 程式碼AOT下會被編譯成機器碼,它的效能不可能會比rust低。

如果是語法問題的話,我建議是更加開發的姿態去接受新鮮技術的挑戰。

我自己過去對dart也會存在疑問,但是隨著深入使用,會漸漸喜歡上dart。它使用友好,產物小,效能高,同時擁有AOT和JIT,支援毫秒級的hot-reload等等特性,這樣你也能更加深入的理解為什麼Google選擇dart作為flutter的開發語言,它幾乎就是最佳的終端語言選擇。

福利篇-閒魚招人

閒魚作為阿里巴巴在閒置流通領域的戰略產品,是業內第一的閒置交易社群。

閒魚技術團隊推行打破技術棧分工限制(Android/iOS/HTML5/Server 程式設計模型和語言的統一), 以及計算機視覺技術在移動終端上的前沿實踐工作。致力於利用先進技術推動業務發展。 特別的是,我們在 Flutter 和 Tensorflow Lite 等新技術的研發及應用處於行業領先位置,加入我們,一起用技術讓生活變得更加美好!

閒魚團隊現面向各大高校誠招 客戶端/服務端Java/前端/測試 實習生,base杭州阿里巴巴西溪園區 特別的我們非常歡迎有演算法經驗的工程同學加入我們的團隊,一起完成深度學習在UI識別、商品內容理解、視訊圖片分類和質量檢測等領域的應用落地,讓演算法的價值普惠閒魚億級使用者。 歡迎各位投遞簡歷,詳詢tino.wjf@alibaba-inc.com


由於篇幅原因,本期只摘錄了部分問題,鄔吉風 也回答了很多其他的技術、非技術問題,歡迎去他的 AMA 下面交流技術喲,傳送門

往期 AMA

相關文章