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