老孟導讀:你們好,這是【Flutter實戰】系列文章的第一篇,這並非一篇Flutter技術文章,而是介紹智能手機操做系統、跨平臺技術的演進以及我對各類跨平臺技術見解的文章。react
後浪們可能都沒有據說過塞班系統,而不少前浪們也會詫異,塞班是智能手機操做系統嗎?讓咱們先來看下智能手機的定義:android
智能手機,是指像我的電腦同樣,具備獨立的操做系統,獨立的運行空間,能夠由用戶自行安裝軟件、遊戲、導航等第三方服務商提供的程序,並能夠經過移動通信網絡來實現無線網絡接入的手機類型的總稱。目前智能手機的發展趨勢是充分加入了人工智能、5G等多項專利技術,使智能手機成爲了用途最爲普遍的專利產品。ios
因此按照如上的定義,塞班系統屬於智能手機操做系統,那爲何不少人都認爲塞班系統不屬於智能手機操做系統呢?主要是由於塞班和如今的Android、iOS智能系統比起來差遠了。git
雖然如今塞班系統已經Game Over了,但當年塞班系統是當之無愧的王者,根本就沒有一個與之匹配的對手。小程序
2008年12月2日,塞班公司被諾基亞收購。windows
2011年12月21日,諾基亞官方宣佈放棄塞班品牌。因爲缺少新技術支持,塞班的市場份額日益萎縮。微信小程序
截止至2012年2月,塞班系統的全球市場佔有量僅爲3%。react-native
2012年5月27日,諾基亞完全放棄開發塞班系統,可是服務將一直持續到2016年。瀏覽器
2013年1月24日晚間,諾基亞宣佈,從此將再也不發佈塞班系統的手機,意味着塞班這個智能手機操做系統,在長達14年的歷史以後,終於迎來了謝幕。服務器
至此,塞班時代終結,一個時代的終結,必將伴隨着新時代的到來。
Windows Phone(簡稱爲WP)是微軟於2010年10月21日正式發佈的一款手機操做系統,初始版本命名爲Windows Phone7.0。
2019年12月10日這一天,微軟宣佈中止對Windows 10 Mobile的支持,也就宣告Windows 10 Mobile告別了歷史的舞臺。
Windows Phone當年的市場份額一度超過50%,到退出歷史的舞臺,在我看來微軟犯了一個很大的錯誤:
那就是Windows Phone 8的發佈,因爲使用了新的內核致使之前的手機沒法升級並且軟件不向下兼容,致使用戶和開發者極度不爽,用戶剛買了手機,結果你告訴用戶系統不能升級?
新系統致使之前開發的App沒法運行,開發者從新開發一遍?並且還要維護兩套?
系統最核心的資產是生態,當你拋棄了開發者也就意味着生態的殘缺,沒有大量優質的應用用戶怎麼可能買你的手機?
Android系統你們都很是熟悉了,畢竟是當前市場份額最大的移動操做系統,看一下Android的發展歷程:
iOS是由蘋果公司開發的移動操做系統 。蘋果公司最先於2007年1月9日的Macworld大會上公佈這個系統,其發展歷程以下:
2008年7月IPhone推出第一代手機IPhone 3G,同年9月谷歌正式發佈了Android 1.0系統,標誌着咱們正式步入移動端發展期,按照技術開發的歷程移動端(目前特指Android和iOS)的發展大體能夠分爲4個階段:原生階段->Hybird階段->RN階段->Flutter 階段。
使用原生語言(Android使用Java或Kotlin,iOS使用Objective-C 或 Swift )開發應用,稱之爲原生階段。
在此階段發現同樣的功能須要在Android和iOS兩端開發,開發和維護成本較高,同時無動態化更新能力,緊急問題的修復和添加新功能都須要到相應平臺發版,尤爲是iOS審覈的週期很是長,在國內Android雖然有動態化方案,但若是上架Google Play頗有可能審覈不經過或者下架,iOS也有動態化,但蘋果官方基本審覈不經過,因此原生的動態化更新受政策影響很大。
從開發者的角度出發,是否有一種方案能夠開發一套代碼在多個平臺運行且能夠動態化更新,無需在走平臺的審覈。基於這個需求H5興起,也就是咱們所說的Hybird階段。
Hybird實現的基本原理是經過原生的WebView容器加載H5網頁進行渲染,經過JavaScript Bridge調用一部分系統能力,同步更新服務器上的H5網頁也實現了動態更新,俗稱混合應用。
當時大量的公司使用此方案進行開發,最出名的就是Facebook,早期的Facebook在H5上投入了大量的精力,一次開發、快速迭代這是使用H5技術巨大的優點。
然而一切看似美好,但很快發現,H5方案存在致命的缺陷-用戶體驗極差。
Facebook創始人兼CEO馬克·扎克伯格在接受採訪的時候認可:專一在HTML 5上面是他有史以來犯過的最大的錯誤。
然而福兮禍所伏,雖然在Facebook上大量使用H5而致使用戶體驗極差,但Facebook基於強大的H5技術積累開發出了偉大的React框架,此框架是React Native框架的基礎。
React Native簡稱RN,是FaceBook在2015年開源,基於 JavaScript,具有動態配置能力跨平臺開發框架。React Native框架原理以下:
React Native 使用React開發,而後生成虛擬DOM樹,虛擬 DOM 是一個 JavaScript 的樹形結構,經過虛擬DOM樹映射到不一樣平臺的本地控件,最終顯示的UI是原生控件,所以在性能體驗上和原生很是相近。和React Native 相似的框架還有阿里巴巴的Weex框架,Weex是在React Native基礎上從新設計了一套開發模式,原理上和React Native 同樣。
React Native 解決了繼承了H5的優勢,同時解決了性能體驗上的問題,2015年React Native一經發布,就在技術圈引發了巨大的反響,在當時看來React Native 是一個很是完美的跨平臺解決方案,很快大量開發者涌入。
當年使用React Native 的開發者最擔憂的不是React Native 性能如何?體驗如何?而是擔憂蘋果會不會封掉React Native,可想而之React Native 的火爆程度,當年著名的JSPatch事件起初,起初你們都在說蘋果開始對React Native下手了,雖而後來證明和React Native無關,但多多少少都對React Native 開發者形成了必定的影響。
隨着時間的流逝,發現React Native 和原生橋接的成本很是高,在複雜場景下會出現嚴重的性能問題,好比早期的ListView滑動卡頓問題。
React Native要橋接到原生控件,但Android和IOS控件的差別致使React Native沒法統一API,有的屬性IOS支持,Android不支持,有的Android支持,IOS不支持,這就致使常常須要開發Android和IOS兩套插件,隨着項目的複雜度提高,也致使維護成本大幅提高。
還有一個很大的問題就是React Native 依賴於 Facebook 的維護,而每次iOS和Android系統版本更新,很大程度上會受到影響。
從技術上來講,小程序(指微信小程序,下同)並非新的跨平臺方案,它使用瀏覽器內核來渲染界面,小部分由原生組件渲染,原理圖以下:
小程序的運行環境分紅渲染層和邏輯層,通訊會經由微信客戶端(Native)作中轉。
微信小程序目前來看是很是成功的,在我看來微信小程序成功主要緣由並非由於技術,而是生態,固然微信小程序體驗也是很是好的。
對商家來講,微信小程序擁有月活10億的微信用戶,獲客成本低,這是一個流量極佳的平臺,所以不少商家開發了體驗極好的小程序,甚至一些商家把主要平臺遷移到了微信小程序。
對於用戶來講,無需下載,用完就走,極大的提高了用戶體驗,微信提供基礎服務平臺,商家獲客成本低,用戶體驗提高,三方造成完美的平衡,所以微信小程序的生態愈來愈完善。
除了小程序外,相似的方案還有百度的輕應用和快應用,但都不溫不火。
千呼萬喚始出來,主角-Flutter終於登場了,Flutter是谷歌的移動UI框架,能夠快速在iOS和Android上構建高質量的原生用戶界面。
Flutter吸取了前面的經驗,它既沒有使用WebView,也沒有使用原生控件進行繪製,而是本身實現了一套高性能渲染引擎來繪製UI,這個引擎就是大名鼎鼎的Skia,Skia是一個2D繪圖引擎庫,Chrome和Android都是採用Skia做爲引擎。Flutter完美的解決了跨平臺代碼複用和性能問題,你們都在感嘆:彷佛UI迎來了終極解決方案。
Flutter並非無所不能的,當你選取Flutter做爲技術方案時,首先要了解Flutter沒法實現哪些功能。
因爲Flutter使用本身的引擎進行UI渲染,而不是用原生控件渲染,致使控件顯示效果和原生不是徹底同樣,雖然肉眼看起來基本同樣,但仍是有一些細微的差異,尤爲當Android和iOS系統升級致使原生控件效果發生變化時,Flutter開發的App並不會進行相應的變化,若是您的App須要原生控件保持徹底一致,Flutter可能並不適合您。
動態化功能在國內來講是一項很是重要的功能,Google官方已經明確現階段不會實現動態化功能。
此功能並非技術上沒法實現,更多的仍是政策和法律上的約束。
所以若是您的App須要動態化功能,那麼Flutter可能並不適合您。
既然Flutter已經如此優秀了,那是否是之後使用Flutter就能夠了呢?答案是否認的,將來很長一段時間應該是原生、Hybird、React Native、Flutter共存時代。
老孟Flutter博客地址(330個控件用法):laomengit.com
歡迎加入Flutter交流羣(微信:laomengit)、關注公衆號【老孟Flutter】: