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

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

關於 鄔吉風

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

提問目錄

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

用 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,在各自的場景下有各自的優點。ios

相對而言,fish-redux 更適合有必定複雜度的中大型的項目。它核心解決了狀態集中管理和組件分治管理的關係,因此一方面咱們能享受到Redux集中管理的巨大好處,另外一方面咱們也能享受到組件化分治的能力。同時對移動應用中最多見的ListView場景對了作了上層抽象,獲得最佳的性能和最佳的分治模型。git

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

Dart會替代js嗎?github

我認爲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) 左邊是鹹魚,右邊是我作的編程

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

而你的右截圖是flutter的實現,實際上是一個flutter的bug,它將空格符的高度做爲光標的高度和全部textfield文本內容的高度,這致使了一系列的問題。redux

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

相關文章
相關標籤/搜索