Drupal 作為重型 CMS,性能瓶頸常集中在前端資源、PHP 執行、MySQL 查詢、架構擴展四個層次。本文整理經驗,給出針對性優化清單與避坑指南。
<scripts> 從 <head> 移至 </body> 前(修改 page.tpl.php),首屏渲染無阻塞。Javascript Aggregator 模塊合並 JS 文件,減少 HTTP 請求。**避坑**:與 TinyMCE、CKEditor 等富文本編輯器衝突,需在 admin/settings/performance 排除相關 JS 路徑。經驗建議:編輯器頁面不聚合,其他頁面聚合,或直接棄用該模塊改用 CDN+瀏覽器緩存。admin/config/development/performance 啟用「緩存頁面給匿名用戶」,單查詢替換數十查詢,極致提升。settings.php:ini_set('session.gc_maxlifetime', 86400); // 24小時(秒)
ini_set('session.cache_expire', 1440); // 24小時(分)
ini_set('session.cookie_lifetime', 86400); // 24小時 或 0(瀏覽器關閉即失效)
配合 cron 定期清理 sessions 與 watchdog(日志)表。
admin/config/development/logging 調整保留策略,cron 執行時生效。poormanscron 模塊自動定時觸發,防日志/緩存/統計數據堆積拖垮庫。my.cnf 設置 query_cache_size=128M 以上,適配 Drupal 大量重複查詢特性。node、field_data_*、views 產生的查詢建立聯合索引,EXPLAIN 驗證。Devel → Display query log,識別高耗時/高頻 SQL。my.cnf 設置 long_query_time=5、slow_query_log_file=/var/log/mysql/slow.log,定期 pt-query-digest 分析。Memcache 模塊將緩存表、實體、渲染數組移出 MySQL 至內存,極大降低 DB 壓力。**這是單機 MySQL 瓶頸後的銀彈。**| 動作 | 風險 | 對策 |
|---|---|---|
| 盲目啟用 JS 聚合 | 富文本編輯器、AJAX 表單失效 | 排除編輯器路徑,或分頁面啟用 |
| Session 生命周期設過長 | sessions 表膨脹、鎖競爭 | 24h 為宜,配合 cron 清理 |
| 關閉 Cron | watchdog、cache、sessions 三表失控增長 | poormanscron 或系統 crontab 強制執行 |
| 無 Opcode 緩存 | PHP CPU 100%、響應秒級 | 必裝 OPcache/APCu |
| 單機抗高併發 | MySQL 單點瓶頸 | Memcache/Redis + 讀寫分離 + 分庫分表 |
Drupal 優化是系統工程:**核心配置見效最快、Opcode 緩存收益最大、MySQL 索引與慢查詢是持久戰場、架構擴展是終極出路**。按「零成本配置 → 低成本代碼 → 中成本 DBA → 高成本架構」順序推進,每層驗證效果再進入下層,ROI 最高。