作者:閑魚技術——宗心
摘要
一年一度的google開發者大會即将開始,今年的大會上,flutter會以什麼樣的形态展現在大家面前,1.0版本何時釋出?有哪些應用場景?性能的表現如何?國内的flutter開發者生态又是怎樣的?作為google合作夥伴的閑魚展台有哪些趣事?逆襲的加班俠宗心,真誠為您分享。
google開發者大會于今年9月20日在上海舉辦,閑魚團隊作為google的合作夥伴參加這次會議。我參會前就收到邀約要寫一下這次GDD的一些見聞和看法,是以有了這篇文章,一些個人看法和感受,供大家參考。希望或多或少能幫到大家。由于我在團隊負責flutter的整體落地,是以主要關注了flutter相關的議題。

flutter今年在開發者大會上有四個議題,前兩個議題着重在介紹flutter的優勢,以及在國内外的應用場景,以介紹類偏多。後兩個議題主要講解了flutter的上層性能優化實踐,以及Skia場景下的性能優化政策。說一下這次參會的一些收獲和自己看到的一些趨勢吧。
收獲
- 工程側比較關心的幾個問題得到了一定的解答
一個是工程側我們關注的在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上暫時還沒有實作,但理論上應該是一緻的,目前代碼側也找到了一些猜測的依據。
可以按照下圖的位置找到這個case的example,自己注冊platformview
這部分說一下自己的看法,這個解決方案的完成意味着後續不管是webview在flutter側的内嵌還是高德地圖的内嵌都會迎刃而解,這就使得在native側已有的ui代碼得到了比較好的複用,有利于在已有app上做flutter的代碼遷移,不過目前看起來,代碼隻有單端的實作,還需要繼續期待。
- 了解到較多基于flutter側的UI渲染的性能優化的手段。
我們之前有嘗試在低端機上進行flutter和native的性能測試,并沒有系統的了解為什麼flutter的性能會更好,經過第一天的最後兩個topic,有了一些啟發。從布局的角度出發,flutter整個的布局體系相較于iOS和android的布局體系有更少的計算,另外skia底層相較于android自帶的skia也有較大的優化,針對于跟渲染相關的底層api的調用次數也有明顯的下降。兩個topic在代碼的編寫上也給出了一些建議,針對widget的setState重新整理的範圍越少,性能越好,另外應該較少調用save Layer相關的Api,以提升底層渲染的效率。由于兩個topic都隻有30分鐘,很多細節沒有細講,後續期待他們的ppt放出來。
最後在整個演講的過程中看到了于潇和李宇骞兩位老師針對flutter以及skia在每一幀渲染上的一些函數調用的分析和解決,對很多細節的部分锱铢必較,這個就是匠人精神,也希望他們的這種專業精神,能感染更多的人。
趨勢
- 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的顧仁民同學幫忙,展位安排的非常棒。
我原來以為在展位很輕松,後來才發現,由于黑科技UI2Code讓我們的展位異常火爆,大家問了非常多關于flutter和tensorflow-lite的問題,
另外我們的展位也吸引了google的tensorflow-lite和flutter的負責人前來圍觀,我們團隊現場生成代碼童叟無欺。
今年的會議也讓我跟很多網友線下面基,大家一起分享交流技術,非常開心。
文章的最後
中秋到來之際,先祝大家中秋節快樂,然而GDD的最後一天,人在囧途,由于中秋節在即,買不到高鐵票,隻能綠皮火車站回杭州,你們現在看到的内容是我坐在綠皮火車過道寫下的,看到這裡的老鐵,閑魚團隊長期招募flutter的研發同學,一起用技術改變世界,此時此刻非你莫屬。
履歷投遞:[email protected]