微信,對于大家來說,已經是很普及的一個應用,幾乎大街小巷的人,手里都會安裝一個叫微信的app,他能記錄我們的日常,支付我們的消費......,幾乎無所不能。
而一談到微信,我們就不得不說微信上的小程序,微信小程序是一種不用下載,就可以使用的應用,自從2017年1月9日,張小龍在2017微信公開課上發布正式上線以來,就得到廣泛應用,小程序的應用數量超過了一百萬,覆蓋200多個細分領域,日活躍量達到兩個億以上。
微信小程序這么強大功能的背后,到底都有些什么呢?現在我們來聊聊微信小程序的那些事兒。
微信小程序把啟動分為兩種:冷啟動、熱啟動
冷啟動就是第一次啟動小程序,或是小程序從被內存銷毀到再次啟動
熱啟動就是用戶打開過小程序還沒有被銷毀,再打開小程序就只是把小程序直接從后臺切到前端顯示。而對于小程序銷毀的時機是什么時候呢?我們研究過:小程序切到后臺后,五分鐘內就會被微信主動銷毀,而在iOS下如果五秒內超過1次的內存告警,就會被銷毀。
對于用戶來說,如果手動在小程序列表中刪除小程序,需要調用App.js里面的函數,包括的函數有:
onLaunch() ,小程序初始化應用對象時調用一次,即每次冷啟動的時候會調用一次,熱啟動不會被調用
onShow(),小程序從后臺進入前臺時調用
onHide() ,小程序從前臺進入后臺時調用
onError() ,小程序發生腳本錯誤,或是調用微信api失敗時觸發。
onPageNotFound() ,當訪問小程序不存的頁面時,該頁面會被觸發,一般在里面寫一些404跳轉頁面
每個頁面對象里的生命周期回調函數及默認事件處理函數有:
onPullDownRefresh() ,即當用戶下拉時觸發,要在app.json的window選項中或頁面配置中開啟enablePullDownRefresh才有效哈
onReachBottom() ,監聽用戶上拉觸底事件,可以在app.json的window選項中或頁面配置中設置觸發距離onReachBottomDistance
onPageScroll() ,監聽滑動頁面事件,切記切記別在此方法里過于頻繁執行setData
onShareAppMessage() ,監聽用戶點擊分享時,自定義分享的標題內容
onResize() ,小程序屏幕旋轉時觸發?;A庫 2.4.0 開始支持哈
onTabItemTap() ,點擊 tab(即底部菜單欄) 時觸發,基礎庫 1.9.0 開始支持
onLoad() ,面加載時觸發, 只在頁面第一次加載時觸發
onShow() ,頁面從后臺切入前臺時觸發,頁面初始化時觸發
onReady(),頁面初次渲染完成時觸發,只觸發一次
onHide(),頁面從前臺切入后臺時觸發
onUnload(),頁面卸載時觸發,即redirectTo或navigateBack到其他頁面時觸發
以上是APP.js中關于小程序的接口函數,如果微信小程序要跳轉H5,必須現在微信小程序中嵌入一個web-view的組件。而且必須是已經打開了的WebView,不可以跳轉到外部的H5頁。目前 H5 頁不可跳小程序,只有在小程序以 web-view 組件打開的 H5 里才可以跳回到小程序,并后H5的地址,還必須在小程序的管理后臺,手動添加到白名單。而且這個白名單地址可以是任意可訪問的地址。
App 可以跳轉到小程序,小程序只能被動跳轉到 App,不可主動跳轉到 App。被動是指只有當 App 主動跳入小程序,小程序才可以跳回到 App。
微信小程序的渲染方式為 WebView,而非原生渲染,只有 <canvas/>、<video/>、<map/>、<textarea/>、<input>、<live-pusher>、<live-player> 幾個組件才是原生渲染。
微信小程序目前統一使用 rpx 單位來隔離機器之間屏幕大小的差異,以達到適配,讓開發者更加專注業務。
目前一個小程序不可超過 2M,如果小程序做了分包,則所有包加起來不可超過 8M,每個包不可超過 2M。
微信開發者工具下 JS 是跑在 Node-Webkit 內核,iOS 下是跑在 JSCore 內核,安卓下是跑在 X5 內核。
iOS 下大圖和長列表圖都會導致 WKWebView 被回收。
同一個微信用戶,同一個小程序 storage 上限為 10MB,如果存儲空間不足,會自動清除掉最久沒使用的數據;本地緩存文件和用戶文件普通小程序上限 10M,游戲小程序上限 50M。
wx.request、wx.uploadFile、wx.downloadFile 默認超時時間和最大超時時間都是 60s,最大并發限制是 10 個,網絡請求的 Referer header 不可設置。其格式固定為 https://servicewechat.com/{appid}/{version}/page-frame.html,其中 {appid} 為微信小程序的 AppID,{version} 為小程序的版本號。版本號為 0 表示為開發版、體驗版及審核版本,版本號為 devtools 表示為開發者工具,其余為正式版本。
在寫頁面的時候,如果頁面上有倒計時功能,在微信小程序 onHide 后沒有停掉倒計時,在 iPhone 下就會觸發內存不夠,微信小程序被回收;而再把微信小程序切回到前臺界面上,微信小程序又沒有重新渲染,從而導致白屏。建議在 onHide 里及時結束倒計時,onShow 里再重新啟動。
成都微信小程序開發團隊認為,在當今,微信小程序開發的技能,是需要我們開發人員掌握的基本技能,掌握了該基本技能,才能適應市場的需求。而微信小程序的開發,對于開發人員來說,這項技能掌握起來也是十分快速的。