小程式崩潰引發的問題
前些天,突然接到使用者的大量反饋,我們的小程式頻繁出現閃退,崩潰的現象。如圖,
於是馬上著手追查問題,首先確定了導致閃退的頁面。是在一個有長列表的頁面,當上拉載入更多,翻頁翻多幾頁的時候就導致閃退了。經過重重排查(時間問題,這裡就不詳細描述排查的方法了,大多數用的都是縮小範圍排除法啦),最後終於確定了問題所在,原來是在列表中,同事最近新加上的css3動畫所致,這裡的列表是迴圈渲染的一個元件,元件中的一個彈窗的彈出和收起,使用動畫,但是這裡沒有加上wx:if,導致了迴圈渲染該動畫,所以翻頁翻著翻著就掛掉了。
確定了問題,就很好辦了,加上條件判斷,只有需要的時候,才渲染彈出彈窗。真機除錯,暴力狂刷資料,發現閃退的現象不再出現了,閃退問題解決,然而高興不到三分鐘,又出問題了,發現翻頁到十幾頁的時候,再也刷不動後面的資料了,明明是還有更多資料的。再在開發工具上看檢視資料,結果控制檯報了這麼一個錯
在真機上為:
這是什麼問題呢,檢視官方文件,發現是有這樣的限制的
回顧我們的程式碼,這裡的分頁載入資料,上拉載入,資料是放在一個for迴圈裡去載入,資料來源是一個陣列物件。在載入下一頁資料時,將下一頁的資料拼到當前陣列後面。這裡是常規的做法。可以看看程式碼:
這裡可以看到,每次獲取新的一頁,都要重新setData新的陣列,仔細想想,當這個陣列到後面越來越大的時候,很容易就超出了單次設定資料超過1024kb的限制了。那麼怎麼解決這個問題呢,這裡官方文件裡面其實有提到一個注意點,
既然這裡是支援改變陣列的某一項,那麼分頁的問題,可以改變為一個二維陣列,還是直接看程式碼吧。
這裡的方法則暫時擺脫了單次設定資料多大的問題。當然,要是單頁的資料過多,還是會出現問題的。最合適的還是對資料結構進行精簡,前端不必要的資料,可以不傳過來前端。
寫在最後,這次第一次寫類似的分享,描述還是有些不清晰,以後可以多嘗試這樣的總結吧。