<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          為什么說 Flutter 可能不是下一件大事?

          共 4348字,需瀏覽 9分鐘

           ·

          2021-04-17 14:44

          劉望舒 專注于大前端和Java領(lǐng)域的個人技術(shù)號
          公眾號回復(fù)Android加入安卓技術(shù)群


          作者 | Michael Long
          譯者 | 王強
          策劃 | 蔡芳芳
          Flutter 很酷,但它當(dāng)不成大明星,這篇文章會告訴你原因。


          我注意到最近有很多文章將 Flutter 宣傳為“下一件大事”(next big thing)。一些人甚至詳細(xì)解釋了 Flutter 為什么會替代 React Native 成為開發(fā)人員首選的跨平臺技術(shù)。
          但它并沒有那個能力。
          我見識過 Flutter 的很多缺陷,我認(rèn)為它遇到了幾個關(guān)鍵問題。
          請注意,本文在 Flutter 社區(qū)中招來了很多熱情的評論,贊成和反對皆有。我強烈建議讀者讀完本文,再去原文看評論區(qū)大家的正反意見。


          它不是 React Native
          只要談到跨平臺技術(shù),React Native 是繞不開的。
          React Native 之所以受歡迎,是因為很多人相信它的愿景,并認(rèn)為自己的前端 JavaScript 開發(fā)人員可以創(chuàng)建一流的應(yīng)用。他們當(dāng)然做不到,但這并不能阻止他們嘗試一番。
          問題是許多公司已經(jīng)有了 JavaScript 開發(fā)人員。而且 JavaScript 人士常常會告訴管理層:“是的,我們可以節(jié)約一半時間。”
          正如我指出的那樣,其實他們做不到。確實,只要你入了門,起碼 80% 的應(yīng)用你都能很快搞出來個大概。可是你要將 80% 的時間花在應(yīng)用的外觀調(diào)整上,讓它能在各個平臺上正確運行。
          說到各個平臺……


          它不是原生的


          Flutter 的 Skia 渲染引擎可以讓你的應(yīng)用模仿原生的外觀和體驗,但也只是模仿而已。它可以編譯為原生代碼,但并不會使用原生按鈕、字段、切換、滾動條、表視圖或其他界面和導(dǎo)航元素。
          蘋果和谷歌幾乎在每個發(fā)行版上都會調(diào)整和更新這些界面元素及其行為。因此,只要應(yīng)用忽略它們,就別想跟上節(jié)奏了。
          此外,如果 iOS 上的 Flutter 出現(xiàn)錯誤,你只能等待谷歌來修復(fù)了。
          說到 iOS……


          二等公民


          我應(yīng)該強調(diào)一下,我是從 iOS 的角度開始體驗 Flutter 的,而 Flutter 的確讓 iOS 感覺像是二等公民。
          Flutter 基本上是 Android 優(yōu)先的開發(fā)環(huán)境,從底層開始就依賴 Android 的 Material Design 指南。
          因此,如果你想開箱即用地創(chuàng)建看起來像 Android 應(yīng)用、動起來也像 Android 應(yīng)用的東西,F(xiàn)lutter 很合適——否則……就沒那么舒服了。
          此外,iOS 開發(fā)正在擴展到蘋果生態(tài)系統(tǒng)內(nèi)的許多平臺(watchOS、tvOS、iPadOS、macOS),因此 Flutter 只能帶你入個門而已。
          當(dāng)然,使用 Cupertino 小部件可以解決部分問題,但是……


          程序的大部分內(nèi)容仍需寫兩次代碼


          正如我剛剛指出的,Android 同時提供 Cupertino 和 Material 小部件。
          這的確很不錯,但這也意味著,如果你希望應(yīng)用程序看著像原生一樣(順便說一句,React Native 是做得到的),你還得使用正確的小部件集來完成工作。這可能意味著界面的某些部分需要寫兩次代碼。
          更不用說你可能還必須為各個平臺針對性地重組應(yīng)用的各個部分,以適應(yīng)平臺的外觀和風(fēng)格(這個平臺要求導(dǎo)航欄在標(biāo)簽欄內(nèi),那個平臺正好相反,諸如此類的問題)。
          是的,你可以重用業(yè)務(wù)邏輯,但是我認(rèn)為這并不能解決在兩個平臺上編寫、測試和調(diào)試用戶界面的問題。


          它不是 HTML


          一些人在評論中還提到 Flutter 可用于 Web,因此你可以免費獲得“另一個”平臺。
          是的,你可以將 Flutter 用于 Web……盡管 Web 版本仍然處于 beta 階段,甚至谷歌在大多數(shù)情況下都不推薦使用它。
          目前,并非每種 HTML 場景都適合用 Flutter 編寫。例如,博客文章之類基于流的富文本內(nèi)容更適合以文檔為中心的模型,這種模型是 Web 的基礎(chǔ);而像 Flutter 這樣的 UI 框架可以提供的是以應(yīng)用為中心的服務(wù),和前者并不相稱。
          因此,是的,如果你想做一些數(shù)據(jù)可視化、制作一個在線工具(例如汽車配置器),或者制作某種嵌入式圖表(同樣也是谷歌推薦的用例),那都沒問題。
          問題是,我們不是剛剛將一些沉重的、非 HTML 的應(yīng)用渲染技術(shù)趕出了互聯(lián)網(wǎng)嗎?


          它的支持很差


          盡管 Flutter 的支持和文檔狀況略有改善,但遠(yuǎn)遠(yuǎn)無法和在 iOS 或 Android 上進(jìn)行原生應(yīng)用開發(fā)時獲得的支持相提并論。
          想要關(guān)于 Swift、Java、Kotlin、Cocoa 的文章、書籍、視頻和課程?隨便就能找到一大堆。
          需要在 Stack Overflow 上求助嗎?你想問的任何問題幾乎都已經(jīng)被問過并得到回答了。
          但是 Flutter 呢?就沒那么多了。
          從評論中可以看出這一點:
          單說支持問題就很讓人頭疼,尤其是在 Android 上(依賴地獄足以與 Windows 上 90 年代中期到 00 年代初的“DLL 地獄”相媲美)。


          Flutter 的前景并不明朗


          谷歌拋棄自己曾經(jīng)熱捧技術(shù)的歷史可謂臭名昭著,誰都沒法否認(rèn)這一點。而且,如果谷歌哪天認(rèn)為 Flutter 不會取得回報,那么棄之如敝屣也毫不奇怪。
          谷歌是在推廣 Flutter,但同時他們也在推廣 Kotlin 上的 Jetpack Compose,甚至 Kotlin Native Common 模塊,以提供跨平臺支持。
          更不用說蘋果也在推進(jìn)自己的下一代聲明式開發(fā)技術(shù):SwiftUI。盡管它和 Flutter 不能直接對比,因為它不能用來創(chuàng)建 Android 應(yīng)用,但是 SwiftUI 確實能讓開發(fā)人員一次性支持所有蘋果平臺:iOS、iPadOS、macOS、watchOS 和 tvOS。
          如果兩種技術(shù)都能達(dá)到預(yù)期的效果,并且都大大減少了開發(fā)原生應(yīng)用程序所需的時間,那么 Flutter 究竟還剩下什么優(yōu)勢可言呢?


          注意你的語言


          Flutter 的最大缺點之一是其實現(xiàn)語言 Dart。
          如果你在運行谷歌的 Web 或后端托管環(huán)境,那么 Dart 是你可以使用的一種語言,僅此而已。這意味著,如果你為了 Flutter 而花時間去學(xué)習(xí) Dart,那么很有可能那些來之不易的經(jīng)驗唯一能發(fā)揮價值的場所就是 Flutter。
          后一點可能是最讓人望而卻步的。我的意思是說,如果我想成為一名移動開發(fā)人員,我可能會學(xué)習(xí) Swift 或 Kotlin,因為它們都是現(xiàn)代語言,而且實際上兩者都有很多就業(yè)機會。
          Dart 呢?顯然沒那么多。
          嚴(yán)格來講 Dart 并不難學(xué),但這主要是因為它是一種簡單的語言。正如另一位評論者所指出的:
          學(xué)習(xí)了 Swift 和 Kotlin 之后,Dart 感覺像是在開倒車。它缺少許多其他現(xiàn)代語言可用的特性。它的類型系統(tǒng)不是很好。設(shè)計 Dart 的人似乎有一個“讓 JS 開發(fā)人員輕松使用”的設(shè)計目標(biāo)。Dart 的邊緣也很粗糙,就像 Javascript 一樣;而 Swift 和 Kotlin 在所有重要細(xì)節(jié)上都感覺很精致、成熟和完整。
          Dart 缺乏市場滲透力,這意味著如果你的團(tuán)隊中需要更多 Dart 開發(fā)人員,可能人都招不到。反過來說,這意味著你只能自己培養(yǎng)人才。這當(dāng)然可以做到,但在他們還沒成長起來之前你仍然要為他們開工資。
          最后請記住,在某個時候,你可能會遇到框架的局限性(或需要移植到更多平臺上),然后你無論如何都要退下來,并做一些原生開發(fā)的工作。
          在這種情況下,你仍然需要學(xué)習(xí) Swift 和 Kotlin。


          客戶不想要它


          作為可能的解決方案,我們曾幾次將 Flutter 推薦給客戶,而客戶一直反對這種想法——尤其是當(dāng)他們想利用自己內(nèi)部的 JavaScript 開發(fā)人員時,就像我前面提到的那樣。
          但請放心:他們也提到了我上面列出的幾乎所有問題。


          底線:Flutter 是一項邊緣技術(shù)


          上面談到的這些內(nèi)容可能會讓你相信,F(xiàn)lutter 可能不是你項目的最佳選擇。
          但我并不是這個意思。你只需要認(rèn)識到它的局限性即可。
          在我看來,F(xiàn)lutter 最適合小型內(nèi)部開發(fā)團(tuán)隊,這些團(tuán)隊需要快速創(chuàng)建概念驗證應(yīng)用,而這種應(yīng)用在外觀和設(shè)計上基本上都是非原生的。
          一個可能的例子是兒童游戲或應(yīng)用,它們有著獨特的界面,而且外觀上肯定不是原生的。在這種情況下,F(xiàn)lutter 并不能完全模仿 iOS 和 Android 體驗的問題就顯得無關(guān)緊要。我在上文提到的需要編寫兩次界面的問題也不復(fù)存在。
          哦,你還需要一個不介意學(xué)習(xí)全新平臺和語言的團(tuán)隊。
          那么……結(jié)論很明顯了。
          Flutter 是一項很酷的技術(shù),但在大多數(shù)情況下,它沒法成為舞臺上的主角。
          再說一遍,本文只是一種見解。歡迎不同意見,你可以在下面的評論中發(fā)表自己的意見。(實際上,其中一些要點已經(jīng)在文章中反饋了。)
          另請注意,我不是 React Native 的粉絲。React 遇到了許多相同的問題,此外還帶來了一些重大的性能損失。
          最后補充一下:我并不是說 Flutter 沒有合適的使用場景。但是,與已知領(lǐng)域中的其他事物一樣,它也存在一些折衷和已知的局限。最后你必須決定你和你的組織是否愿意給這種技術(shù)長期下注。
          感謝閱讀。


          延伸閱讀
          https://medium.com/better-programming/why-flutter-isnt-the-next-big-thing-e268488521f4

          ·················END·················

          推薦閱讀

          ? 耗時2年,Android進(jìn)階三部曲第三部《Android進(jìn)階指北》出版!

          ? 『BATcoder』做了多年安卓還沒編譯過源碼?一個視頻帶你玩轉(zhuǎn)!

          ? 『BATcoder』是時候下載Android11系統(tǒng)源碼和內(nèi)核源碼了!

          ? 重生!進(jìn)階三部曲第一部《Android進(jìn)階之光》第2版 出版!

          BATcoder技術(shù)群,讓一部分人先進(jìn)大廠

          你好,我是劉望舒,騰訊云最具價值專家TVP,著有暢銷書《Android進(jìn)階之光》《Android進(jìn)階解密》《Android進(jìn)階指北》,蟬聯(lián)四屆電子工業(yè)出版社年度優(yōu)秀作者,谷歌開發(fā)者社區(qū)特邀講師。

          前華為面試官,現(xiàn)大廠技術(shù)負(fù)責(zé)人。


          想要加入 BATcoder技術(shù)群,公號回復(fù)Android 即可。

          為了防止失聯(lián),歡迎關(guān)注我的小號


          更文不易,點個“在看”支持一下??
          瀏覽 29
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲香蕉影院视频在线 | 欧美日韩国产中文在线 | 国产久久久精品1000部视频 | 免费看黄色日逼视频 | 亚洲中文字幕影院 |