小程序也屬于App的一種,那么它和我們現在流行的原生App(iOS、Android)相比,有什么區別和優勢呢?
首先,從技術上來講,目前App的主流開發方式有三種:Web App、Native App和Hybrid App。我們舉幾個例子來看看:
·Web App
在微信“發現”里面有一個“購物”入口,點擊進去打開的是京東的移動購物頁面,這個頁面實際上就是一個Web App。支付寶的眾多小服務也是Web App,還有“海底撈”在微信中的排號應用,這類App其實就是我們經常在PC上瀏覽的網頁,只不過加入了響應式的設計讓它適合在移動端顯示和運行,所采用的技術依然是JavaScript、CSS和HTML。相對于其他兩種App,Web App具有開發簡單、高效,更新靈活、跨平臺,大量的網頁應用稍作調整即可放在移動端運行。但缺點與優點并存,Web App性能、體驗極差(對,是極差),無法使用照相機、系統通知、本地緩存等原生特性。
·Native App
也稱為原生App。這種App不是采用JavaScript、CSS及HTML開發,而是使用Objective-C(iOS)或者Java(Android)開發。微信、支付寶、斗魚TV等都屬于這類App,是目前主流的開發方式。Native App具有性能、體驗非常良好,組件支持完善、接口豐富等特點。但Native App最大的缺點在于,不能跨平臺,有多少個平臺就要開發多少個版本,現在主要有iOS和Android兩個主流平臺,還好Windows Phone已沒了蹤影。
·Hybrid App
也稱為混合式App。Hybrid App看上去像一個 Native App,但實質上 Native技術在這里只是作為一個容器,將 Web App包裹了起來,在容器內部實質上運行的還是網頁。 Hybrid App更像是Web App與Native App的混合體。與純粹的Web App相比,Hybrid App會有一部分訪問原生組件(相機、加速器)的能力。事實上,目前主流的應用中,純粹的原生App很少,絕大多數都屬于混合式App。比如,我們常見的京東、淘寶等電商類App,由于商品及業務變化非常頻繁,需要經常調整,所以這類App的主要頁面都是采用Web技術來構建,只是用Native包裝了一下。那我們如何界定,哪些App屬于“原生”哪些App屬于“混合”呢?答案是:看Web頁面在App中所占的比例,如果絕大多數頁面都采用Web技術構建,那么我們稱為混合式App;而如果只有少數頁面采用Web技術,我們稱為原生應用。舉個例子,今日頭條這類新聞應用中絕大多數頁面都采用原生技術實現,我傾向于稱它為Native App;而對于淘寶、京東等App,更傾向于是Hybrid App。Hybrid App具有接近于 Native App的體驗、開發效率高、跨平臺等特性。
有一些開發者認為微信服務號里的網頁應用也屬于Hybrid App,這種說法也不無道理。因為這些網頁應用也屬于微信這個Native應用的一部分,同樣運行在微信內置的瀏覽器中,但這是一個App所有者的問題。對于微信,確實是Native App中加入了部分“網頁”,具有Hybrid App的特點。但我們上面講到,目前主流App里很少有純粹的Native App,是不是算作Hybrid App,應該看Web頁面在App中的所占比例。微信是一個以社交為主要業務的App,微信中的絕大多數核心社交與聊天功能都是原生的,所以我們還是稱微信為Native App。但是,對于服務號應用的開發者,微信并不是開發者開發的,開發者只擁有其服務號。而且服務號應用所用到的所有技術都只局限在Web技術里,從這一點來講,服務號的應用應該歸屬于Web App的范疇。
此外,我們說Hybrid App具有一部分可以訪問原生設備組件的能力。微信的JS-SDK確實提供了一些如拍照、錄音、掃一掃等功能的接口,但相比于其他Hybrid App能調用的原生功能,實在是有限。從這個角度來講,也應該將這些服務號的應用歸屬到Web App中。
其實,到底歸屬于什么并不重要。互聯網技術中的概念層出不窮,對很多事物的定義本來就不是很明確。這里用一些篇幅解釋3種主流類型的App,是希望大家在對比小程序和其他類型App時,能有一個較完整的知識背景。
那么小程序屬于以上3種的哪一種?嚴格意義上來說,它不屬于以上3種中的任何一種,在實現技術上小程序同傳統的Hybrid還是有很大的不同的。小程序采用Java Script和CSS這類常見的Web技術開發,但它又不使用HTML,它同Web沒有直接的聯系。小程序實際上是將一系列自己定義的組件編譯成了對應平臺(iOS、Android、PC)的相應可運行組件,以提高運行性能。如果一定要將小程序歸并到以上3類App中,可能Hybrid App更合適:非原生,但使用到了Web技術(JavaScript和CSS)。
相比于Native App,小程序具有Hybrid App的一些優勢:
·跨平臺(對于iOS和 Android兩個平臺只需要開發一套程序)。
·具備接近于Native App的體驗(注意只是接近)。
·對原生組件有訪問能力。
·具備緩存能力。
·上手容易,開發邏輯較為簡單。
同時,小程序還具有一些它獨有的特點:
·小程序在設計時就做了很多約定式的規范:比如簡單的文件結構、默認的文件命名、內置好的Tab欄與導航欄等,這讓小程序的初學者更容易上手和理解。
·開發環境很干凈,你無須安裝任何除開發工具外的其他軟件。當然現在這個工具簡陋的可怕,很多常見的IDE功能都不具備,但相比于其他Hybrid App的環境要求,小程序這點真的很棒。
·發布和部署流程非常簡單,幾乎是“傻瓜式”,點擊幾下就可以將應用發布到騰訊云。
·小程序之所以在公布后引起了互聯網圈兒和開發者們極高的關注度,原因并不在技術上,無數開發者、創業者看中的是微信天然的關系鏈與獲客能力。這也是小程序最大的優勢。
但是,世間沒有完美的事物,計算機世界里也沒有完美的技術,你以為的優勢在另一方面卻成了缺點。我們一起來看下:
·小程序為了簡化復雜性,做了一些UI上的設計規范,確實方便了很多對UI要求不高的應用。但這也限制了那些對UI要求極高的產品發揮。
·小程序很遺憾地不支持現有的HTML DOM結構,而是自己給出了一系列的組件,造就了一個封閉的開發環境,這直接導致了現有的經典Java Scripti框架、類庫都無法使用。小程序現在的生態幾乎是荒蕪一片,等待著開發者們去耕耘(挑戰與機遇并存,正因為沒有,才有機會)。如果你想用小程序實現一組圖形來展現股票或者天氣的曲線,目前來看,相當煩瑣。你無法使用經典的eckart或者highchart,你只能自己用Canvas來一點點地繪制。
·截至至今,小程序還不支持Web View,這是相當頭疼的一個問題。現在很多新聞類型的應用,都是將文章數據靜態化成HTML存儲在服務器或者是CDN中,然后再利用Web View直接加載這個HTML來顯示。不支持Web View直接導致了很多內容型應用沒辦法加載已存在的大量HTML頁面。內容型應用現在大量的靜態化頁面需要被轉化(已有一些第三方的組件實現了HTML轉WXML,基本思路是用正則表達式替換HTML,但效果并不能讓人滿意)。至于微信會不會官方支持,這個很難抉擇。不支持Web View對現在的靜態化HTML頁面是致命的打擊;但兼容Web View就意味著在小程序里你還可以運行Web App,而Web App很難去監管,性能體驗也不夠好,這對于小程序的發展是不利的。也許開放一個只解析CSS不允許運行JavaScript的Web View可能是個不錯的選擇,微信如何平衡這個問題,我們拭目以待。
·小程序只實現了模板化并沒有實現自定義組件,這是最令人不滿意的地方。如果我們想實現一個自定義邏輯的組件,通常希望把這個組件的標簽、樣式以及業務邏輯打包在一起,然后可以放在項目中多個地方使用。外部客戶端調用組件時,只需要傳入組件所需要的參數,由組件自己來完成數據獲取、轉化、綁定并和UI層通信等操作。但小程序里的template只能將標簽和樣式(WXML和WXss文件)提取出來作為一個模板”,卻無法把組件的業務邏輯(js文件)放在一起。也就是說,組件的業務邏輯不能夠寫在組件的模塊兒中,只能寫在“調用”組件的業務代碼中,這就無法很好地復用組件的業務代碼。
我們用表格來對比小程序和現在主流App的優劣勢。