by:陳澤榮 (timothychenpc@gmail.com)
起因:
其實是這樣的,因為原本是在後端渲染完整的html然後作為回應直接傳給客戶端,但是當客戶資料來到8000人的時候,渲染資料就會達到
8000*20
行的程式碼,而整份文件更是來到14.98mb
,進而拖慢網頁的載入速度(整個載入的過程需要30秒,才能完整載入網頁)。經過:
當時我的想法是或許可以改用js作為渲染的工具,然後先後試了兩個情況:
- js向後端獲取
8000
筆中相異的部分,然後直接在客戶端進行渲染(然後整個瀏覽器就直接在渲染中當死QQQ)
- 由js動態向後端發起請求,並動態進行渲染(網頁一開始載入的時候只夾帶25筆資料,其他資料就是當網頁滑桿滑到底的時候,自動向後端索要後續的25筆資料然後再植入
html
中。所以載入速度基本上不會受資料量增加的影響)
結果和分析:
顯然第一種方法是失敗的,後來嘗試的第二種則是有很多莫名其妙的坑,而且網頁上也沒有一個完整寫好的部分,然後純js的滑動偵測也是蠻麻煩的,並沒有可以直接使用的方法,然後後面就是各種試,然後更妙的是,原本應該
getScrollTop() - getScrollHeight()+dashboard.offsetHeight
也就是滑到底部,但是不知為什麼在手機版的時候就有出現0.003左右的誤差我也是蠻服的。(這個是今天才修正的小問題)
然後就是在get表格的元素的時候沒有注意變數作用域,導致一直無法get到需要的節點(然後這裡卡了大概一個小時)
不過最後經過了一堆測試,一堆報錯,一堆
commets
一堆PR
,終於在昨天晚上的時候,在100
行js
和一堆python
的加持下,基本上是成功了,但目前為止,網頁的速度提升非常的多(已經幾乎感覺不到載入的時間了)實際效果展示
