下面是 T 沙龍小編對分享的一些總結:前端
第一位分享嘉賓是來自享物說的 Rolland Safort(中文名:塞福),目前負責享物說小程序開發工做,有多年前端工做經驗,對前端開發有深刻的理解。他爲你們帶來了享物說團隊小程序開發過程當中積累的一些架構與性能優化方案。vue
由於在場的同窗有很大一部分是 iOS 和 Android 開發,對 Web 端和小程序開發並非十分了解,因此塞福首先對小程序的基本組成和實現原理進行了簡單的介紹。node
微信小程序運行在三端:iOS、Android 和用於調試的開發者工具中。本質上都是經過各個平臺的 WebView 和 JS 解析器來進行渲染和解釋運行。webpack
JavaScript:微信小程序的 JavaScript 運行在微信 App 的上下文中,不能直接操做 DOM,也不能經過 Node.js 相關接口訪問操做系統 API。在 iOS 上,小程序的 JavaScript 代碼是運行在 JavaScriptCore 中;在 Android 上,小程序的 JavaScript 代碼是經過 X5 內核來解析的;在開發工具上,小程序的 JavaScript 代碼是運行在 NW.js (基於 Chromium 和 Node.js 運行,之前也叫 nodeWebkit)上的。 WXML:微信小程序的展現層,是微信本身定義的基於 XML 語法的描述語言。 WXSS:用來修飾 WXML 展現層的樣式,相似 CSS 和 HTML 的關係。WXSS(WeiXin Style Sheets)是一套樣式語言,用於描述 WXML 的組件樣式。WXSS 用來決定 WXML 的組件應該怎麼顯示。WXSS 具備 CSS 大部分特性,對 CSS 進行了擴充以及修改。git
小程序的開發當中也有一些注意點須要關注:github
你們能夠大概想象一下小程序的執行過程:web
享物說小程序是一個比較大型的小程序,由於享物說整個平臺都是小程序起家的,因此小程序承載了享物說平臺的幾乎所有功能,iOS 和 Android 的原生 App 雖然已經發布了一些版本,但還在完善和豐富功能的過程當中。npm
享物說小程序目前主要經歷過一次大規模的重構,以前的舊版本使用了微信官方的小程序開發框架,而新版採用美團的 mpvue 進行重構,在性能和體驗上有了進一步的提高。小程序
使用 mpvue 主要有如下一些優點:
享物說小程序從 2017 年9 月上線,至今已有超過 2000 萬用戶使用,上圖展現了享物說用戶量變化的一個大體趨勢。
小程序相比原生 App,最顯著的一個特徵就是能夠快速迭代,雖然它的主包發版也須要必定的審覈時間,可是相比原生 App,小程序能夠經過將大部分資源和配置部署到服務器上來實現變相的熱修改 / 熱更新,這爲產品的灰度發佈、BUG 修正、功能開發帶來了極大的便利。
正由於小程序的靈活性給業務帶來的便利性,須要去對它的埋點和檢測進行一個比較好的維護,不只限於小程序的頁面訪問、用戶操做、事件觸發等,還要儘量追蹤每個分享出去的 URL 的傳播軌跡和訪問流量,根據所得數據來進行分析從而爲接下來的業務方向指路。
享物說小程序上線至今未滿一年,成長速度能夠用誇張來形容,但令享物說團隊欣喜之餘,帶給他們的還有嚴峻的業務壓力和流量高峯挑戰。
如下這些是享物說團隊的部分小程序優化經驗和建議:
面對一個用戶量如此大的平臺,傳統的解決方案可能都會有些捉襟見肘,享物說小程序都作了哪些來得到相對穩定的線上運行狀態呢?
request
、uploadFile
、downloadFile
的最大併發限制是 10 個 超出最大併發數的請求,會等待前面的請求完成或者超時。根據後端負載和可⽤情況,結合以前所說的服務分級,把後端 的服務等級作響應的調整。若是服務端負載太重,那麼能夠有 針對地拒絕服務或者關閉服務。高峯期間,對⾮核心業務,超出服務端負 荷的狀況下,能夠考慮暫時關閉服務。
在極端狀況下,能夠考慮僅在 CDN 提供只讀的靜態內容。
微信官⽅給⼩程序提供了運維中⼼,在這⾥能夠看到小 程序的近乎實時的運⾏⽇志。若有必要,能夠埋點收集 在異常發⽣時候的⽤戶操做路徑,幫助過後復現問題。
活動和部分⾮核心業務使⽤ H5 實現,而且經過 WebView 在⼩程序內展現。
享物說小程序上線近一年過程當中最大的問題就是流量壓力致使的性能和穩定性問題,享物說團隊的同窗經過以下一些手段對該問題進行了解決: