<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 可能不是下一件大事?

          共 4471字,需瀏覽 9分鐘

           ·

          2020-12-03 11:33

          點(diǎn)擊上方“逆鋒起筆”,公眾號(hào)回復(fù) pdf
          領(lǐng)取大佬們推薦的學(xué)習(xí)資料

          作者 | Michael Long

          譯者 | 王強(qiáng)

          策劃 | 蔡芳芳

          Flutter 很酷,但它當(dāng)不成大明星,這篇文章會(huì)告訴你原因。


          我注意到最近有很多文章將 Flutter 宣傳為“下一件大事”(next big thing)。一些人甚至詳細(xì)解釋了 Flutter 為什么會(huì)替代 React Native 成為開發(fā)人員首選的跨平臺(tái)技術(shù)。

          但它并沒有那個(gè)能力。

          我見識(shí)過 Flutter 的很多缺陷,我認(rèn)為它遇到了幾個(gè)關(guān)鍵問題。

          請(qǐng)注意,本文在 Flutter 社區(qū)中招來了很多熱情的評(píng)論,贊成和反對(duì)皆有。我強(qiáng)烈建議讀者讀完本文,再去原文看評(píng)論區(qū)大家的正反意見。


          它不是 React Native


          只要談到跨平臺(tái)技術(shù),React Native 是繞不開的。

          React Native 之所以受歡迎,是因?yàn)楹芏嗳讼嘈潘脑妇埃⒄J(rèn)為自己的前端 JavaScript 開發(fā)人員可以創(chuàng)建一流的應(yīng)用。他們當(dāng)然做不到,但這并不能阻止他們嘗試一番。

          問題是許多公司已經(jīng)有了 JavaScript 開發(fā)人員。而且 JavaScript 人士常常會(huì)告訴管理層:“是的,我們可以節(jié)約一半時(shí)間。”

          正如我指出的那樣,其實(shí)他們做不到。確實(shí),只要你入了門,起碼 80% 的應(yīng)用你都能很快搞出來個(gè)大概。可是你要將 80% 的時(shí)間花在應(yīng)用的外觀調(diào)整上,讓它能在各個(gè)平臺(tái)上正確運(yùn)行。

          說到各個(gè)平臺(tái)……


          它不是原生的


          Flutter 的 Skia 渲染引擎可以讓你的應(yīng)用模仿原生的外觀和體驗(yàn),但也只是模仿而已。它可以編譯為原生代碼,但并不會(huì)使用原生按鈕、字段、切換、滾動(dòng)條、表視圖或其他界面和導(dǎo)航元素。

          蘋果和谷歌幾乎在每個(gè)發(fā)行版上都會(huì)調(diào)整和更新這些界面元素及其行為。因此,只要應(yīng)用忽略它們,就別想跟上節(jié)奏了。

          此外,如果 iOS 上的 Flutter 出現(xiàn)錯(cuò)誤,你只能等待谷歌來修復(fù)了。

          說到 iOS……


          二等公民


          我應(yīng)該強(qiáng)調(diào)一下,我是從 iOS 的角度開始體驗(yàn) Flutter 的,而 Flutter 的確讓 iOS 感覺像是二等公民。

          Flutter 基本上是 Android 優(yōu)先的開發(fā)環(huán)境,從底層開始就依賴 Android 的 Material Design 指南。

          因此,如果你想開箱即用地創(chuàng)建看起來像 Android 應(yīng)用、動(dòng)起來也像 Android 應(yīng)用的東西,F(xiàn)lutter 很合適——否則……就沒那么舒服了。

          此外,iOS 開發(fā)正在擴(kuò)展到蘋果生態(tài)系統(tǒng)內(nèi)的許多平臺(tái)(watchOS、tvOS、iPadOS、macOS),因此 Flutter 只能帶你入個(gè)門而已。

          當(dāng)然,使用 Cupertino 小部件可以解決部分問題,但是……


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


          正如我剛剛指出的,Android 同時(shí)提供 Cupertino 和 Material 小部件。

          這的確很不錯(cuò),但這也意味著,如果你希望應(yīng)用程序看著像原生一樣(順便說一句,React Native 是做得到的),你還得使用正確的小部件集來完成工作。這可能意味著界面的某些部分需要寫兩次代碼。

          更不用說你可能還必須為各個(gè)平臺(tái)針對(duì)性地重組應(yīng)用的各個(gè)部分,以適應(yīng)平臺(tái)的外觀和風(fēng)格(這個(gè)平臺(tái)要求導(dǎo)航欄在標(biāo)簽欄內(nèi),那個(gè)平臺(tái)正好相反,諸如此類的問題)。

          是的,你可以重用業(yè)務(wù)邏輯,但是我認(rèn)為這并不能解決在兩個(gè)平臺(tái)上編寫、測(cè)試和調(diào)試用戶界面的問題。


          它不是 HTML


          一些人在評(píng)論中還提到 Flutter 可用于 Web,因此你可以免費(fèi)獲得“另一個(gè)”平臺(tái)。

          是的,你可以將 Flutter 用于 Web……盡管 Web 版本仍然處于 beta 階段,甚至谷歌在大多數(shù)情況下都不推薦使用它。

          目前,并非每種 HTML 場(chǎng)景都適合用 Flutter 編寫。例如,博客文章之類基于流的富文本內(nèi)容更適合以文檔為中心的模型,這種模型是 Web 的基礎(chǔ);而像 Flutter 這樣的 UI 框架可以提供的是以應(yīng)用為中心的服務(wù),和前者并不相稱。

          因此,是的,如果你想做一些數(shù)據(jù)可視化、制作一個(gè)在線工具(例如汽車配置器),或者制作某種嵌入式圖表(同樣也是谷歌推薦的用例),那都沒問題。

          問題是,我們不是剛剛將一些沉重的、非 HTML 的應(yīng)用渲染技術(shù)趕出了互聯(lián)網(wǎng)嗎?


          它的支持很差


          盡管 Flutter 的支持和文檔狀況略有改善,但遠(yuǎn)遠(yuǎn)無法和在 iOS 或 Android 上進(jìn)行原生應(yīng)用開發(fā)時(shí)獲得的支持相提并論。

          想要關(guān)于 Swift、Java、Kotlin、Cocoa 的文章、書籍、視頻和課程?隨便就能找到一大堆。

          需要在 Stack Overflow 上求助嗎?你想問的任何問題幾乎都已經(jīng)被問過并得到回答了。

          但是 Flutter 呢?就沒那么多了。

          從評(píng)論中可以看出這一點(diǎn):

          單說支持問題就很讓人頭疼,尤其是在 Android 上(依賴地獄足以與 Windows 上 90 年代中期到 00 年代初的“DLL 地獄”相媲美)。


          Flutter 的前景并不明朗


          谷歌拋棄自己曾經(jīng)熱捧技術(shù)的歷史可謂臭名昭著,誰都沒法否認(rèn)這一點(diǎn)。而且,如果谷歌哪天認(rèn)為 Flutter 不會(huì)取得回報(bào),那么棄之如敝屣也毫不奇怪。

          谷歌是在推廣 Flutter,但同時(shí)他們也在推廣 Kotlin 上的 Jetpack Compose,甚至 Kotlin Native Common 模塊,以提供跨平臺(tái)支持。

          更不用說蘋果也在推進(jìn)自己的下一代聲明式開發(fā)技術(shù):SwiftUI。盡管它和 Flutter 不能直接對(duì)比,因?yàn)樗荒苡脕韯?chuàng)建 Android 應(yīng)用,但是 SwiftUI 確實(shí)能讓開發(fā)人員一次性支持所有蘋果平臺(tái):iOS、iPadOS、macOS、watchOS 和 tvOS。

          如果兩種技術(shù)都能達(dá)到預(yù)期的效果,并且都大大減少了開發(fā)原生應(yīng)用程序所需的時(shí)間,那么 Flutter 究竟還剩下什么優(yōu)勢(shì)可言呢?


          注意你的語言


          Flutter 的最大缺點(diǎn)之一是其實(shí)現(xiàn)語言 Dart。

          如果你在運(yùn)行谷歌的 Web 或后端托管環(huán)境,那么 Dart 是你可以使用的一種語言,僅此而已。這意味著,如果你為了 Flutter 而花時(shí)間去學(xué)習(xí) Dart,那么很有可能那些來之不易的經(jīng)驗(yàn)唯一能發(fā)揮價(jià)值的場(chǎng)所就是 Flutter。

          后一點(diǎn)可能是最讓人望而卻步的。我的意思是說,如果我想成為一名移動(dòng)開發(fā)人員,我可能會(huì)學(xué)習(xí) Swift 或 Kotlin,因?yàn)樗鼈兌际乾F(xiàn)代語言,而且實(shí)際上兩者都有很多就業(yè)機(jī)會(huì)。

          Dart 呢?顯然沒那么多。

          嚴(yán)格來講 Dart 并不難學(xué),但這主要是因?yàn)樗且环N簡(jiǎn)單的語言。正如另一位評(píng)論者所指出的:

          學(xué)習(xí)了 Swift 和 Kotlin 之后,Dart 感覺像是在開倒車。它缺少許多其他現(xiàn)代語言可用的特性。它的類型系統(tǒng)不是很好。設(shè)計(jì) Dart 的人似乎有一個(gè)“讓 JS 開發(fā)人員輕松使用”的設(shè)計(jì)目標(biāo)。Dart 的邊緣也很粗糙,就像 Javascript 一樣;而 Swift 和 Kotlin 在所有重要細(xì)節(jié)上都感覺很精致、成熟和完整。

          Dart 缺乏市場(chǎng)滲透力,這意味著如果你的團(tuán)隊(duì)中需要更多 Dart 開發(fā)人員,可能人都招不到。反過來說,這意味著你只能自己培養(yǎng)人才。這當(dāng)然可以做到,但在他們還沒成長起來之前你仍然要為他們開工資。

          最后請(qǐng)記住,在某個(gè)時(shí)候,你可能會(huì)遇到框架的局限性(或需要移植到更多平臺(tái)上),然后你無論如何都要退下來,并做一些原生開發(fā)的工作。關(guān)注公眾號(hào) 逆鋒起筆,回復(fù) pdf,下載你需要的各種學(xué)習(xí)資料。

          在這種情況下,你仍然需要學(xué)習(xí) Swift 和 Kotlin。


          客戶不想要它


          作為可能的解決方案,我們?cè)鴰状螌?Flutter 推薦給客戶,而客戶一直反對(duì)這種想法——尤其是當(dāng)他們想利用自己內(nèi)部的 JavaScript 開發(fā)人員時(shí),就像我前面提到的那樣。

          但請(qǐng)放心:他們也提到了我上面列出的幾乎所有問題。


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


          上面談到的這些內(nèi)容可能會(huì)讓你相信,F(xiàn)lutter 可能不是你項(xiàng)目的最佳選擇。

          但我并不是這個(gè)意思。你只需要認(rèn)識(shí)到它的局限性即可。

          在我看來,F(xiàn)lutter 最適合小型內(nèi)部開發(fā)團(tuán)隊(duì),這些團(tuán)隊(duì)需要快速創(chuàng)建概念驗(yàn)證應(yīng)用,而這種應(yīng)用在外觀和設(shè)計(jì)上基本上都是非原生的。

          一個(gè)可能的例子是兒童游戲或應(yīng)用,它們有著獨(dú)特的界面,而且外觀上肯定不是原生的。在這種情況下,F(xiàn)lutter 并不能完全模仿 iOS 和 Android 體驗(yàn)的問題就顯得無關(guān)緊要。我在上文提到的需要編寫兩次界面的問題也不復(fù)存在。

          哦,你還需要一個(gè)不介意學(xué)習(xí)全新平臺(tái)和語言的團(tuán)隊(duì)。

          那么……結(jié)論很明顯了。

          Flutter 是一項(xiàng)很酷的技術(shù),但在大多數(shù)情況下,它沒法成為舞臺(tái)上的主角。

          再說一遍,本文只是一種見解。歡迎不同意見,你可以在下面的評(píng)論中發(fā)表自己的意見。(實(shí)際上,其中一些要點(diǎn)已經(jīng)在文章中反饋了。)

          另請(qǐng)注意,我不是 React Native 的粉絲。React 遇到了許多相同的問題,此外還帶來了一些重大的性能損失。

          最后補(bǔ)充一下:我并不是說 Flutter 沒有合適的使用場(chǎng)景。但是,與已知領(lǐng)域中的其他事物一樣,它也存在一些折衷和已知的局限。最后你必須決定你和你的組織是否愿意給這種技術(shù)長期下注。

          感謝閱讀。


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

          如何快速提升 Flutter App 中的動(dòng)畫性能

          Flutter 是移動(dòng)應(yīng)用程序開發(fā)的未來?

          下載!閑魚最新升級(jí)版 Flutter 技術(shù)電子書!


             
          點(diǎn)個(gè)『在看』支持下 
          瀏覽 42
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  日本黄色视频在线 | 国产成人精品久久久 | 午夜黄色视频 | 天天爱天天插 | 黄色成人毛片 |