編輯室臺大首頁計中首頁
第0028期 • 2014.03.20發行
ISSN 2077-8813
歷史回顧 訂閱/取消 校務服務 專題報導   技術論壇 推薦刊物
首頁 > 校務服務
校務服務

WP Super Cache — 讓WordPress Multisite Network加速的超級插件

作者:唐瑤瑤 / 臺灣大學計資中心 程式設計師

在社群網路服務推陳出新的今日,Blog部落格已經算是老前輩了。但是在網站建置、資料彙整及搜尋上,甚至就單純的資訊發布而言,部落格仍有其難以取代的地位。WordPress.org [1]提供開放原始碼,讓網路使用者自行架設實用美觀的網站或部落格,NTU Weblogs即是採用此軟體做客製化校內服務。實作過程中,在單一網站架設的情況下,WordPress都能提供極佳的使用者瀏覽經驗,但由於我們架設的是Multisite Network也就是多站台版本,卻會碰到動態產生頁面顯示緩慢的情況。接下來我們會探討其中一項解決方案,並提供實務上的安裝、操作設定,與大家分享。

一、緣由:
計資中心為提供更好的服務品質,在2013年12月將NTU Weblogs軟體版本升級至WordPress 3.8.X;同時間也進行伺服器硬體架構移植,建構兩台CentOS虛擬機分別服務網頁伺服器及資料庫伺服器。

在建置測試過程中,因為NTU Weblogs執行WordPress多站台(Multisite Network)系統,且各部落格除了已累積相當數量的文章數外,網站側邊也都設定多項小工具widgets,例如Tag 標籤、分類連結、最新回應等。以「臺大東亞文化研究論壇」http://east-asia.blog.ntu.edu.tw/ 為例,其部落格頁面佈局如下圖:

我們發現若每一個頁面都是在使用者瀏覽時才由PHP 程式動態產生的情況下,需要消耗相當多的系統資源(CPU power、Memory),且會對資料庫做大量頻繁的讀取。這種情況尤其是當搜尋引擎或網路爬蟲Web crawler[2]使用自動化瀏覽網路的程式來擷取網頁內容作索引時會更為惡化。因為除了會影響正常使用者瀏覽網頁的速度,更會造成部落格作者在後台發文及管理時的寫入延遲,嚴重影響操作時的流暢度。

在我們找了相關網頁文件及研究報告後,最後選定在wordpress.org plugins下載次數達547+萬次,能Makes WordPress Faster 的WP Super Cache plugin[3]來協助處理上述的問題。

二、WP Super Cache 簡介:
“A very fast caching engine for WordPress that produces static html files.” -- 正如 WP Super Cache的標語所述,其主要功能是在伺服器端產生靜態的HTML 網頁(web content super cache)。一旦HTML 網頁已存在,Apache伺服器便會以此靜態網頁提供外界瀏覽服務,不須執行原本須動態產生的PHP程式。

靜態網頁主要的服務對象有三類:1. 未登入之部落格用戶。2. 純瀏覽沒有留下回應的使用者。3. 只瀏覽非密碼保護的文章。由使用情形及Access log分析,上述機制可以提供99% 的部落格訪客服務。產生的效應對於登入使用的管理者而言,其在後台的操作流暢度也會因此而受惠。

WP Super Cache提供靜態網頁服務的快取機制有三種:

  1. Mod_Rewrite:服務速度最快,須安裝Apache mod_rewrite 模組,且須修改.htaccess 檔。適合常有巨量連線進入之部落格。

  2. PHP Caching:仍由PHP做處理,但是速度在一般流量下與Mod_Rewrite 無異。方便的地方是不需修改.htaccess 檔案。

  3. Legacy Caching:服務速度為三者中最慢但卻最有彈性。

WP Super Cache Plugin作者Donncha O Caoimh建議若是初次接觸伺服器端快取機制時,可以先採用PHP快取模式,既快速又容易設定。如下圖,

三、安裝過程:

  1. 請先至WordPress 官方網站http://wordpress.org/plugins/wp-super-cache/ 下載最新的插件版本,目前的版本支援WordPress 3.0 以上,經過測試3.8.1是相容的。

  2. 請先確定已經安裝好必需之Apache 模組:mod_mime、mod_rewrite。另外,mod_headers、mod_expires、mod_deflate 模組則是與檔案壓縮及過期失效的cache file垃圾回收(garbage collection)機制有關,最好都能先準備好。

  3. 編輯部落格的設定檔wp-config.php,加入下列2行設定後儲存。其中WPCACHEHOME 是指WP Super Cache plugin放置的路徑。
    define('WP_CACHE', true);
    define('WPCACHEHOME', 'xxx/wp-super-cache/');

  4. 接著到部落格網誌網路管理頁面->控制台->外掛區塊,網誌網路啟用WP Super Cache。若有錯誤訊息,請參考FAQ http://wordpress.org/plugins/wp-super-cache/faq/ 或作者網站[4],大部分安裝時會出現的問題應該都能獲得解決。

四、設定:
安裝成功後,設定通常不會有什麼問題。且按照plugin 作者之建議,開啟PHP Caching 機制即可,不必修改.htaccess 即可獲得不錯的效能。我們介紹幾個設定選項:

  1. 簡易模式:若使用預設的設定,在此模式下可以測試快取以及刪除快取頁面。

  2. 進階選項:包含雜項設定、過期時間與垃圾回收機制、不想被快取的檔案、Rejected User Agents等設定。若希望能減少網路傳送的資料量,建議可以勾選壓縮檔案,304未修改支援以及重建快取等選項。

垃圾就是指舊的或失效(stale)的檔案;新產生的快取檔案則稱之為有效(fresh)快取,每個快取檔案會有一定限度之有效期限。由於過期時間及垃圾回收機制的設定較為複雜,且與部落格運作情境有關,建議開啟設定後應測試一陣子看看。

若願意讓搜尋引擎幫忙產生靜態的HTML 檔案,可以考慮在Rejected User Agents 文字區塊中拿掉所有設定。

  1. 內容:顯示已被快取的檔案統計表,可以自行刪除部分或全部快取檔案。

  2. 預先載入:這會快取你網站上所有已發布的文章和頁面。它會產生 supercache 靜態檔案,匿名訪客(包括機器人)會命中快取頁面。有可能會對部落格的Google排名有幫助,因為Google也將網站速度納入衡量項目之一。不過預先載入會產生很多檔案。快取會從最新的文章開始做到最早的文章,所以當你有非常多 (10,000+) 文章的時候,可能只會有新文章被快取到,這在Multisite Network 主機上特別重要。當然也可以選擇將全部頁面、分類、標籤等全都預載下來。

  3. 除錯設定:在你的快取目錄內產生紀錄檔,可以幫助釐清問題。

五、結果與成效:
安裝設定好之後,我們最想知道的就是Super Cache 機制是否有啟動並提供服務?

方法1、檢視網頁原始碼:瀏覽部落格的首頁或任一文章頁面,按滑鼠右鍵檢視原始碼,拉到網頁原始碼最下方看是否有下列顯示,
<!-- Dynamic page generated in 6.839 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2014-02-13 07:38:30 -->
<!-- super cache -->

稍待一段時間後,請再瀏覽一次相同的URL(F5 重新整理),檢視原始碼,上述的快取產生時間戳記timestamp應該相同。倘若有開啟檔案壓縮設定,顯示會有稍微差異如下,
<!-- Dynamic page generated in 6.839 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2014-02-13 07:38:30 -->
<!-- Compression = gzip -->

方法2、檢視HTTP Headers:我們安裝Firefox Live HTTP Headers 附加元件作為檢查工具。檢查方式類似方法1,瀏覽任一頁面後按下右鍵選擇檢視頁面資訊

切換到Headers Tab,查看Response Headers 如下圖。使用PHP Caching機制時應會看到"WP-Super-Cache: Served supercache file from PHP"。

若是Legacy cached files 則會顯示:"WP-Super-Cache: Served legacy cache file"。

方法3、直接檢查伺服器檔案是否有寫入資料:按照預設設定,可以在wp-content/cache/supercache/hostname/ 目錄下看到WP Super Cache所產生的靜態HTML 網頁。

六、服務現況:
NTU Weblogs 上線至今共有3,135個部落格[5]、10,378位使用者註冊。由於學校資源有限,在共享服務品質的情況下,我們將定期歸檔(Archive) 一年內沒有操作使用的部落格。若您的部落格已被歸檔並希望重新啟用,請直接上網填寫連絡我們

計資中心歡迎校內公務單位、中心計畫、實驗室或是教師授課申請新增使用部落格服務,請直接上網http://blog.ntu.edu.tw/contactus/ 填寫連絡我們。信件內容請註明以下欄位,我們在收到您的申請信後會立即為您處理。
1. 申請人姓名:
2. 申請人計中帳號:
3. 連絡EMAIL:
4. 連絡電話:
5. 申請網誌子網域(SUBDOMAIN)名稱:若不欲使用計中帳號為SUBDOMAIN,而希望另外設定者,請以數字開頭或中間加入- 號。舉例說明,2050computer、english-training
6. 其他說明:

七、參考資料:
[1] http://wordpress.org/
[2] http://en.wikipedia.org/wiki/Web_crawler
[3] http://wordpress.org/plugins/wp-super-cache/
[4] http://ocaoimh.ie/wp-super-cache/
[5] 推薦校內部落格
新生專題課程–專屬於臺大新鮮人的課程
社會科學院 COSS, NTU
臺大圖書館參考服務部落格
alder-birds
共同教育中心
李銘杰雜談
Computational Quantum Matter
臺大東亞文化研究論壇
丙紳隨筆
甘懷真的日誌
No quality data, no product
臺大醫圖blog
ERP-Lab 台大醫院精神部 神經生理研究室
W.-L. Liang Weblog
Chiarung Lu's Lab
國立台灣大學健康資料研究中心
東亞法院與法律繼受研究計畫部落格
Earwigs 2013
La Scienco Proleta
畢業感言與祝福
人事室訓練專區
網路在教學上的應用-edweb
台大單車社
農業推廣諮識+
《史原》論壇

版權所有 © 國立台灣大學計算機及資訊網路中心 AllRights Reserved.
電話:02-33665022 或 3366-5023 傳真: 02-23637204
讀者意見信箱:ntuccepaper@ntu.edu.tw
地址:10617 臺北市羅斯福路四段一號
建議最佳螢幕解析度 1024*768