為什麼 CSDN 手機訪問和 PC 訪問是兩套樣式?本文對比三大主流技術方案:響應式設計(RWD)、自適應設計(AWD)、服務端設備判斷(Server-side Detection),分析大型網站的實際架構選型。
| 維度 | 響應式 (RWD) | 自適應 (AWD) | 服務端判斷 |
|---|---|---|---|
| 核心機制 | CSS 媒體查詢 + 流式佈局 + 彈性圖片 | 預定義多套固定寬度佈局,JS/CSS 切換 | User-Agent 解析,後端渲染不同模板 |
| URL | 同一 URL | 同一 URL | 同一 URL 或 子域名 (m.xxx.com) |
| 代碼復用 | 極高(單代碼庫) | 中(共用邏輯,樣式分離) | 低(雙模板維護) |
| 效能 | 手機加載桌面端資源(需優化) | 按需加載對應資源 | 極致優化(只輸出所需) |
| SEO | Google 推薦,單一 URL 利於收錄 | 需正確 canonical/alternate 標註 | 需 Vary: User-Agent、規範化 |
| 維護成本 | 低 | 中 | 高 |
| 典型案例 | Bootstrap 官網、GitHub、Medium | 早期 Amazon、Apple | CSDN、淘寶、京東、新浪微博 |
// 1. 服務端識別設備類型 (Nginx + Lua / Java Filter / Node.js middleware)
const isMobile = /Mobile|Android|iPhone/.test(req.headers['user-agent']);
req.deviceType = isMobile ? 'mobile' : 'pc';
// 2. 渲染對應模板(或同一模板注入 deviceType 變量)
if (isMobile) {
res.render('mobile/index', data);
} else {
res.render('pc/index', data);
}
// 3. 響應式兜底:CSS 媒體查詢處理平板、橫屏、窗口縮放等中間態
@media (max-width: 768px) { .sidebar { display: none; } }
ua-parser-js (JS)、user-agent-utils (Java)、device_detector (Go)。proxy_cache_key "$scheme$host$request_uri$device_type",按設備類型分桶緩存。Vary: User-Agent 告訴 CDN/瀏覽器緩存區分 UA。沒有銀彈,只有適合當前業務階段的架構。CSDN 的雙端分離是十年業務沉澱的產物,新專案請優先考慮響應式 + 組件級按需加載。