作者:閒魚技術——宗心
摘要
一年一度的google開發者大會2018上,
flutter以什麼樣的形態展現在大家面前,1.0版本何時釋出?
有哪些應用場景?效能的表現如何?
國內的flutter開發者生態又是怎樣的?
作為google合作伙伴的閒魚展臺有哪些趣事?大家問了哪些問題?
我們正在在大會結束後5個小時內的返杭路上敲下這段文字,真誠為您分享。
google開發者大會於今年9月20日在上海舉辦,閒魚團隊作為google的合作伙伴參加這次會議。我參會前就收到邀約要寫一下這次GDD的一些見聞和看法,因此有了這篇文章,一些個人看法和感受,供大家參考。希望或多或少能幫到大家。由於我在團隊負責flutter的整體落地,因此主要關注了flutter相關的議題。

收穫
- 工程側比較關心的幾個問題得到了一定的解答
一個是工程側我們關注的在hybrid場景下更方便的hot reload方案,目前在純flutter工程的場景下,hot reload的支援相對完備。但在hybrid場景下hot reload一直不太方便,雖然閒魚團隊整理了一些在這個場景下的需要使用的命令列工具,但業內暫時沒有什麼通用的方案,flutter團隊也意識到了這一點,因此他們這次的showcase中展示了android studio上的attach功能,當hybrid工程使用android studio啟動native程式碼後,就可以自動被attach上,從而可以進行後續的debug和hot reload能力,這部分功能在下圖上可以看到一些端倪,感興趣的同學可以自己編一個studio plugin用一下。

另一個是flutter內嵌native的一些可能的方案。目前在flutter的master分支上,大家可以關注下platform_views.dart中的RenderAndroidView這個類,基本原理是渲染部分仍然使用texture的機制進行UI部分的繪製,事件的部分的實現是將Dart側的事件組裝成AndroidMotionEvent通過systemchannel再回傳給Android的nativeView,這部分iOS在github上暫時還沒有實現,但理論上應該是一致的,目前程式碼側也找到了一些猜測的依據。


- 瞭解到較多基於flutter側的UI渲染的效能優化的手段。
我們之前有嘗試在低端機上進行flutter和native的效能測試,並沒有系統的理解為什麼flutter的效能會更好,經過第一天的最後兩個topic,有了一些啟發。從佈局的角度出發,flutter整個的佈局體系相較於iOS和android的佈局體系有更少的計算,另外skia底層相較於android自帶的skia也有較大的優化,針對於跟渲染相關的底層api的呼叫次數也有明顯的下降。兩個topic在程式碼的編寫上也給出了一些建議,針對widget的setState重新整理的範圍越少,效能越好,另外應該較少呼叫save Layer相關的Api,以提升底層渲染的效率。由於兩個topic都只有30分鐘,很多細節沒有細講,後續期待他們的ppt放出來。

趨勢
- flutter整體趨於完善,hybrid場景的支援加速部署。
flutter釋出pre release 2,並有可能年底釋出1.0的版本,就我自己在官網github的瞭解來看,最近幾個版本主要都是在補齊iOS design風格的一些控制元件,engine側改的並不多。另一方面,flutter團隊意識到,如果flutter需要後續在眾多app內落地,hybrid場景(flutter+Native)不可避免。在這幾個議題的showcase中,國內的幾家大公司使用的全都是hybrid的場景。因此我們才會看到,Matt Sullivan在第一個議題花了大量篇幅教大家如何以module的形式在已有app內引入flutter的程式碼,後續通過新的flutterplugin提供hybrid場景下更加方便的hot reload能力。這個過程中我眼尖又發現了裡面存在flutter嵌webview的showcase,一切都證明,後續flutter會更加完善hybrid場景的能力,讓更多希望接入的app可以用更低的成本接入已有app進行開發和嘗試,相信這對社群的繁榮會有較大的推動作用。
- 國內開發者蠢蠢欲動,有星星之火,燎原之勢。
在flutter官方的渠道中能看到除了閒魚團隊,還有一些其他的大廠也在使用flutter進行應用。線上下交流過程中,發現了非常多的團隊或多或少在嘗試應用flutter。這次跟滴滴,拼多多,百度,以及阿里系的很多同學都有交流,當然也有很多創業團隊在觀望。這個過程中有希望嘗試直接構建新app的,也有在老app中增加功能的,總之,這次發現了很多之前沒有發現的團隊在跟進,做有針對性的研究和改造。
在這個趨勢下,我更多的思考的是閒魚作為flutter社群的領頭羊,能給社群帶來什麼。一直一來我們長期穩定的對flutter社群輸出一些文章,講解我們的解決方案和flutter相關的底層原理。後續我的希望是,能抽象化我們的解決方案貢獻給社群,讓更多的同學可以受益。相信這部分在後續的幾個月應該會有一些產出給到大家,大家敬請期待。
閒聊兩句
由於今年我們是google的合作伙伴,因此給了團隊一個專門的展位,非常感謝google的顧仁民同學幫忙,展位安排的非常棒。




文章的最後
中秋到來之際,先祝大家中秋節快樂,然而GDD的最後一天,人在囧途,由於中秋節在即,買不到高鐵票,只能綠皮火車站回杭州,你們現在看到的內容是我坐在綠皮火車過道寫下的,看到這裡的老鐵,閒魚團隊長期招募flutter的研發同學,一起用技術改變世界,此時此刻非你莫屬,
詳詢guicai.gxy@alibaba-inc.com