調優LAMP應用程序的5種簡單方法:使用操作碼緩存
調優LAMP 應用程序的 5 種簡單方法:
使用操作碼緩存、優化 PHP 設置、管理require和include、優化數據庫、有效緩存數據
簡介
Wikipedia、Facebook 和 Yahoo! 等主要 web 屬性使用 LAMP 架構來為每天數百萬的請求提供服務,而 Wordpress、Joomla、Drupal 和 SugarCRM 等 web 應用程序軟件使用其架構來讓組織輕松部署基于 web 的應用程序。
該架構的優勢在于其簡單性。而 .NET 這樣的堆棧和 Java™ 技術可能使用大量硬件、昂貴的軟件棧和復雜的性能調優,LAMP 堆棧可以運行于商品硬件之上,使用開源軟件棧。由于軟件棧是一個松散的組件集,而非一個整體堆棧,性能調優是一大挑戰,因為需要分析和調優每個組件。
然而,這有幾個個簡單性能任務會對任何規模的網站的性能產生巨大的影響。在本文中,我們將探討旨在優化 LAMP 應用程序性能的 5 個這樣的任務。這些項目應當很少需要對您的應用程序進行架構更改,使其成為***化您的 web 應用程序所需的響應能力和硬件需求的安全、便捷的選擇。
使用操作碼緩存
提高任何 PHP 應用程序(當然是 LAMP 中的 “P”)的性能的最簡單方式是利用一個操作碼緩存。對于我使用的任何網站,它是我確保存在的一項內容,因為性能影響很大(很多時候有了操作碼緩存,響應時間可減少一半)。但是對 PHP 不熟悉的大部分人的一個很大的疑問是,為何改進會如此之大。答案在于 PHP 如何處理 web 請求。圖 1 概覽了 PHP 請求的流程。
圖 1. PHP 請求
由于 PHP 是一種解釋語言,而非 C 或 Java 等編譯語言,對每個請求執行了 “解析-編譯-執行” 的整個步驟。您可以看到為何這會耗時、耗資源,特別是當腳本在請求之間很少變化時。解析和編譯腳本之后,腳本作為一系列操作碼處于機器可解析狀態。這是操作碼緩存發揮效用的地方。它作為一系列操作碼緩存這些編譯腳本,以避免為解析和編譯每個請求步驟。您將在圖 2 中看到這樣的工作流是如何運作的。
圖 2. PHP 請求使用操作碼緩存
因此當 PHP 腳本的緩存操作碼存在時,我們可以跳過 PHP 請求流程的解析和編譯步驟,直接執行緩存操作碼并輸出結果。檢查算法負責處理您可能對腳本文件進行了更改的情況,因此在已變更腳本的***個請求后,會為隨后的請求自動重新編譯和緩存操作碼,替換緩存的腳本。
操作碼緩存對于 PHP 流行已久,其中早期的一些要追溯到 PHP V4 的全盛期。目前有一些流行選項正在積極開發和使用中:
•替代 PHP 緩存(APC)可能是 PHP ***的操作碼緩存(參見 參考資料)。它由若干核心 PHP 開發人員所開發,做出了很大貢獻,Facebook 和 Yahoo! 的工程師賦予了其速度和穩定性。它還支持用于處理 PHP 請求的若干其他速度改進,包括一個用戶緩存組件,這將在本文后面探討。
•Wincache 是主要由 Microsoft® 的 Internet Information Services (IIS) 團隊積極開發的一個操作碼緩存,僅供在使用 IIS web 服務器的 Windows® 上使用(參見 參考資料)。開發它的主要動力在于使 PHP 成為 Windows-IIS-PHP 堆棧上的***開發平臺,因為據知 APC 在該堆棧上運作的不是很好。它在功能上非常類似于 APC,且支持一個用戶緩存組件,以及一個內置會話處理程序,以將 Wincache 作為一個會話處理程序直接加以利用。
•eAccelerator 是原始 PHP 緩存之一 Turck MMCache 操作碼緩存(參見 參考資料)的一個派生。不同于 APC 和 Wincache,它僅是一個操作碼緩存和優化器,因此它不包含用戶緩存組件。它在 UNIX® 和 Windows 堆棧上完全兼容,且對于不打算利用 APC 或 Wincache 提供的其他功能的站點很流行。如果您要使用 memcache 這樣的解決方案來為多 web 服務器環境提供一個單獨的用戶緩存服務器,那么這就是常見情況。
毫無疑問,一個操作碼緩存是通過在每次請求后消除解析和編譯腳本的需要來加速 PHP 的***步。完成***步之后,您應當看到響應時間和服務器負載方面的改進。但是優化 PHP 可以做的不止這些,我們接下來將加以討論。