uniapp與flutter都是為了解決跨平臺(tái)問(wèn)題的框架
uniapp是從h5 app到小程序一步步發(fā)展過(guò)來(lái)的,也就是走的html的路線。
html從最早的網(wǎng)頁(yè)套殼一步步發(fā)展至今,為了解決早期套殼的體驗(yàn)問(wèn)題,我們嘗試用js代碼調(diào)用原生接口,與原生進(jìn)行交互,出現(xiàn)了一系列如React Native,Cordova,Weex,F(xiàn)ramework7,MUI之類的框架,這些框架的出現(xiàn)進(jìn)一步豐富h5應(yīng)用的功能。但是這些技術(shù)要求很高的優(yōu)化技巧,要走很多坑,在ios的體驗(yàn)尚可,但是Android上由于更新維護(hù)問(wèn)題,js引擎差別很大,早期Android的js引擎極差,這些框架使用體驗(yàn)都不好,當(dāng)然也有硬件方面的原因。而且Android上webview存在性能瓶頸,復(fù)雜應(yīng)用不做預(yù)加載的情況下使用體驗(yàn)真的不好。后來(lái)為了使體驗(yàn)達(dá)到h5所能做的極致,小程序出現(xiàn)了,為了性能,屏蔽了dom,規(guī)定了獨(dú)特的規(guī)范,按照這些規(guī)范去寫(xiě),編譯時(shí)框架提前給你優(yōu)化好,事實(shí)證明這樣做確實(shí)可以提高h(yuǎn)5應(yīng)用的使用體驗(yàn)。
uniapp延續(xù)了小程序的思路,和vue結(jié)合,屏蔽dom,提前優(yōu)化,確實(shí)很好,也做到了跨平臺(tái),這是一款極為優(yōu)秀的跨各種小程序的解決方案,與它自家的h5+結(jié)合也是一個(gè)還算不錯(cuò)的h5+ app的前端框架。但是uniapp的定位中有一個(gè)極大的問(wèn)題,就是小程序與h5 app之間的距離太大了,強(qiáng)跨的體驗(yàn)真是極差,得不償失。舉個(gè)栗子,3d渲染,多人視頻,nfc寫(xiě)卡,這種小程序完全做不到,當(dāng)然uniapp也可以調(diào)h5+ runtime,但是一個(gè)復(fù)雜的移動(dòng)端應(yīng)用可能會(huì)加各種各樣的東西,你完全預(yù)料不到可能出現(xiàn)什么需求,并且這些需求越來(lái)越多的情況下,小程序端與移動(dòng)端分開(kāi)維護(hù)是必然的結(jié)果,強(qiáng)行結(jié)合只能是結(jié)構(gòu)混亂,難以維護(hù)。那么如果分開(kāi)維護(hù),uniapp與前面提到的那些框架并沒(méi)有明顯優(yōu)勢(shì)。
那么接著說(shuō)flutter,flutter與h5技術(shù)棧的思路完全不同,JSCore,V8再怎樣優(yōu)秀,也始終解決不了JavaScript本身語(yǔ)法缺陷和運(yùn)行在瀏覽器的事實(shí)。
===========================
這里我之前寫(xiě)flutter用dart做了一個(gè)渲染引擎,有人言辭激烈的抨擊了我的錯(cuò)誤,后來(lái)我仔細(xì)看了一下資料。
官網(wǎng)上是這樣說(shuō)的
Flutter is built with C, C++, Dart, and Skia (a 2D rendering engine).See this architecture diagram for abetter picture of the main components.
確實(shí),dart只是用來(lái)組織各種控件的一個(gè)工具,這個(gè)圖形渲染是用了這個(gè)叫Skia的圖形庫(kù)
Skia is an open source 2D graphics library which provides common APIs that work across a variety of hardware and software platforms.
這個(gè)Skia,Google旗下,開(kāi)源2D圖形庫(kù),提供了多種軟硬件平臺(tái)的通用API。
確實(shí)是我的錯(cuò),沒(méi)調(diào)查清楚,但是這個(gè)方式還是令我覺(jué)得,很難受。
=================================
也就是說(shuō)flutter和cocos,unity3d一樣,完全可以用來(lái)寫(xiě)游戲,突破60fps,而且自己渲染,大大減少了與原生的通信次數(shù),并且使用 Platform Channels 來(lái)跟系統(tǒng)通信大大豐富了一些偏門(mén)功能的應(yīng)用,去組件庫(kù)看了下tcp直連mqtt都支持了,剛好畢設(shè)會(huì)用到,開(kāi)心。
所以如果你需要跨平臺(tái),技術(shù)選型時(shí)遇到問(wèn)題
1.看需求
如果你的應(yīng)用需求足夠簡(jiǎn)單,像小程序之類的完全可以做到,選uniapp。因?yàn)檎f(shuō)真的,像點(diǎn)單這種功能,誰(shuí)沒(méi)事愿意專門(mén)裝個(gè)肯打雞,coco之類在手機(jī)上,反正我去點(diǎn)單的時(shí)候,能用小程序我就不會(huì)再裝app了,如果有人愿意裝app,稍微改改順便出個(gè)app版看著比較好看。
如果你的需求復(fù)雜,必然要分開(kāi)維護(hù),還是和之前一樣,uniapp是一個(gè)極好的跨各種小程序的解決方案,一次編譯,微信小程序,支付寶小程序,百度小程序,多端運(yùn)行。那app端你可以再選擇h5或者flutter。
如果你需要適配橫屏,建議用flutter,橫屏的交互加上material design的加持,這樣和桌面端就沒(méi)有太大區(qū)別了,目前flutter已經(jīng)可以編譯運(yùn)行在Windows和linux上,雖然目前還很不完善,但是Google的野心和背書(shū)能力讓我覺(jué)得flutter的野心不止于此。未來(lái)能附贈(zèng)一套桌面端,意外之喜。
2.學(xué)習(xí)成本
flutter的學(xué)習(xí)成本主要在Dart,而uniapp主要在vue。說(shuō)真的,我之前做Android和JavaWeb的,Java轉(zhuǎn)Dart真的沒(méi)有壓力,有人說(shuō)flutter嵌套太多,安卓xml布局嵌套不多嗎,公司現(xiàn)在維護(hù)的ERP系統(tǒng)jQuery寫(xiě)的跟使一樣,各種+ " append。
而我一個(gè)傳統(tǒng)Java使用者剛開(kāi)始遇到vue真的難受了好一陣子,這個(gè)this的真是vue里令我最難受的,使一樣。推薦周?chē)瑢W(xué)學(xué)uniapp,學(xué)過(guò)C++,Java的普遍反映也是vue看不懂。你們?cè)僖膊皇窍駄Query一樣好單純好不做作的前端了。
總之前端的uniapp學(xué)習(xí)成本低,學(xué)過(guò)后端Java,C++的,flutter上手成本低。
3.社區(qū)
剛開(kāi)始Google要出Fuchsia OS的時(shí)候我還嗤之以鼻,真當(dāng)程序狗們都會(huì)乖乖聽(tīng)你話嗎,那win phone墳頭草都老高了。沒(méi)想到啊,你們?cè)缭谔O(píng)果罵安卓垃圾的時(shí)候就想著今天了吧。
Google在安卓界的背書(shū)能力感覺(jué)跟Spring在JavaWeb界的背書(shū)能力不逞多讓,只要Android和Fuchsia不死,F(xiàn)lutter應(yīng)該不會(huì)有太大問(wèn)題,而且Flutter的社區(qū)是真的真的真的很活躍啊,github上問(wèn)題的解決速度和出視頻的速度真是令我嘆為觀止。
相比之下DCloud出MUI到現(xiàn)在不慍不火就讓我不禁對(duì)uniapp有些擔(dān)心,雖然微信,支付寶在后面背書(shū),希望一群國(guó)內(nèi)一線大廠們能給力點(diǎn)吧。而且我在uniapp提的問(wèn)題一個(gè)多月了,無(wú)人問(wèn)津
【報(bào)Bug】使用小程序組件,當(dāng)參數(shù)為函數(shù)時(shí),傳不過(guò)去 - DCloud問(wèn)答
希望你們珍惜你們的銀牌贊助者。而且出視頻的速度一言難盡,看B站居然沒(méi)有,講道理一個(gè)好的教學(xué)視頻真的很重要,干啃API在學(xué)習(xí)時(shí)真是費(fèi)力不討好的事情,你學(xué)習(xí)的思路和文檔的思路是不一樣的。不過(guò)uniapp的QQ群倒是很火,不管怎樣,一個(gè)國(guó)產(chǎn)的優(yōu)秀產(chǎn)品,希望你們能有一個(gè)好的未來(lái)。
免費(fèi)電話報(bào)價(jià):13699511075
咨詢熱線
13699511075
ADD/ 江西省南昌市南昌縣小藍(lán)經(jīng)濟(jì)技術(shù)開(kāi)發(fā)區(qū)金沙三路1888號(hào)
EMAIL/ 865427615@qq.com