為您解碼網(wǎng)站建設(shè)的點點滴滴
發(fā)表日期:2018-11 文章編輯:小燈 瀏覽次數(shù):1948
為了開始學一個東西前,我習慣性的會先問自己為什么?到底為什么我要開始學Flutter呢?
不確定你是為什么開始學習Flutter,我的直接原因的話是因為我們的項目可能在后面會考慮用Flutter重構(gòu),作為目前最新的跨平臺方案,它有著它的魅力所在,雖然目前正式版本還沒出,但是它的beta版本的效果,讓大家都眼前一亮。不過從另外一方面來看,我一直在嘗試學習一個跨平臺的技術(shù)方案,來幫我打通整個前端技術(shù),之前一直考慮學習web或者RN、weex,現(xiàn)在來看感覺從Flutter開始也可能是一個好的開始,因為Flutter的dart語言跟java的一些語法相似,可以幫你對Android有一些了解,同時Android Studio可以作為Flutter的IDE,畢竟Google自家的,可以幫我了解很多安卓相關(guān)的知識,同時dart就是為了干掉JS而出生的,所以更有必要看看這個比JS效率更高的語言是怎么個樣子了。
有一個特別值得注意的點,今年也就是18年Google在紐約的開發(fā)者大會上,全部會議過程中都沒有再提及Android,而是主要聊了ChromeOS和Fuchsia,而Fushsia的UI層就是由Flutter構(gòu)建的,主要開發(fā)語言也是Flutter的開發(fā)語言Dart。所以能看到一種潛在的趨勢。
Fuchsia 項目的知名參與者包括 Travis Geiselbrecht 和 Brian Swetland。
早在久遠的上個世紀九十時代中期,當時的蘋果公司因自家的操作系統(tǒng)無法及時推出,正尋找替代品。當時有兩個理想的候選產(chǎn)品分別是 Be 公司的多媒體操作系統(tǒng)BeOS,以及被蘋果公司掃地出門的喬布斯開辦的 NeXT 公司的產(chǎn)品 NeXTSTEP。后來由于 Be 公司要價太高等原因,蘋果公司收購了NeXT公司重新獲得喬布斯繼而研發(fā)出后來大放異彩的 OSX,而 Be 公司則由于經(jīng)營不善在2001年黯然被Palm公司收購。
能被蘋果公司列為收購目標的 BeOS 實力自然不弱,而上面這兩位小哥,就曾在 Be 公司做操作系統(tǒng)開發(fā)。由于 BeOS 在當時來說設(shè)計非常先進,公司關(guān)門后很多工程師和愛好者覺得可惜,所以繼承BeOS的設(shè)計重新實現(xiàn)了一個開源系統(tǒng)名字叫 Haiku,Haiku 使用的內(nèi)核叫做 NewOS。自然地 —— NewOS 的發(fā)起人和主力開發(fā)就是這倆哥們。
可能倆人對極度精簡的產(chǎn)品比較偏愛,又或者是覺得 NewOS 內(nèi)核的設(shè)計還太過厚重,總之,2008 年倆人又針對嵌入式設(shè)備設(shè)計了一個極其輕巧的內(nèi)核 littlekernel(簡稱:lk)。
一晃快20年過去,隨著所供職公司的關(guān)停并轉(zhuǎn),他們又分別在Danger、Palm、Android、Apple、Google等巨頭公司工作過。Brian Swetland 最近的一份工作是在谷歌任高級軟件工程師,負責管理 Linux 內(nèi)核開發(fā)相關(guān)事務(wù)。幾天前,他在 github 上公布了 Fuchsia,用到的內(nèi)核叫做 Magenta,正是基于他們的 lk 內(nèi)核項目擴展功能而來。
可以看出來,項目負責人絕對是經(jīng)驗豐富的老司機了。
從宏觀上來看,移動互聯(lián)網(wǎng)興起也才10年不到的時間,很多人朋友開玩笑說iOS沒人要了,Android沒人要了,在我看來其實調(diào)侃更多一些,本質(zhì)上這還是一個新興的平臺,從最早期的Native開發(fā)持續(xù)了1到2年之后,大家都在為了提高效率努力去嘗試各種跨平臺的方法。我剛開始接觸Flutter的第一秒鐘就問了我自己一個問題,F(xiàn)lutter到底和之前的方案有什么本質(zhì)上的不一樣?一個一個來看之前方案的原理,自然就會理解了。
這個階段是最初戰(zhàn)場,基本上iOS、Android、網(wǎng)頁需要3端共同開發(fā),維護自己的原生部分。很自然的暴露出來的問題就是效率問題,雖然保證了各端的穩(wěn)定性,但是時間成本又是一個問題。
這個階段大家嘗試了讓APP做殼Web做核的方式,一時間各種說法都出來了,說Web要統(tǒng)一3端了,不過是理論分析罷了,都低估了性能的瓶頸問題,大量用戶體驗的問題反饋了出來,大家又回到了第一戰(zhàn)場。
當開發(fā)者認識到Web 的繪制問題是性能的瓶頸問題時,果斷的采取了通過原聲繪制的方式來實現(xiàn)。這樣大大的解決了性能問題。FaceBook的RN和阿里的Weex都應(yīng)運而生,它們的原理都相似,只是上層采用的語言不通,中間采用的橋有差異。這類方式在兩三年之間,從最初的看似美好已經(jīng)變成了各家公司已經(jīng)開始放棄RN退回原生了,原因就在于橋的成本太高,當涉及到復雜跨橋的調(diào)用的時候,就會出現(xiàn)性能問題,更嚴重的問題是我最初沒有想到的,那就是即使忽略性能問題的情況下開發(fā)成本降低了,但是維護成本缺提高了很多。RN的整體思想是一處學習到處使用,所以在Android和iOS的使用方式上還是有差異的,而且在開發(fā)插件的時候,還是需要開發(fā)android iOS兩套插件,能達到像H5一樣,一處編寫,到處運行還是有很大的差異的,所以除了android和ios團隊外還需要一個團隊維護RN,RN架構(gòu)的維護成本要比android和iOS的開發(fā)的難度高多了。所以成本比原來還高,還有很多Rn架構(gòu)本身沒有辦法結(jié)局的問題,對于小團隊來說簡直就是噩夢
和React Native一樣,F(xiàn)lutter也提供響應(yīng)式的視圖,F(xiàn)lutter采用不同的方法避免由JavaScript橋接器引起的性能問題,即用名為Dart的程序語言來編譯。Dart是用預編譯的方式編譯多個平臺的原生代碼,這允許Flutter直接與平臺通信,而不需要通過執(zhí)行上下文切換的JavaScript橋接器。編譯為原生代碼也可以加快應(yīng)用程序的啟動時間。實際上,F(xiàn)lutter是唯一提供響應(yīng)式視圖而不需要JavaScript橋接器的移動SDK。
從4個階段的區(qū)別已經(jīng)大概有個基本的了解了,自然會發(fā)現(xiàn)從理論上Flutter是"最美"的.但是我自己也特別有疑問,幾乎每個階段大家都會有革命性的感覺,但是在時間的慢慢證明下,很多東西都是有存在的問題的。就我目前對Flutter的了解,我也看到了很多目前階段要面臨的問題。目前來看,大前端目前也還沒有"銀彈"。
1.最大的優(yōu)勢直接與平臺通信,從這點讓Flutter的性能天花板變成了和Native一樣
2.熱重載調(diào)試功能,F(xiàn)lutter的開發(fā)階段支持這個炫酷的功能,能特別方便的用IDE進行調(diào)試,可以不用每次都重新加載,這個是我這段時間寫Demo的時候給我眼前一亮的功能,特別好用。修改了代碼之后,可以直接熱加載在上次調(diào)試的基礎(chǔ)上,只變動你剛修改的地方。
3.徹底的UI統(tǒng)一一套。你不用再聽設(shè)計師驗收的時候說為什么兩端不一樣了。(這個不能說是絕對的好處,也影響不是特別大,因為也許很多安卓的用戶也不喜歡iOS的界面呢,暫且放進來吧,從效率的角度來分析)
4.Google親兒子,能保證平臺的穩(wěn)定和后續(xù)的質(zhì)量。
5.RN的性能問題被越來越多的平臺重視,也都開始進入重新選擇階段
1.之前我看bestswifter提出來的問題是Flutter在git上的issue只增不減,當時看到的issue數(shù)量是3848,我目前來看已經(jīng)到4122了。而反觀RN的issue還是維持在600左右,這也能反映出來目前Flutter還非常年輕,還有很多問題需要解決。
2.Flutter目前還在beta,正式版本還沒出,暫且把這個放到劣勢里面,還有很多不確定性。不過也正因為不確定性,它也有更多的可能性。
3.無法熱更新,從目前的beta版本來看,開發(fā)環(huán)境是JIT模式做動態(tài)化,但是release版本是AOT模式的,不支持動態(tài)化。不過在Flutter的issue里面有發(fā)現(xiàn)該團隊已經(jīng)注意到這個問題,并且分析了理論上熱更新的可能性,也許會在正式版本發(fā)布這個功能也說不準。
4.包大小問題,因為需要把Flutter的庫給放到項目里,所以一定是會增加包的大小了,只是多少的問題。因為安卓原生架構(gòu)里面包含一些Flutter用到的庫,所以相對小一些。iOS的包就會大一些。對于一些小廠來說可能影響不是很大,但是對于大廠來說,確實都有包大小限制。
5.因為Flutter用的是Dart語言,所以也是有學習梯度的,對于iOS開發(fā)來說可能相對安卓更陡峭一些,因為dart跟java有些地方很類似所以相對簡單一些。不過在這一周來看,我作為一個iOS開發(fā)來看,其實還好,萬變不離其宗,都是OOP,本質(zhì)上都一樣。這個劣勢也能看成自己的一種挑戰(zhàn)吧,劣勢等級要看你的決心了。
6.生態(tài)問題。整個Flutter還是處于非常年輕的狀態(tài),雖然Flutter的中文文檔非常多,非常詳細,但是走和跑是兩回事,確實你可以根據(jù)Google的官方文檔把環(huán)境都給搞出來,但是真正到實際開發(fā)中你會面對大量問題,到時候是否有一個強大的生態(tài)讓你去尋找答案,尋找可行的方案。所以這也是一個很重要的問題,畢竟你在快速的業(yè)務(wù)壓力下,是很難容許你去造輪子的,也要看公司給你的資源和空間。當然很多人會說愿意用業(yè)余時間去做。這是看上去很美系列,很考驗自律能力。
7.如果不是新項目呢?想中間集成一部分Flutter做功能該怎么辦呢?這又是一個復雜的問題,后續(xù)的文章會講解這個問題。
8.如果是新項目呢?是的,你可以從新搭建項目了,看上去很愉快。不過也有很長的過渡期,你同時可能還是需要原生iOS開發(fā)和安卓開發(fā)分散出來一部分精力去跟Flutter開發(fā)工程師做對接。當然這是一個始終都要面對的問題,也是不能忽視的問題。
寫到現(xiàn)在,我發(fā)現(xiàn)我好想寫的弊端比優(yōu)勢多,好吧,這些都是我客觀分析的點,也不能完全當作弊端,是我們對任何架構(gòu)都可能需要面對的問題,只不過Flutter還太年輕,讓沒有接觸的同學都害怕了,怕沒有人幫你解決你遇到的問題,其實不要怕,沒有體驗過確實都沒有資格完全否定和完全肯定一個東西,所以我也會深入Flutter之后再對它進行更深的評價,后續(xù)我會記錄下來我的學習過程,給你做一個參考,希望能幫助到你,如果我遇到了難以解決的問題也希望你能給我提供幫助。當然也可能不夠全面,后續(xù)還會補充,不過Flutter本身的原理就值得我們?nèi)ヌ剿鲊L試一下了,未來也許不是Flutter的,但Flutter一定是往前走了一步,而這一步讓我們都可能更接近了答案。
日期:2018-10 瀏覽次數(shù):7253
日期:2018-12 瀏覽次數(shù):4328
日期:2018-07 瀏覽次數(shù):4876
日期:2018-12 瀏覽次數(shù):4174
日期:2018-09 瀏覽次數(shù):5502
日期:2018-12 瀏覽次數(shù):9922
日期:2018-11 瀏覽次數(shù):4804
日期:2018-07 瀏覽次數(shù):4578
日期:2018-05 瀏覽次數(shù):4859
日期:2018-12 瀏覽次數(shù):4324
日期:2018-10 瀏覽次數(shù):5139
日期:2018-12 瀏覽次數(shù):6212
日期:2018-11 瀏覽次數(shù):4464
日期:2018-08 瀏覽次數(shù):4592
日期:2018-11 瀏覽次數(shù):12630
日期:2018-09 瀏覽次數(shù):5579
日期:2018-12 瀏覽次數(shù):4833
日期:2018-10 瀏覽次數(shù):4188
日期:2018-11 瀏覽次數(shù):4528
日期:2018-12 瀏覽次數(shù):6063
日期:2018-06 瀏覽次數(shù):4007
日期:2018-08 瀏覽次數(shù):5436
日期:2018-10 瀏覽次數(shù):4457
日期:2018-12 瀏覽次數(shù):4525
日期:2018-07 瀏覽次數(shù):4362
日期:2018-12 瀏覽次數(shù):4500
日期:2018-06 瀏覽次數(shù):4383
日期:2018-11 瀏覽次數(shù):4375
日期:2018-12 瀏覽次數(shù):4249
日期:2018-12 瀏覽次數(shù):5283
Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.