靜態網站國內訪問慢怎麼辦:先診斷再改善,GitHub Pages、Vercel、Cloudflare Pages 通用

部落格 / 效能

靜態網站國內訪問慢怎麼辦:先診斷再改善,GitHub Pages、Vercel、Cloudflare Pages 通用

靜態網站國內訪問慢,很多時候慢的不是託管平臺本身,而是頁面裡引用的外部資源:境外字型、統計指令碼、公共 CDN 上的 JS 庫。動手改之前,先把一次頁面載入拆成 DNS、TLS 握手、首位元組、資源下載幾段,看清時間花在哪一段,再對症處理。如果確實需要中國大陸境內的節點,就要辦 ICP 備案,並且透過持證服務商接入,這一步沒有合規的捷徑。

下面的步驟對 GitHub Pages、Vercel、Cloudflare Pages 和其他靜態託管都適用。本文不討論“優選 IP”、改 hosts 指向非官方節點這類做法:它們效果不穩定,也可能違反平臺條款。

為什麼“換個平臺”往往解決不了問題?

網上 2020–2024 年的帖子結論經常互相矛盾,一篇說某平臺快,另一篇說慢。原因很簡單:測試者的運營商、地區、時間段不同,而且大多數人只看了“整頁開啟用了幾秒”,沒有分段。

一個典型的部落格頁面,載入過程大致是:

  1. 解析你的域名(DNS)
  2. 和託管平臺的邊緣節點建立 TCP 與 TLS 連線
  3. 等伺服器返回 HTML 的第一個位元組(TTFB)
  4. 下載 HTML,再併發請求 CSS、JS、圖片、字型
  5. 載入第三方域名上的資源,每個新域名都要重複第 1、2 步

第 5 步往往最慢。主題模板裡自帶的字型連結、評論系統、統計程式碼,各自連一個境外域名,只要其中一個阻塞渲染,頁面就會白屏好幾秒。這時候換託管平臺不會有改善,因為慢的那個請求根本不發往託管平臺。

第一步:用瀏覽器 Network 面板看是哪個請求慢

用國內直連網路(關掉代理和加速工具)開啟 Chrome 或 Edge 的開發者工具:

  1. 開啟 Network 面板,勾選 Disable cache。
  2. 重新整理頁面,等載入結束。
  3. 看 Waterfall 列裡哪幾條橫條最長。
  4. 點開最慢的請求,切到 Timing 標籤。

Timing 裡的欄位可以這樣判讀:

Timing 欄位含義這一項長說明什麼
Queueing / Stalled瀏覽器排隊等待同域名併發過多,或前面有阻塞資源
DNS Lookup域名解析解析伺服器遠、解析結果異常,或域名解析本身受干擾
Initial connection / SSLTCP + TLS 握手到邊緣節點的網路路徑長或丟包
Waiting for server response (TTFB)首位元組等待回源慢、邊緣快取未命中,或節點離你遠
Content Download內容下載檔案太大,或鏈路頻寬受限

有兩種情況要特別留意:

  • 請求一直 pending,最後失敗或超時:通常是這個域名在你的網路下無法連通。如果它是 <head> 裡同步載入的 CSS 或 JS,整頁都會被拖住。
  • 主 HTML 很快,但頁面遲遲不顯示:多半是渲染阻塞資源(字型、外鏈 CSS、同步指令碼)的問題,和託管平臺無關。

測之前,最好先確認自己確實是國內直連。如果系統裡開著全域性代理或分流規則,測到的是代理出口的情況。可以用 /ip 的大陸分流檢測看當前屬於“國內直連”“大陸分流”還是“全域性代理”,原理見國內網站如何看到你的真實 IP。

第二步:用命令列把主站的時間拆開

Network 面板受瀏覽器快取、擴充套件和連線複用影響。對主站域名,可以用 curl 再測一次,排除這些干擾:

curl -o /dev/null -s -w \
'DNS:      %{time_namelookup}s\nConnect:  %{time_connect}s\nTLS:      %{time_appconnect}s\nTTFB:     %{time_starttransfer}s\nTotal:    %{time_total}s\nHTTP:     %{http_code}\nIP:       %{remote_ip}\n' \
https://your-blog.example.com/

這幾個值是累計時間,相鄰兩項相減才是單段耗時:

  • Connect - DNS 約等於一次 TCP 往返
  • TLS - Connect 是 TLS 握手
  • TTFB - TLS 是發出請求到收到第一個位元組的時間,包含一次網路往返和伺服器(或邊緣快取)的處理時間

建議在不同時段多跑幾次(例如上午和晚高峰各測 5 次),只看一次的結果容易被偶然的波動誤導。

再看解析結果是否正常:

dig +short your-blog.example.com
dig +short your-blog.example.com @223.5.5.5
dig +short your-blog.example.com @1.1.1.1

如果不同解析伺服器給出的地址差別很大,或者返回了明顯不屬於託管平臺的地址,就要先排查解析問題,方法見 DNS 汙染和 DNS 劫持有什麼區別。如果握手階段特別慢、偶爾超時,可以用 mtr 看路徑上哪一段開始出現丟包,讀法見 traceroute 和 mtr 結果怎麼看。

第三步:對照第三方資源,看看是不是它們拖慢的

在 Network 面板的表頭上右鍵,勾選 Domain 列,再按這一列排序,就能看到頁面引用了哪些外部域名。常見的幾類:

  • 網頁字型:主題模板預設引用的境外字型服務,在大陸網路下經常載入很慢甚至失敗。
  • 公共前端 CDN:jsDelivr、unpkg、cdnjs 這類公共 CDN 上的庫檔案,在國內的可用性和速度會隨時間變化。
  • 統計與廣告指令碼:境外統計服務的指令碼通常不阻塞渲染,但會佔連線,也會拖慢 load 事件。
  • 評論系統、嵌入內容:評論框、影片、社交分享按鈕,有時會在首屏同步載入。

公共前端 CDN 在你所在網路的表現,可以直接在 cdnping 線上測速 裡看。它在瀏覽器裡測 9 個公共前端 CDN,給出兩個指標:

  • 首次連線:包含 DNS 解析和 TLS 握手,對應使用者第一次訪問時的體驗;
  • 往返:連線複用後 3 次請求的中位數,對應同一頁面裡後續資源的載入。

首次連線很慢但往返正常,說明問題主要出在解析或握手,資源合併到少數幾個域名、減少新連線就能改善;兩個指標都慢,說明這條線路本身質量差,應該換源或自託管。更多資料可以看 CDN 速度榜,選型的思路見如何選擇適合國內訪問的公共 CDN。

診斷結果對照表:慢在哪,就改哪

診斷現象大機率原因優先嚐試的做法
某個第三方請求 pending 後失敗,頁面白屏外部資源在當前網路不可達,且阻塞渲染自託管該資源,或改成非同步載入
字型請求很慢,文字遲遲不出現境外字型服務慢字型檔案放到自己站點下,加 font-display: swap,按需子集化
公共 CDN 上的 JS 庫慢公共 CDN 在當前網路表現差換成測速結果更好的源,或打包進自己的構建產物
主站 DNS 解析慢或結果異常解析鏈路問題檢查 DNS 記錄和解析服務商,參考 DNS 排查文章
主站 TLS 握手慢、TTFB 高到託管平臺邊緣節點的路徑長繫結自定義域名、提高快取命中率;仍不夠再考慮境內節點(需備案)
重複訪問依然很慢快取頭沒配好,每次都重新下載給帶雜湊的靜態檔案設長快取
大圖片下載時間長圖片體積大壓縮、轉 WebP/AVIF、按螢幕尺寸輸出

不需要備案就能做的改善

這些改動只涉及你自己的程式碼和配置,在任何託管平臺上都能做:

1. 把外部依賴收回到自己的域名下

字型、圖示庫、JS 庫下載到倉庫裡,跟著站點一起部署。這樣頁面只需要連一個域名,少了好幾次 DNS 和 TLS 握手,也不會被某個第三方拖住。注意遵守字型和庫的許可證。

2. 讓渲染不再被阻塞

非關鍵指令碼加 defer 或 async;統計、評論這類元件放在首屏渲染之後再載入;首屏用到的關鍵 CSS 可以內聯到 HTML 裡。

3. 配好快取頭

構建工具生成的帶內容雜湊的檔案(如 app.3f9a1c.js)可以設 Cache-Control: public, max-age=31536000, immutable;HTML 本身設短快取或 no-cache,保證更新能及時生效。各個指令的區別見 Cache-Control 快取頭怎麼配。大多數靜態託管平臺都支援在配置檔案裡寫響應頭,具體寫法以平臺官方文件為準。

4. 繫結自定義域名

用自己的域名,以後想換託管平臺或接入 CDN 時,只要改 DNS 記錄,不用改站內連結和外部引用。如果在託管平臺前面再套一層 CDN,要注意 SSL 模式配置,否則容易出現重定向迴圈,參考 Cloudflare 重定向次數過多怎麼解決。

5. 減小資源體積

壓縮圖片,刪掉主題裡沒用的 JS,開啟 Brotli 或 gzip(多數平臺預設開啟,可以在響應頭的 content-encoding 裡確認)。

做完以後,用同一網路、同一時段再跑一遍第二步的 curl 和第一步的 Network 面板,前後對比,確認改動確實有效。

什麼時候需要境內節點?備案的邊界在哪裡

如果第三方資源都已經處理乾淨,主站的 TLS 握手和首位元組在國內依然明顯偏慢,那麼剩下的瓶頸就是物理距離和跨境線路。這一段靠前端最佳化解決不了,只能讓內容由離使用者更近的節點提供。

這裡有一條明確的邊界:在中國大陸境內的伺服器或 CDN 節點上提供網站服務,需要先辦 ICP 備案,並且要透過持有相應資質的服務商接入。 境外託管平臺和境外 CDN 的“亞太節點”通常部署在大陸以外,離使用者近一些,但並不等於境內加速。

可以這樣判斷:

  • 個人部落格、文件站:多數時候前面那些不備案的改善已經夠用。
  • 面向國內使用者的業務站、對首屏時間有明確要求的站點:建議評估備案,再選用持證服務商的境內 CDN。

cdnping 的 Edge 邊緣加速介紹頁也寫明瞭這一點:它基於 Cloudflare 全球網路提供邊緣加速,而中國大陸境內的加速同樣需要 ICP 備案並經由持證服務商。

邊緣網路本身也會出故障。cdnping 每 15 分鐘同步一次 Cloudflare 官方狀態頁,記錄顯示 2026-10-10 04:13(UTC)釋出過一條名為 “Elevated Errors in China Network Colos” 的事件,影響等級為 minor。所以如果某天站點在國內突然變慢,在懷疑自己的配置之前,先去平臺的官方狀態頁看一眼,例如 Cloudflare Status,或者 cdnping 的 API 狀態頁。

一份可以照著走的排查清單

  1. 確認測試網路是國內直連(用 /ip 看分流狀態)。
  2. Network 面板禁用快取後重新整理,找出最慢的 3 個請求,記下域名和 Timing 中最長的那一段。
  3. 對主站域名跑 curl 計時,不同時段至少各測 5 次。
  4. 用 dig 對比幾個解析伺服器的結果,排除解析異常。
  5. 用 cdnping 線上測速 看頁面依賴的公共 CDN 在當前網路的首次連線和往返。
  6. 自託管或非同步化阻塞渲染的第三方資源。
  7. 配好靜態檔案的快取頭,壓縮圖片。
  8. 複測並對比改動前後的資料。
  9. 主站本身仍然慢、且業務需要時,再評估 ICP 備案和境內節點。

如果你的問題不只出在網站訪問上,還包括開發環境整體的網路狀況,可以接著看開發者網路自檢清單(2026 版)。

相關文章

繼續閱讀