[專案開發日常—11]

Tags
linebot
飲水機
Last edited
Apr 7, 2022 05:09 AM
by:陳澤榮 (timothychenpc@gmail.com)

起因:

其實是這樣的,因為原本是在後端渲染完整的html然後作為回應直接傳給客戶端,但是當客戶資料來到8000人的時候,渲染資料就會達到8000*20行的程式碼,而整份文件更是來到14.98mb,進而拖慢網頁的載入速度(整個載入的過程需要30秒,才能完整載入網頁)。
原本的30秒後才會完整載入頁面
原本的30秒後才會完整載入頁面
notion image
 

經過:

當時我的想法是或許可以改用js作為渲染的工具,然後先後試了兩個情況:
  1. js向後端獲取8000筆中相異的部分,然後直接在客戶端進行渲染(然後整個瀏覽器就直接在渲染中當死QQQ)
  1. 由js動態向後端發起請求,並動態進行渲染(網頁一開始載入的時候只夾帶25筆資料,其他資料就是當網頁滑桿滑到底的時候,自動向後端索要後續的25筆資料然後再植入html中。所以載入速度基本上不會受資料量增加的影響)

結果和分析:

js判斷滑到底部
js判斷滑到底部
顯然第一種方法是失敗的,後來嘗試的第二種則是有很多莫名其妙的坑,而且網頁上也沒有一個完整寫好的部分,然後純js的滑動偵測也是蠻麻煩的,並沒有可以直接使用的方法,然後後面就是各種試,然後更妙的是,原本應該getScrollTop() - getScrollHeight()+dashboard.offsetHeight也就是滑到底部,但是不知為什麼在手機版的時候就有出現0.003左右的誤差我也是蠻服的。(這個是今天才修正的小問題) 然後就是在get表格的元素的時候沒有注意變數作用域,導致一直無法get到需要的節點(然後這裡卡了大概一個小時)
不過最後經過了一堆測試,一堆報錯,一堆commets一堆PR,終於在昨天晚上的時候,在100js和一堆python的加持下,基本上是成功了,但目前為止,網頁的速度提升非常的多(已經幾乎感覺不到載入的時間了)
 
最終版本,所有載入在1秒內完成
最終版本,所有載入在1秒內完成

實際效果展示

 
Video preview
vscode的縮略圖
vscode的縮略圖