
動態網站為什麼比較慢?快取的作用
動態網站每次都要「組合」
訪客打開一個頁面時,動態網站要做這些事:
- 接收請求
- 執行程式
- 向資料庫查詢資料——可能不只一次
- 把資料套進版型
- 產生完整的網頁回傳
靜態網站則是直接把現成的檔案送出去,省下了中間的所有步驟。
這就是速度差異的來源。
但動態不一定慢
這一點要說清楚:設計良好的動態網站,速度可以與靜態網站相近。
實務上網站慢的原因,多半不是「因為它是動態的」,而是:
- 圖片沒有壓縮——這是最常見的原因
- 資料庫查詢沒有最佳化
- 安裝了過多的外掛
- 沒有使用快取
- 主機規格不足
先處理圖片,通常比換主機有效得多。 完整的排查順序見網站慢的常見原因與優先處理順序。
快取是什麼
把處理過的結果暫存起來,下次直接使用,不必重新處理。
回到餐廳的比喻:常被點的菜先做好放著,客人來了直接上,不用從頭開始煮。
對動態網站的意義
第一個訪客打開頁面時,系統完整跑一次流程並把結果存起來。後面的訪客直接拿現成的結果,速度接近靜態網站。
快取存在很多地方
| 層級 | 存在哪 | 誰能清除 |
|---|---|---|
| 瀏覽器快取 | 訪客的電腦 | 訪客自己 |
| 網站系統快取 | 主機上 | 後台通常有清除功能 |
| 資料庫查詢快取 | 主機上 | 系統自動管理 |
| 加速服務快取 | 外部節點 | 該服務的後台 |
這解釋了為什麼「改了東西看不到變化」有時候特別難處理——可能有好幾層快取都要清。
改了看不到變化怎麼辦
依序排除:
- 用無痕視窗開啟——排除瀏覽器快取
- 用手機的行動網路開啟——排除本地網路的快取
- 清除網站後台的快取
- 若有使用加速服務,清除該服務的快取
判斷方法
- 無痕視窗看得到新內容→ 是瀏覽器快取,只有你看到舊的
- 無痕視窗也是舊的→ 問題在伺服器端,需要清除系統快取
更完整的說明見快取是什麼。
快取的取捨
快取讓網站變快,但也帶來一個問題:內容更新後,訪客可能還看到舊版本。
常見的處理方式
- 設定較短的快取時間——更新較快反映,但效能提升較少
- 更新內容時自動清除相關快取——較理想,需要開發配合
- 更新資源時改檔名——例如圖片改版時用新檔名,這是最可靠的做法
建議在驗收時確認:後台有沒有清除快取的功能。 沒有的話,每次更新都要請廠商處理。
哪些頁面不該快取
這一點很重要,涉及資安。
- 登入後的個人頁面——會員中心、訂單查詢
- 購物車
- 後台
- 任何顯示個人資料的頁面
為什麼
如果把 A 使用者的頁面快取後回應給 B,就是一次個資外洩。
這是實際發生過的事故類型。驗收時務必測試:用兩個帳號分別登入,確認各自看到正確的資料。
其他加快的方式
除了快取,還有幾個常見的做法:
圖片處理
- 壓縮到適當的品質
- 依顯示尺寸提供適當大小,不要用原圖縮小顯示
- 使用較新的圖片格式
- 延後載入未進入畫面的圖片
這通常是投報率最高的一項。
內容傳遞網路
把圖片、樣式等靜態檔案放到分布各地的節點,讓訪客就近取得。對跨地區的客群特別有效。
資料庫最佳化
加上索引、減少不必要的查詢。這屬於開發層面,但可以請廠商檢視。
速度重要到什麼程度
幾個實際的影響:
- 載入時間越長,離開的比例越高——尤其是手機使用者
- 投廣告時,慢的頁面等於浪費預算——錢花了但人還沒看到內容就走了
- 速度是搜尋排名的參考因素之一
但也不要過度追求數字
測速工具的分數是參考,真正該看的是實際使用者的體驗——用手機的行動網路實際開一次,感覺如何。
見怎麼測網站速度。