針對小程式首次載入包的問題,小程式提出了分包載入的功能,這裡不做詳細描述,可以去看下官方文件
這裡我選擇的是針對渲染節點去做優化。
在微信的api文件裡面,有乙個判斷節點與可視區域的api
intersectionobserver 物件,用於推斷某些節點是否可以被使用者看見、有多大比例可以被使用者看見
這個時候就在想,能不能建立intersectionobserver跟元件之間的關係,使得元件進入可視區域的時候,就顯示自己的內容,否則隱藏自己,這樣達到動態載入模組的目的。
// 偽**
// 建立監聽
element.observer()
// 處理進入
observer.handleenterview(() => )
複製**
複製**
建立了基本技術方案之後,就開始到**層面了
component(,
// 在ready寫是因為元件在這個時候,才在檢視層布局完成
ready () )
this.observer.disconnect()
this.observer = null
})},
detached ()
})複製**
你們以為這就完了麼,並沒有。
對於乙個小程式頁面,它是可以由template或者component組成的。對於template來說,需要在page裡面定義,而且如果觀察的東西比較多的話,需要設定observeall:all,但是官方文件裡面有說同時選中過多節點,將影響渲染效能。
對於元件開發來說,如果每個元件都這樣寫的話,是否也會跟observerall:all一樣影響渲染效能,還不清楚,如果確實會影響的話也只能減少觀察物件,或者把做乙個大容器去觀察。但是如果每個元件都這樣寫的話也會非常的繁瑣。
這個時候,元件的好處就來了。在定義元件的時候,有乙個很神奇的屬性,他就是beh**iors。簡單點說,他其實就是乙個**復用機制。直接使用beh**iors可以使得元件自動獲得某些方法,屬性。利用這個特性,就可以在元件裡面少寫很多**了。
// mixin.js
module.exports = beh**ior(,
ready () )
this.observer.disconnect()
this.observer = null
})},
detached ()
})複製**
// component.js
let mixin = require('你的mixin路徑')
component()
複製**
複製**
或者你可以把整個observer做成元件,這樣去減少observer的數量,內聚一些模組
複製**
需要注意的是對於元件來說,如果observer的話就需要乙個觀察節點,並且這個觀察節點必須是高度不為0的可視物件,如果又想有高度又不想影響頁面位置的話可以用一些hack的方法
.component-observer
複製**
在使用intersectionobserver的時候,有試過用hidden屬性。但是實際上,hiiden也是會被渲染出來的,只是不顯示而已,並不會造成頁面載入速度的提公升
這裡是隨便拿的乙個demo去弄的,需要的話可以點選這裡
或者瀏覽小程式**片段
使用之前
使用之後
如果不動的話可以點選檢視 可以看得出是提公升是相當明顯的
image有乙個lazy-load的屬性,但是它只能在page以及在scroll-view使用,如果在其他地方的話是不是也可以用這個去做呢
複製**
// image-component js
component(,
},data: ,
ready () )
})}})
複製**
實戰 小程式授權登入的最佳實踐(一)
原始碼詳見 src request 所以,首先需要搞清楚有哪些需求。注 本文只針對小程式原生框架 對於大部分應用,並不是所有頁面 介面都需要登入才可訪問,這就要求登入功能需要實現 僅在需要登入的時候,中斷業務,進入登入流程,登入成功則自動進行之前中斷的業務 這很重要 失敗則提示錯誤資訊,如下 發現需...
小程式分包載入
開發者需要將小程式劃分成不同的子包,在構建時打包成不同的分包,使用者在使用 時按需進行載入。在構建小程式分包專案時,構建會輸出乙個或多個分包。每個使用分包小程式必須包含 乙個主包,所謂的主包,即放置預設啟動頁 tabbar 頁面,以及一些所有分包需要用到 整個小程式所有分包大小不超過 8m單個分包 ...
微信小程式實戰入門
一 簡介 參考 二 工程 參考 quickstart basic file.html 工具設計介面可調整機型 顯示百分比 資料連線方式。三 發布 個人上線了乙個木材材積計算器 兩天做的,有web前後端經驗很容易入手,有增加 共計 記錄功能 審核很快,一天審核結束 後來發現已經之前有公司做了,尷尬,而...