爲進一步幫助您提高小程序性能,縮短小程序頁面渲染時間,智能小程序上線了一個新的生命週期 Page.onInit,您可在3.160.12 及以上的基礎庫版本中使用。html
有效提高性能
以百度知道小程序爲例,使用 Page.onInit
進行優化後,上屏時長約提高了 210ms
。 服務器
如下是百度知道、百度百科和寶寶知道使用Page.onInit
後的收益:網絡
小程序 | 收益(單位 ms) |
---|---|
百度知道 | 210 |
百度百科 | 100 |
寶寶知道 | 150 |
什麼是Page.onInit
Page.onInit
是百度智能小程序提供一種頁面級別的生命週期。該生命週期函數執行時機遠早於頁面中的其餘生命週期。app
若是您在Page.onInit
中去發起網絡請求,會提早獲取頁面數據。所以會縮短頁面的渲染時間,極大提高小程序的用戶體驗。函數
若是您對小程序啓動原理感興趣,可參考下圖小程序的啓動流程,Page.onInit
是在收集initData
發送setInitData
後當即執行。因而可知,頁面主數據的請求放在 onInit
中,將快於頁面的其餘生命週期。 若是您想了解
Page.onInit
的細節原理,可參考下圖,小程序是在 setInitData
以後當即執行Page.onInit
。 工具
若是把主數據請求從 Page.onLoad
轉移到 Page.onInit
中,將極大提高小程序的頁面加載性能。性能
開發者能夠在onInit
中向服務器請求數據,並執行setData
。圖中展現了setData
的兩種時機,同時應注意:優化
- 若是
setData
發出的時機早於渲染線程的 FCP,那麼在onLoad
中將能獲取到本次setData
的視圖信息。 - 若是
setData
晚於 FCP,那麼onLoad
中將獲取不到本次setData
的視圖信息。
使用建議
關於Page.onInit
的接口文檔和使用說明,請閱讀官方文檔onInit(Object query)。插件
此處列舉一些onInit
的使用限制和建議:
- 不能進行任何依賴視圖層的操做,包括且不限於:
selectComponent
、selectAllComponents
、swan.createSelectorQuery
、swan.createMapContext
、swan.createCameraContext
、swan.createCanvasContext
等; - 因爲並不是全部版本的基礎庫都支持今生命週期,開發者能夠參考官方文檔中的代碼片斷,增長兼容邏輯;
- 若是您的小程序在邏輯線程初始化階段存在較大瓶頸,那麼使用
Page.onInit
可能不會有明顯效果。建議從減小動態庫和插件的使用、減小App.onLaunch
耗時等角度進行優化。
驗證方式
您有兩種方式驗證Page.onInit
的相關功能:
- 真機驗證:使用 11.20 及以上版本的百度 APP 。
- 開發者工具:需安裝 3.8.0 及以上穩定版或rc版的開發者工具,並將基礎庫版本設置爲3.160.12以上,下載地址.