Mark Ku's Blog
首頁 關於我
解決前端渲染大量資料渲染效能問題 - 1
Frontend
解決前端渲染大量資料渲染效能問題 - 1
Mark Ku
Mark Ku
September 26, 2021
1 min

問題

在某些情況下,依據某些頁面需要一次顯示大量的資料 ,使用者也不希望分頁,但因為資料量大太,渲染及執行過程中,瞬間造成瀏覽器卡頓或不回應。

主因

從上面的例子,經過反覆調查研究得知

  • 頁面的卡頓是由於同時渲染大量DOM所引起的。
  • 過多的 DOM 同時出現在一個頁面,電腦或手機效能不好時,也會卡頓。
  • 因為我們前端框架採用 Vue ,渲染越多的元件,則會產生越多的 Virtual DOM,當資料變動時,也可能觸發元件的重新渲染。

解決方法

1.分時渲染 - 頁面的卡頓是由於同時渲染大量DOM所引起的,所以我們透過 setTimeout 將渲染過程分批進行渲染。

  • 缺點使用 setTimeout 頁面加載的時間已經非常快了,但每次刷新時可以很快的看到第一屏的所有數據,但是當我們快速滾動頁面的時候,會發現頁面出現閃屏或白屏的現象。

2.捲動式渲染(Lazylading Rendering) - 依據每次捲動軸捲動去多渲染幾筆資料。

  • Lazy loading 不等於 虛擬列表/虛擬捲軸,虛擬列表每次只會渲染可視範圍的筆數。
  • 當資料筆數過多時,會渲染過多的 DOM,也會造成瀏覽器卡頓。
  • 明明是一千筆資料,因為捲軸往下捲才長出捲軸,捲軸 bar 比例顯示比例不正常,也不好捲動

3.分段渲染 - 依據資料筆數及高度長出,虛擬捲軸Bar,依可視範圍做渲染,超出可視範圍的就不渲染額外的 DOM 了,有整理了一下,如果要分段捲動有那些方法

  1. Clusterize.js 套件
  2. 虛擬滾動(Vue-virtual-scroller) 套件
  3. Vue 虛擬列表元件 範例連結
  4. 自己做分頁元件渲染

心得

依據我們當時的情境,是比分網站,客戶不希望分頁,一次需要顯示1000~2000筆的比賽資料,依情境最後推薦的做法是分段渲染。

無限捲動的議題,前端有一陣子很流行無限捲動,其實不適合大部份的情境,可能很適合社群網站,但不適合一般情境,至今採用無限捲動的網站變少了。

  • 使用者不容易找到目標
  • 不利於無障礙
  • 不利於SEO
  • 回上一頁偏移位置

補充

1.額外優化渲染的議題

  • 無限捲動是縮減物件的大小,去除不需要的屬性 ( Limit unnecessary data passing )
  • 過濾掉不需要的資料
  • Render Once - 假設Component其中一個內容不會變更資料,可以用v-once指令,只針對那個內容僅渲染一次。

參考資料

參考資料連結
參考資料連結
參考資料連結
參考資料連結
參考資料連結
參考資料連結


Tags

Mark Ku

Mark Ku

Software Developer

9年以上豐富網站開發經驗,開發過各種網站,電子商務、平台網站、直播系統、POS系統、SEO 優化、金流串接、AI 串接,Infra 出身,帶過幾次團隊,也加入過大團隊一起開發。

Expertise

前端(React)
後端(C#)
網路管理
DevOps
溝通
領導

Social Media

facebook github website

Related Posts

解決前端渲染大量資料渲染效能問題 Part's 2- 虛擬捲軸 && 分段渲染
解決前端渲染大量資料渲染效能問題 Part's 2- 虛擬捲軸 && 分段渲染
April 16, 2020
1 min

Quick Links

關於我

Social Media