原文地址:https://ant-move.github.io/we...html
這裏說的去除小程序框架其實並不嚴謹,由於小程序自己也算是一個框架,並且是一個功能更加完善的框架系統。在前端的概念中,咱們通常說一個框架是指一個用來幫助開發者構建用戶界面的框架,而小程序框架自己不只僅包含了 UI 層的功能,還提供了 API 能力、服務端的能力,因此說小程序框架自己是一個比常規的前端框架更完善的東西,或者說是一個完善的構建應用系統。
本文中所說的原生小程序與小程序框架的對比,均指與第三方小程序框架的對比。
在小程序的世界裏,原生小程序框架已經足夠好,它就是那把給你雕刻小而美應用的雕刻刀,而沒必要要去尋找一把屠龍刀。前端
最近 Vue 做者尤大關於框架設計平衡的分享中也提到了框架的取捨問題。vue
當咱們去構建一個複雜的前端應用的時候,若是沒有工具,而是使用原生 JavaScript 去開發的話,那隻會花費更多的時間。
對小程序來講,原生小程序框架就是咱們的工具,它足以用來構建一個複雜的小程序應用。
小程序框架在小程序生態發展的初期的確起到了很大的促進做用,然而隨着小程序原生框架的不斷完善,這些小程序框架的做用已經再也不具有優點。
框架的確給前端帶來了生產力的提升,也帶動了前端界生態的發展。因此在小程序出現以後,一股框架之風也很快的出現,微信小程序剛推出以後,就出現了兩個比較出名的小程序開發框架,wepy、mpvue。這兩個框架都帶着一個共同的出發點,那就是將前端框架的開發體驗移植到小程序開發中,從語法層作了改動,使用用戶能夠採用相似 Vue.js 風格的語法去開發微信小程序。react
這些小程序框架初期主要作的是對小程序原生開發體驗的加強,隨着小程序生態的發展,又增長了跨端開發能力的支持。然而咱們框架的引入真的加強了開發體驗嗎?咱們是否真的須要跨端能力?是否須要經過引入框架的形式來實現跨端支持?git
答案是否認的,引入框架對於小程序開發來講只會帶來更多的問題。github
以下是原生小程序與 Web 框架功能的對比狀況,能夠看到 Web 框架具有的能力,原生小程序也具有。web
小程序出現的時候 Web 框架已經發展的比較成熟,因此能夠簡單猜想小程序的框架借鑑了許多 Web 框架的特性,這也是爲何小程序開發方式與前端開發方式如此接近的緣由。
模塊 | Vue.js | React.js | 原生小程序 |
---|---|---|---|
數據監聽 | 支持 | 支持 | 支持 |
組件式開發 | 支持 | 支持 | 支持 |
組件庫 | 開源組件庫豐富 | 開發組件庫豐富 | 原生小程序組件支持 |
數據狀態管理 | vuex | redux | globalData 可實現基本的數據管理 |
路由 | vue-router | react-router | 原生支持 |
模塊開發 | npm | npm | npm(有輕微的約束限制) |
在開發前端應用的時候,Vue 和 React 技術棧是比較流行的兩種類型,而對於選擇什麼樣的生態工具時,許多開發者並不肯定選擇什麼樣的技術棧,因此通常都會選擇 Vue 全家桶和 React 全家桶。原生小程序框架從能力上就考慮了小程序場景所需的技術棧,這也是筆者推崇原生小程序開發方式的緣由,若是你對你當前構建的應用場景須要什麼樣的技術棧特別清晰,那麼就用原生的好了,由於原生小程序框架就是基於小程序場景開發的。選擇什麼樣的技術棧,提供什麼樣的框架能力,這應該是小程序平臺團隊去思考的問題。vue-router
從上面的功能層級對比咱們能夠發現,原生小程序與框架相比,功能是很是接近的,簡單來講就是同一個物種,只不過是花貓、白貓的區別。那麼除此以外,原生小程序還有哪些優點呢?vuex
原生小程序由專業的小程序團隊維護更新,這是社區開源項目沒法比擬的。即便是熱門的開源項目也難保不會出現停滯更新維護的狀況,也許有一天你就發現代碼中的坑只得你本身的修復。npm
原生小程序還處於快速發展的階段,每過一段時間就會發布新功能,若是使用原生小程序開發的話就能夠及時的享用,而若是依賴於三方框架的話,只得依賴於框架做者更新以後才能使用。
做爲一個開發人員,有時候選擇一個什麼樣的框架是很難的,若是你想正確的選擇框架,就得必需要了解框架所作的一些內部權衡,你必須知道這個框架朝着哪一個方向發展,而且知道它與你構建的東西是否一致。而對於小程序來講,上述的問題其實不存在,小程序框架就是小程序平臺團隊爲你量身打造的。
想了解更多小程序框架能夠查看以下三個框架:
WePY 讓小程序支持組件化開發的框架 WePY 框架在開發過程當中參考了 Vue 等現有框架的一些語法風格和功能特性,對原生小程序的開發模式進行了再次封裝,更貼近於 MVVM 架構模式, 並支持ES6/7的一些新特性。
mpvue 是一個使用 Vue.js 開發小程序的前端框架,目前支持 微信小程序、百度智能小程序,頭條小程序 和 支付寶小程序。 框架基於 Vue.js,修改了的運行時框架 runtime 和代碼編譯器 compiler 實現,使其可運行在小程序環境中,從而爲小程序開發引入了 Vue.js 開發體驗。
Taro 是一套遵循 React 語法規範的 多端開發 解決方案。使用 Taro,咱們能夠只書寫一套代碼,再經過 Taro 的編譯工具,將源代碼分別編譯出能夠在不一樣端(微信/百度/支付寶/字節跳動/QQ小程序、快應用、H五、React-Native 等)運行的代碼。
繼微信小程序推出後,阿里,百度,頭條也推出了本身的小程序平臺,這就給小程序開發者帶來一個問題,是每一個平臺開發一套仍是尋求代碼複用的技術方案。
其實跨端方案不少,現有的小程序框架大多都內置了跨端能力支持,對於跨端支持能力要求並非特別高的團隊,也能夠搭建本身的跨端方案,由於這些小程序框架都很相似,因此說搭建一套針對特定場景的跨端方案也變得可行。
Antmove 是一個致力於提供通用型小程序跨端的解決方案,經過代碼編譯的手段和 runtime 的處理,實現小程序跨平臺的目的,Antmove 與其它小程序開發框架的區別就是,它儘量的經過代碼編譯的方式來解決多端差別問題(一個平臺的代碼轉換到另外一個平臺),編譯方式難以處理的纔會進行運行時的抹平,而這部分只有簡單的數據轉換處理,不會引入特定的編碼約束。
以微信小程序轉支付寶小程序爲例,微信小程序和支付寶小程序底層設計不一樣,致使雙方組件機制不同,微信小程序組件間的通訊是基於事件的,而支付寶小程序是基於 props
的。在將使用了微信小程序事件能力的小程序應用轉換爲支付寶小程序應用的過程當中,Antmove 不會去構造一套事件機制,它儘量的避免任何沒必要要的運行時開銷,而是利用支付寶小程序的 props 機制去實現一樣的功能。