從微信發佈小程序以來,各大公司紛紛跟進都想從微信這個流量池裏撈一杯羹。我司也不例外,咱們整個前端團隊這半年來基本上都是在開發小程序。前先後後也開發了四五個小程序了。總以爲要留下點什麼,既是記錄那些年咱們踩過的坑,也是但願你們別再掉坑。css
css樣式不能引用本地圖片資源,只能引用線上資源(background-image
),引用本地圖片資源只能用<image>
標籤。html
{{}}
不能執行函數方法,{{}}
只支持基本的簡單運算和ES6拓展運算符。如價格格式化這種經常使用的處理,只能在js代碼中處理好而後再模板中渲染。前端
this.setData({
price: this.formatPrice(this.data.price)
})
複製代碼
能夠經過wxs
模塊解決{{}}
中不能執行函數的問題。能夠作到模擬vue.js中過濾器的功能。vue
<!-- wxml模板 -->
<wxs src="../../modules/formatPrice.wxs" module="tools" />
<view>價格:{{tools.formatPrice(price)}}</view>
複製代碼
// wxs模塊
var formatPrice = function (price){
price = price >> 0;
return Number(price / 100).toFixed(2);
}
module.exports = {
formatPrice
}
複製代碼
小程序不支持分享連接到朋友圈,暫時的通用作法是生成保存有頁面小程序碼的圖片到本地相冊。又用戶自行發朋友圈轉發。前端能夠利用canvas
來實現,減輕服務端壓力。可是會有圖片鋸齒不清晰的問題。建議預覽圖和保存到真機的圖片採用不一樣的尺寸。保存在真機的圖片按照750的寬度實現。相比於預覽圖要大一些,這樣保存到手機的圖片會清晰不少。ios
小程序佈局採用rpx單位,UI稿按照750的寬度出圖。可直接使用UI稿的尺寸。可是在某些機型上1rpx
會沒法顯示。能夠用H5的方式實現1px效果。web
iphoneX吸底按鈕的適配,能夠用媒體查詢,也能夠經過wx.getSystemInfo
獲取機型來判斷。參考npm
@media only screen
and (device-width : 375px)
and (device-height : 812px)
and (-webkit-device-pixel-ratio : 3) { }
複製代碼
頁面A -> 頁面B,頁面B的操做觸發了頁面A的數據更新。返回更新頁面A的數據,一般有兩種方式來實現(我司採用了方案二):編程
複雜組件的開發,省市區三級聯動選擇器的開發,獲取微信地址庫的地址的編碼和業務採用的省市區編碼對不上。canvas
頁面路徑的層級,最大不能超過10層。小程序
小程序小程序分包加載,微信對小程序包的大小有以下限制。
- 整個小程序全部分包大小不超過 8M
- 單個分包/主包大小不能超過 2M
wepy應該算是最先發布的小程序開發框架,提供了類vue.js的語法風格和特性,現階段應該也是應用最普遍的框架吧。我開發的幾個小程序也都是採用了wepy這個框架。我先來講說當初爲何選擇這個框架的緣由吧。
前期使用wepy的過程當中,wepy自帶bug。不過好在開發者響應及時,基本上都能覆蓋大部分場景。
可是有個最大的坑點就是,wepy組件的實現方式。組件使用的是靜態編譯組件,即組件是在編譯階段編譯進頁面的,每一個組件都是惟一的一個實例。 多個組件共享同一個數據。而且靜態編譯組件。致使組件A,在頁面A和頁面B被引用,會copy兩份代碼到頁面A和頁面B內部。致使拆分組件並無對包的體積有任何減小。後期微信官方API支持組件化編程後,咱們逐步把一些比較核心,體積較大的組件用原聲API重構了。
由美團團隊開發,mpvue和wepy同樣也是在小程序上提供了類vue.js的開發體驗。做爲後來者,搶佔了不少wepy的市場份額(ps:咱們團隊近期也在考慮從wepy遷移到mpvue)。這個框架的原理相比wepy要更加複雜一點,mpvue 修改了 Vue.js 的 runtime 和 compiler 實現,提供了更加接近於vue.js的開發體驗。
Taro是由京東團隊開源的一套遵循 React 語法規範的多端開發解決方案。自己我對React和Taro都不是很瞭解,就很少解釋了。具體能夠看開發團隊的博客和代碼瞭解更多細節多端統一開發框架 - Taro
我想從技術的角度來談談我對微信小程序的理解,我以爲小程序自己是一個很是優秀的Hybrid App的技術方案。有不少值得學的地方,能夠應用到咱們Hybrid App的技術方案設計中來。瞭解和學習小程序技術原理也能更好的優化咱們的代碼。
獨立的JS運行環境,相比於webview同時處理頁面的渲染和JS的執行帶來了一些好處:
壞處在於:
離線包加載,常見的Hybrid App經過webview加載H5頁面,前端頁面都是放在服務器端。雖然說保證了靈活性。可是加載性能收網速影響大。頁面切換白屏時間長。小程序離線包的加載方式。一次性加載全部的前端資源到本地再解壓。大大提高了用戶體驗。不過微信官方爲了防止下載離線包的時間過程,也嚴格限制了小程序包的體積。(分包加載狀況下子包大小不能超過2M,也就是初次打開加載的資源不能超過2M)
多webview的頁面架構,小程序每新開一個頁面,都會用一個新的webview來渲染。爲了防止webview對內存的消耗。小程序限制層級不能超過10層。
預加載webview,微信會預加載多一個wkwebview(ios平臺)放後臺,用戶打開小程序時省去初始化wkwebview時間。