grace和wepy都是輔助小程式開發的開源庫,本文對兩者做個對比。
注:本文是作者本人的一些拙見,純粹的技術討論,不想引起技術信仰之爭,歡迎積極、正向的討論及建議。
如果你還不瞭解Grace, 請參考:微信小程式開發神器-Grace
Github: https://github.com/wendux/grace
自小程式釋出後,現在最著名的小程式開發框架就是wepy, 它藉助一系列工具,通過預編譯的手段實現了和Vue接近的開發風格,可以認為wepy更就是小程式的 vue(但還有一些不同,如佈局模板),首先,必須承認wepy是一個好的框架,如果你是Vue開發者,如果要開發一些大的小程式專案,wepy應該是你的不二之選。但是我們換個角度,考慮下面兩個問題:
小程式開發者來源
- 來自前端開發者
目前來看,如果是一名前端,那麼很可能用過Angular/React/Vue中的一個,首先,如果你沒有用過Vue, 那麼要使用wepy的學習成本接近於學習Vue的成本,這是第一點,學習成本會大一些。其次對於對Angular/React有強烈信仰的開發者來說,他們可能會問一聲,小程式就小程式,為什麼非得弄成Vue. 在web開發時正宗的Vue都不用,會為了開發小程式再去學習一下wepy?
- 非前端開發者
在小程式釋出後,想必大多數程式設計師都想嚐嚐,而並非只是前端程式設計師,對於這部分開發者來說,大都會採用小程式原生開發,他們基本不肯能再去學習一個像Vue同等規模的前端框架。
總結一下,站在開發者的角度,wepy 採用了類Vue的開發風格,即是優勢,也是劣勢。優勢是可以讓數量可觀的Vue開發者輕鬆過渡,但缺點是提高了其它開發者的使用門檻。所以,一個輕巧易上手的幫助工具就很有必要,而grace就是這樣的一個工具。
小程式定位
小程式的定位本身就是“觸手可得,用完即走”, 解決想幹個啥都得下個APP的歷史現象。有了小程式後,不用裝太多APP,只有在第一次用的時候花費少量流量下載即可。可以看到,小程式第一次使用時還是要下載,為了減少下載等待時間,節省使用者流量,小程式對程式包的大小設定了上線4M, 這也為什麼小程式中“小”的含義。 微信的這種限制決定了小程式一般只是用於實現核心功能,不會用作複雜功能。這也就決定了,在大多數小程式開發時,我們需要的並不是什麼強拽炫酷吊炸天的大框架,而是一些簡單的幫助工具,而grace的定位就是一個精巧的幫助工具。在筆者瞭解的很多小程式,甚至大都是用原生開發的。
下面總結一下主要區別:
- 定位不同;grace的定位是一個精巧、易用的小程式開發輔助庫,而wepy是一個功能全面的類vue框架.
- grace使用簡單易上手,wepy對不瞭解Vue的開發者有不小的學習成本,並且開發環境依賴多,配置比較複雜。
- grace更貼近於原生,wepy更貼近於web.
下面我們看看Grace都有哪些功能:
Grace可以幹什麼
我們看看grace的特點:
- 輕量、小巧、上手簡單
- 支援和Vue一樣優雅的資料響應式
- 支援資料自動更新、更改快取、批量更新
- 強大的網路功能
- 支援全域性事件匯流排
- 支援跨頁面傳值
- 支援mixins
主打是精巧,可以看到目前核心功能主要涉及三個方面:資料、網路、事件。
資料
小程式是資料與頁面渲染分離的,所以在開發中會有大量的setData
操作,grace為了簡化這大量的顯式資料更新,實現了和Vue一致的資料響應式-可以通過賦值直接更新資料。與此同時,為了避免頻繁setData
帶來的效能消耗,grace不僅支援手動批量重新整理而且grace可以自動跟蹤頁面前後臺切換,如果頁面切換到後臺,則不會再去呼叫setData
,而是將變動先快取,等到頁面切換到前臺,才會統一重新整理,有效避免不必要的效能消耗。
網路
大多數小程式都需會和後臺通過http進行通訊,為此,grace提供了強大、靈活、良好的Promise API,同時支援全域性請求配置、請求/響應攔截器等。更重要的是,Promise風格的API可以支援ES7的async/await。
事件
小程式原生在跨頁面通訊方面比較弱,為此,grace提供了一個全域性事件匯流排,你可以在任何頁面通過註冊/觸發事件來進行通訊。 不僅如此, grace還在事件匯流排的基礎上,實現了更友好的頁面資料回傳的回撥。
除了這些,grace還支援 mixins,提供了一種擴充套件新功能的方式,它可以在全域性給頁面新增一些功能,開發者可以自己發揮。
Grace今後的發展
筆者覺得小程式的量級一般都不會太大,為了避免過度設計,grace會一直保持精巧而易用的原則,不會新增太多使用頻率比較小的功能。如果大家有什麼好建議,或者希望grace新增什麼新功能,都可以在github提issue.
最後,貼出Github地址,如果覺得對你有用,歡迎star, 如果有什麼建議,歡迎issue。
Grace專案地址:https://github.com/wendux/grace