調(diào)優(yōu)LAMP應(yīng)用程序的5種簡(jiǎn)單方法:優(yōu)化您的 PHP 設(shè)置
調(diào)優(yōu)LAMP 應(yīng)用程序的5 種簡(jiǎn)單方法:
簡(jiǎn)介
Wikipedia、Facebook 和 Yahoo! 等主要 web 屬性使用 LAMP 架構(gòu)來為每天數(shù)百萬的請(qǐng)求提供服務(wù),而 Wordpress、Joomla、Drupal 和 SugarCRM 等 web 應(yīng)用程序軟件使用其架構(gòu)來讓組織輕松部署基于 web 的應(yīng)用程序。
該架構(gòu)的優(yōu)勢(shì)在于其簡(jiǎn)單性。而 .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è)簡(jiǎn)單性能任務(wù)會(huì)對(duì)任何規(guī)模的網(wǎng)站的性能產(chǎn)生巨大的影響。在本文中,我們將探討旨在優(yōu)化 LAMP 應(yīng)用程序性能的 5 個(gè)這樣的任務(wù)。這些項(xiàng)目應(yīng)當(dāng)很少需要對(duì)您的應(yīng)用程序進(jìn)行架構(gòu)更改,使其成為最大化您的 web 應(yīng)用程序所需的響應(yīng)能力和硬件需求的安全、便捷的選擇。
優(yōu)化您的 PHP 設(shè)置
雖然實(shí)現(xiàn)操作碼緩存是性能改進(jìn)的一大創(chuàng)舉,不過也有大量其他優(yōu)化選項(xiàng)可供您基于 php.ini 文件中的設(shè)置優(yōu)化您的 PHP 設(shè)置。這些設(shè)置更適合于生產(chǎn)實(shí)例;在開發(fā)或測(cè)試實(shí)例上,您可能不希望做這些變更,因?yàn)樗鼤?huì)使得應(yīng)用程序問題的調(diào)試變得更難。
讓我們看一下對(duì)于性能提升很重要的一些項(xiàng)目。
應(yīng)當(dāng)禁用的選項(xiàng)
有若干 php.ini 設(shè)置應(yīng)當(dāng)予以禁用,因?yàn)樗鼈兂S米飨蚝蠹嫒菪裕?/P>
•register_globals — 在 PHP V4.2 之前該功能常常是默認(rèn)值,其中傳入的請(qǐng)求變量被自動(dòng)賦給普通 PHP 變量。這樣做除了引起重大安全問題之外(使未過濾的傳入請(qǐng)求數(shù)據(jù)與普通 PHP 變量?jī)?nèi)容相混),對(duì)每一個(gè)請(qǐng)求這樣做還會(huì)產(chǎn)生開銷。因此禁用這一設(shè)置使您的應(yīng)用程序更安全且能提高性能。
•magic_quotes_* — 這是 PHP V4 的另一遺留項(xiàng),其中傳入的數(shù)據(jù)會(huì)自動(dòng)避開有風(fēng)險(xiǎn)的表單數(shù)據(jù)。它旨在作為一個(gè)安全特性,在將傳入的數(shù)據(jù)發(fā)送到數(shù)據(jù)庫(kù)之前對(duì)其進(jìn)行整理,但不是很有效,因?yàn)樗荒軒椭脩纛A(yù)防常見的 SQL 注入攻擊。由于大部分?jǐn)?shù)據(jù)庫(kù)層支持能更好地處理該風(fēng)險(xiǎn)的準(zhǔn)備語句,禁用該設(shè)置會(huì)再次消除這個(gè)煩人的性能問題。
•always_populate_raw_post_data — 這僅當(dāng)您出于某些原因需要查看傳入的未過濾 POST 數(shù)據(jù)的整個(gè)負(fù)載時(shí)才需要。否則,它僅在內(nèi)存中存儲(chǔ) POST 數(shù)據(jù)的一個(gè)副本,而這沒有必要。
然而,在遺留代碼上禁用這些選項(xiàng)會(huì)有風(fēng)險(xiǎn),因?yàn)樗鼈兛赡苋Q于其設(shè)置來實(shí)現(xiàn)正確執(zhí)行。不應(yīng)當(dāng)基于被設(shè)置的這些選項(xiàng)來開發(fā)任何新代碼,而且可能的話,您應(yīng)當(dāng)尋求方法來重構(gòu)您的現(xiàn)有代碼,避免使用它們。
應(yīng)當(dāng)禁用或調(diào)整設(shè)置的選項(xiàng)
您可以啟用 php.ini 文件的一些優(yōu)秀性能選項(xiàng),來提升您的腳本速度:
•output_buffering — 您應(yīng)當(dāng)確保啟用該選項(xiàng),因?yàn)樗鼤?huì)以塊為單位將輸出刷回到瀏覽器,而非以每個(gè) echo 或 print 語句為單位,而后者會(huì)大大減緩您的請(qǐng)求響應(yīng)時(shí)間。
•variables_order — 這個(gè)指令控制傳入請(qǐng)求的 EGPCS(Environment、Get、Post、Cookie 和 Server)變量解析順序。如果您沒有使用某種超全局變量(比如環(huán)境變量),您可以安全地刪除它們來獲得一點(diǎn)加速,從而避免在每一個(gè)請(qǐng)求上解析它們。
•date.timezone — 這是在 PHP V5.1 中添加的一個(gè)指令,用于設(shè)置默認(rèn)時(shí)區(qū),然后用于后面將要介紹的 DateTime 函數(shù)。如果您不在 php.ini 文件中設(shè)置該選項(xiàng),PHP 會(huì)執(zhí)行大量系統(tǒng)請(qǐng)求來弄清它是什么,且在 PHP V5.3 中,對(duì)每一個(gè)請(qǐng)求會(huì)發(fā)出一個(gè)警告。
就以應(yīng)當(dāng)在您的生產(chǎn)實(shí)例上配置的設(shè)置而言,這些被看作是 “唾手可得”。就 PHP 而言,還有一件事需要考慮。這就是您的應(yīng)用程序中 require() 和 include()(以及其同級(jí) require_once() 和 include_once())的使用。這些函數(shù)優(yōu)化您的 PHP 配置和代碼,以防止對(duì)每個(gè)請(qǐng)求進(jìn)行不必要的文件狀態(tài)檢查,從而減少響應(yīng)時(shí)間。
本節(jié)講述的是:優(yōu)化 PHP 設(shè)置、下一節(jié)講述:管理require和include