Mark Ku's Blog

問題

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

主因

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

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

解決方法

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

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

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

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

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指令,只針對那個內容僅渲染一次。

參考資料

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

作者

Mark Ku

擁有 10+ 年經驗的資深軟體工程師,現為 AI 應用 Builder,專注於大型平台架構與簡化複雜系統設計,從電商系統到訂閱與收費平台,結合 AI Agent、AI 整合與自動化開發,打造高效率且可持續演進的產品技術基礎。閱讀更多

覺得這篇有幫助?

作者做的免費工具、每日 Podcast 與電子報,都在這裡。

Mark Ku · 本文採用 CC BY 4.0 授權,轉載請註明作者並附上原文連結。

留言

訂閱電子報

訂閱後即時收到新文章通知,不錯過任何技術分享。

提交即表示同意接收電子報,隨時可

熱門文章

View all
Mark Ku
··597

Oracle Cloud 永久免費方案 Linux 主機及固定 IP :0 元打造雲端解決方案

Oracle Cloud 永久免費方案 Linux 主機及固定 IP :0 元打造雲端解決方案
Mark Ku
··469

告別 Postman 收費陷阱!開源 Git 原生 API 測試神器 Bruno 實戰指南

告別 Postman 收費陷阱!開源 Git 原生 API 測試神器 Bruno 實戰指南
Mark Ku
··327

一款免費開源類似於 Notion 類知識庫系統 — Outline Wiki 佈署與備份全攻略

一款免費開源類似於 Notion 類知識庫系統 — Outline Wiki 佈署與備份全攻略
Mark Ku
··239

打造高效 API 管理平台:從 0 開始部署 Kong Gateway - Part 1

打造高效 API 管理平台:從 0 開始部署 Kong Gateway - Part 1
Mark Ku
··233

訓練自己的 AI 語音:硬體門檻、開源模型比較與 LoRA 微調

訓練自己的 AI 語音:硬體門檻、開源模型比較與 LoRA 微調
Mark Ku
··220

在 Ubuntu 上設置 Samba 來共享資料夾,讓 Windows 11 用戶可以存取

在 Ubuntu 上設置 Samba 來共享資料夾,讓 Windows 11 用戶可以存取