2020年了,跨平臺開發框架現在怎樣了?

来源:https://www.cnblogs.com/powertoolsteam/archive/2020/04/02/12617362.html
-Advertisement-
Play Games

轉載請註明出處:葡萄城官網,葡萄城為開發者提供專業的開發工具、解決方案和服務,賦能開發者。 原文出處:https://dzone.com/articles/cross-platform-mobile-development-2020-trends-and 多年來,跨平臺移動開發已經獲得了最流行軟體開 ...


轉載請註明出處:葡萄城官網,葡萄城為開發者提供專業的開發工具、解決方案和服務,賦能開發者。

原文出處:https://dzone.com/articles/cross-platform-mobile-development-2020-trends-and

 

多年來,跨平臺移動開發已經獲得了最流行軟體開發趨勢之一的聲譽。這並不令人意外,因為採用跨平臺開發技術使得軟體工程師使用同一代碼就能為不同平臺構建應用程式,從而節省時間、金錢以及不必要的工作。

移動市場的現狀

截至2019年12月,全球活躍網民已超45億。他們每人平均上網時間為6小時42分鐘,相當於每年上網超過100天。
再加上人們越來越渴望從掌上設備中獲取海量的信息,也就為之所以移動應用程式會如此受到歡迎提供了合理的解釋。截至 2019 年,全球移動應用收入達 4610 億美元,預計到 2023 年,付費下載和應用內廣告的收入預計將超過 9350 億美元。

 

移動開發的技術選型

十年前,老闆們必須決定他們的產品將涵蓋哪些移動操作系統:Android、iOS、微軟、RIM或Symbian。而今天,初創公司的創始人正面臨著一個不同的兩難抉擇,由於Android和iOS占據了移動操作系統市場份額的98%,很顯然這兩個系統不容忽視,覆蓋什麼平臺不再是問題。但問題是,構建一個在兩個平臺上都可以使用的應用程式應該採用什麼方法?

每個操作系統對應一種開發環境

顧名思義,用於開發Android用的是Java或Kotlin,用於開發iOS則是Objective-C或SWIFT。作為開發不同應用而使用不同的開發語言,對開發者而言並不是一個好消息。
雖然特定的開發環境對特定的操作系統擁有對資源更高效的調配效率,可防止發生性能問題。但缺點也很顯而易見,你的開發人員需要使用不同的開發語言構建兩個獨立的應用程式,這需要付出更多的時間、金錢和精力。

漸進式Web應用程式(PWA)

其中一個能解決問題的例子是漸進式 Web 應用(PWA),它基本上是模仿原生應用程式行為的一個網站(例如,在發送推送通知、離線工作,或者只是添加到移動設備的主屏幕上)。然而,就像任何其他選項一樣,PWA也不是完美無缺的,因為它們消耗更多的電池,並且不能授予應用使用設備的所有功能。

跨平臺應用程式開發

但還好我們還有一個跨平臺開發的選項,它允許用一段代碼同時為兩個操作系統開發應用。它並不固定使用某一種平臺的編程語言編寫代碼。而且,由於直接使用了系統原生控制項來呈現界面,它能為用戶提供近乎原生平臺應用的使用體驗。

 

我要不要使用跨平臺開發這項技術?

下麵,我會通過一系列維度來幫助你去評估你是否應該採用跨平臺開發這種形式來適配你的業務。

平臺

首先,也是最重要的,您需要決定您的應用程式是需要在一個還是多個操作系統上可用。如果您的目標群是由不同平臺的用戶組成的,那麼跨平臺開發將是首選的解決方案。

另一方面,如果你的用戶群體只是Android或iOS的某一支,那麼用原生解決方案來開發是你的首選。

複雜性

此標準涉及你希望與產品走多遠。解決此問題的一種方法是你的目標是使用MVP測試你的願景,或是你準備使用成熟的應用程式開始運行。您需要回答的另一個問題是產品的功能(例如,訪問移動設備的硬體或特定於平臺的功能)。

原生體驗

你的用戶是否需要使用原生或近似原生的體驗。使用Material Design(Android)或Human Interface Guidance(iOS)來設計的移動應用程式是移動產品對用戶直觀且友好的原因所在。在設計移動應用程式時應要考慮這些,但是,你可以使用跨平臺框架來實現類似的效果。

時間和成本

有一點是肯定的,原生開發成本不低、效率也不高。為不同的平臺構建不同的應用程式需要雇佣更多的開發人員,這可能會導致初創公司在項目初期就超出緊張的項目預算。同時,如果採用跨平臺的方法,你可以將項目外包給一個規模較小但同樣專業的團隊,這既是一個省時的解決方案,也是一個具有成本效益的解決方案。

 

跨平臺移動應用開發的優點(和缺點)

假設你已經得出結論,你更傾向於跨平臺的移動應用程式開發,但是在下決心之前,你需要對此解決方案的優缺點進行徹底的瞭解,沒關係,下麵我逐一為你列舉。

跨平臺移動應用程式開發的好處

更廣泛的市場覆蓋範圍

雖然我們每個人都有自己喜歡的移動操作系統,但個人喜好不會妨礙你業務的成功。讓Android和iOS用戶同時可以使用您的移動應用,能在未來提升更高的收錄打下基礎。

一套代碼

跨平臺開發允許您同時編寫包含多個操作系統的代碼(有時也會有處理平臺差異)。儘管如此,一套代碼肯定會影響軟體開發過程中的所有階段,因為它可能為你節省通常花在修複和升級兩組獨立代碼上的成本。

更高效的發佈流程

儘管只需要一套代碼,但跨平臺應用程式開發仍然需要開發人員考慮處理系統差異的方法,例如發佈應用到平臺商店的過程。

這種方法將縮短從設計到發佈的時間。換句話講,這可以為你節省很大一筆初始項目預算。

平臺一致性

毫無疑問,Android和iOS在用戶體驗和用戶界面方面都有很大的不同,這些差異中的大多數部分都能通過跨平臺開發框架幫你預設處理,這使得設計和實際表現不一致的情況發生的可能性進一步降低。

有什麼缺點?

儘管有上述各種優點,但它也絕不是一點缺點沒有,它的主要缺點包括性能可能較低及略差的用戶體驗和用戶界面等。

 

2020年還有哪些跨平臺移動開發框架值得考慮

雖然跨平臺的移動APP開發有利有弊。但從業務初創的角度來看,優點應該是大於缺點的。而且,隨著對跨平臺移動應用需求的不斷增長,現在可用的工具和框架數量也已經很可觀了。

但選擇過多會令人頭疼,這就是為什麼我們只關註最突出的跨平臺移動開發框架的原因:React Native, Flutter, NativeScript, 和Xamarin。

為了讓你更深入地瞭解是什麼使這些工具成為2020年軟體開發的可選選項,我們將根據以下標準對它們進行打分:社區支持、基於的編程語言、代碼可重用性、性能、界面以及使用它們構建的重要應用程式。

React Native

Reaction Native是Facebook於2015年發佈的開源、跨平臺的應用開發框架。作為2013年舉辦的一場內部黑客馬拉松的產物,它已經成為最受歡迎的原生App開發替代方案之一,擁有2043名GitHub貢獻者,獲得了超過82900 GitHub標星。不斷增長的社區認知度使得找到一支可靠且經驗豐富的開發團隊來承接你的項目變得相對容易。

Learn Once and Write Anywhere

基於React.JS,React Native利用JavaScript(根據2019年Stack Overflow的調查,JavaScript成為了最受歡迎的編程語言),為Android和iOS用戶提供真正原生的應用外觀和體驗。另外,使該框架脫穎而出的是,如果你需要,React Native允許你使用Java、Objective-C或SWIFT編寫部分原生模塊來順利處理複雜的操作,如視頻播放或圖像編輯。

雖然這些組件不能在不同的平臺之間共用,並且需要開發人員做更多的工作,但多達90%的React Native代碼是可以重用的。很好地表明該框架的座右銘不是“Write Once, Use Anywhere”,而是“learn once, write anywhere”。

就GUI而言,React Native可以提供接近原生的用戶體驗,這要歸功於它使用了Android和iOS的本地控制器。它還使用帶有UI元素的ReactJS庫,這有助於加快UI設計過程。在開發移動應用程式時,使此框架值得考慮的另一個原因是,它可用在不丟失應用程式狀態的情況下對UI進行更改。

另一個使React Native成為2020年跨平臺移動開發框架的首選之一,是因為持續的更新,例如近期的版本 0.60 和 0.61 :

  • 多項輔助功能改進。
  • 更清晰、更人性化的開始屏幕。
  • 快速刷新,融合了實時和熱重新載入,從而顯著加快了開發進程。

如上的Release Note只是React Native適應不斷變化的需求其中一個很小的樣本。

 

Flutter

2020年值得考慮的第二個框架是Flutter。它在Google I/O 2017上宣佈,並於2018年發佈,對於跨平臺的世界來說,它現在仍然是一個“新人”。但儘管如此,它已經獲得了超過80500 GitHub星標和絕大多數工程師將其稱為2019年Stack Overflow調查中最受歡迎的三個框架之一,Flutter無疑是一股不可忽視的力量。

Dart是如何使Flutter變得獨一無二的

Flutter 背後的編程語言是 Dart,谷歌稱之為"客戶端優化",適合在任何平臺上"快速構建應用程式"。它於 2011 年推出,是一種響應式面向對象的語言,被開發者認為相對容易學習,其中原因有二:第一,語法上它借鑒了C/C++ 和 Java; 第二,在官方網站上,您可以找到內容廣泛且相當簡單的文檔。值得一提的是,Dart 附帶了大量Flutter 相容軟體包的軟體包,允許您使應用程式更加複雜。

Flutter的一個主要優勢是,它的性能比本文提到的任何其他跨平臺移動開發框架都要好。這歸功於Dart的編譯器和Flutter擁有自己的一套小部件。結果是它能更快、更直接地與平臺直接通信,而不需要JavaScript橋(例如,Reaction Native就是這種情況)。說到小部件:通過Flutter的“UI-as-a-code”方法,它們只用DART編寫,這就提高了代碼的可重用性。

效率與用戶體驗和界面密不可分。如前所述,Flutter不依賴於一組原生組件,而是利用可視化、結構化、平臺性和互動式小部件進行UI的設計,所有這些都由框架的圖形引擎呈現。更重要的是,Flutter留下了很大的定製空間,如果你想要設計一個很完美的UI,它是個很好的選擇。

說到Flutter的更新,最新的穩定版本是在12月12日發佈的,根據官方發佈說明,它合併了來自188個貢獻者的近2000個pull。例如,版本1.12.13中包括的改進:

  • 重大的API變動。
  • 新功能,例如SliverOpacity小部件和SliverAnimatedList。
  • 修複了崩潰和性能問題。
  • Beta版中的Web支持。

這不是一個完整的清單,因為Flutter的目標是讓每年發佈的四個版本中的每一個版本都能為框架的可用性提升一個臺階。

Flutter是一個年輕的跨平臺移動應用程式開發框架,所以它沒有像React Native受到眾多的大公司青睞也是不足為奇的。然而,這並不意味著它不好,截至2019年12月,它也為阿裡巴巴、谷歌廣告、Groupon等眾多公司和業務所採用。

 

NativeScript

如果你要開始開發你的產品,“React Native”和“Flutter”絕不是唯一的解決方案。在 2020 年初,適合您的企業的替代框架也可能是 NativeScript。

這個開源框架於2015年3月公開發佈,並迅速成為廣受歡迎的解決方案。例如,在發佈後的短短兩個月內,它就獲得了3000顆GitHub星標,併在Twitter上吸引了1500多名粉絲的關註。到今天為止,市場上已有超過700個插件可供選擇。

在使用NativeScript構建跨平臺應用程式時,開發人員首先用JavaScript及其超集TypeScript編寫代碼。然後,將代碼庫編譯成各自平臺原生的編程語言。

另外值得一提的是,使用 NativeScript 的開發人員也可以使用第三方庫(CocoaPods 和 Android SDK),而無需包裝。

與React Native類似,NativeScript允許訪問Android和iOS原生API,這對跨平臺應用程式有明顯的積極影響。然而,不同之處在於,前者需要構建橋接API,而後者(用Progress首席開發者倡導者TJ VanToll的話說是“將所有iOS和Android API註入JavaScript虛擬機”)。與Facebook框架的另一個相似之處在於代碼重用,在這兩種情況下都可以達到90%。

 

Xamarin

Xamarin開源框架創建於2011年,這使它成為了這個列表中最“古老“的框架,但直到五年前它被微軟收購時,它才獲得了發展勢頭。截至今天,它號稱擁有超過6萬名貢獻者的社區。

從技術上講,要用Xamarin構建跨平臺的移動應用,需要很好地掌握.NET和C#兩種技術,前者是使用多種語言(包括C#編程語言)、編輯器和庫的開發平臺。Xamarin用一組工具補充了上述平臺,這些工具有助於構建跨平臺應用程式,例如庫、編輯器擴展和XAML。第二種技術是C#,這是一種面向對象的編程語言,它被認為比JavaScript學習起來稍難。Xamarin利用這種編程語言編寫整個應用程式,從後端到原生API,再到業務邏輯。

Xamarin.Native和Xamarin.Forms

Xamarin與其他框架的不同之處在於,它提供了兩種編譯跨平臺移動應用的方式:Xamarin Native(也稱為Xamarin.Android/iOS)和Xamarin.Forms。前一種方法優先考慮共用業務邏輯,並通過使用本機介面控制項實現近乎本機的性能。

後者側重於共用代碼,而不是業務原理,這一方面會導致代碼重用比例增加(使用Xamarin,開發人員可以重用高達96%的C#代碼),但另一方面這樣會降低代碼性能。

您可能已經註意到,跨平臺移動應用程式的性能和GUI密切相關,所以如果我說Xamarin構建應用程式的兩種方法對界面的最終外觀有很大影響,我可能不會感到驚訝。

Xamarin.Android/iOS允許開發人員使用原生控制項和佈局,而Xamarin.Forms基於標準UI元素,允許從單個API設計應用程式,但如果你需要更完美的原生UI,則可能還不夠。

 

2020年跨平臺應用程式開發還值得考慮嗎?

不論如何,跨平臺確實是一個值得考慮和極具前景的方向,特別是我們上面提到的 “React Native”和“Flutter”。

前者是一個成熟而穩定的框架,利用了最流行的編程語言之一,並擁有成熟的大型開發人員社區。後者是一個快速發展的技術,儘管它比React Native年輕的多,它也已經贏得了世界各地許多開發人員的青睞。

但無論您選擇的是“React Native”、“Flutter”還是任何其他框架,跨平臺方法都一定會為您節省時間和金錢,同時能為你最大限度地擴大市場覆蓋範圍。

最後,值不值得考慮,最終還是取決於你的業務目標、預算和時限。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 參考資料:C語言中文網 存儲引擎: 資料庫存儲引擎是資料庫底層軟體組件,資料庫管理系統使用數據引擎進行創建、查詢、更新和刪除數據操作。 不同的存儲引擎提供不同的存儲機制、索引技巧、鎖定水平等功能,使用不同的存儲引擎還可以獲得特定的功能。 註:InnoDB 事務型資料庫的首選引擎,支持事務安全表(AC ...
  • 大體來說,MySQL 可以分為 Server 層和存儲引擎層兩部分。 select * from T where ID=10; 這條查詢語句的執行過程: 外部層: 用戶與server層交互的媒介 一.客戶端【用於連接資料庫,輸入命令/語句】 界面化連接資料庫 輸入 select * from T w ...
  • 什麼是事務 事務的概念 從業務層面上來說,事務就是一個最小的不可分割的單元,通常一個事務對應的是一個完整的業務(比如銀行的轉賬操作)。 為什麼要有事務 仍以銀行轉賬為例加以說明,比如我要從賬號A轉賬100元到賬號B,現在資料庫有一張表account,那麼就意味著需要同時執行兩條SQL語句的更新: 以 ...
  • 導讀 現代大部分的登錄系統都支持郵箱、手機號碼登錄兩種方式,那麼如何在郵箱或者手機號碼這個字元串上建立索引才能保證性能最佳呢? 今天這篇文章就來探討一下在Mysql中如何給一個字元串加索引才能達到性能最佳。 本文首發於作者的微信公眾號【碼猿技術專欄】,原創不易,喜歡的朋友支持一下,謝謝!!! 陳某將 ...
  • 2020/4/2 Mongodb使用的是類似與json字元串的形式存儲數據 [ { key:value }, { key:value }, ] Mongodb使用了不存在的對象,即創建該對象 use db 使用db資料庫 show dbs 查看當前伺服器中寫在磁碟上的資料庫 show tables ...
  • [20200401]優化的困惑5.txt--//春節前對一個生產系統做優化,完成後使用ash_wait_chains.sql檢查,發現control file parallel write有點多。--//當時並沒有在意,總感覺哪裡不對,感覺這套系統磁碟IO有問題,現在有空分析看看。1.環境:> @ ...
  • 動畫運行的原理 任何程式的動畫原理都是一樣的,即:視覺暫留,視覺暫留又叫視覺暫停,人眼在觀察景物時,光信號傳入大腦神經,需經過一段短暫的時間,光的作用結束後,視覺形象並不立即消失,這種殘留的視覺稱“後像”,視覺的這一現象則被稱為“視覺暫留”。 電影就是依靠視覺暫留,在感官上電影是連續的。使動畫有流暢 ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...