Martin Streicher
(
mstreicher@linux-mag.com
), 主編, Linux Magazine
2007 年 3 月 20 日
PHP 是一種腳本語(yǔ)言,常用于創(chuàng)建 Web 應(yīng)用程序。它易于掌握,并能迅速生成可視化結(jié)果。然而,由于 PHP 是以解釋的方式執(zhí)行的,所以 PHP 代碼每次執(zhí)行時(shí)都會(huì)被解析和轉(zhuǎn)換成操作碼(opcode)。操作碼緩存能消除這項(xiàng)重復(fù)的工作,使 PHP 應(yīng)用程序運(yùn)行得更快。<!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--END RESERVED FOR FUTURE USE INCLUDE FILES-->
在很短的時(shí)間內(nèi),PHP 成為了一種非常流行的開(kāi)發(fā) Web 應(yīng)用程序的程序設(shè)計(jì)語(yǔ)言。對(duì)初學(xué)者來(lái)說(shuō),PHP 易于安裝和學(xué)習(xí)。對(duì)于有經(jīng)驗(yàn)的開(kāi)發(fā)人員而言,PHP(從 V5 開(kāi)始)提供了強(qiáng)大的面向?qū)ο筇匦浴HP 開(kāi)發(fā)人員擁有龐大的群體,大量的開(kāi)源及商業(yè)庫(kù)和工具擴(kuò)展了該核心語(yǔ)言的功能。PHP 能迅速產(chǎn)生可視化結(jié)果,因此備受眾人推崇。
與其他開(kāi)發(fā) Web 應(yīng)用程序的腳本語(yǔ)言(包括 Perl、Python 和 Ruby)相似, 每次 HTTP 請(qǐng)求調(diào)用時(shí),PHP 代碼都會(huì)被解析和翻譯為 操作碼 (PHP 引擎直接執(zhí)行的原語(yǔ)指令 —— 類(lèi)似于匯編語(yǔ)言)再執(zhí)行。在要求很低或可忽略的情況下,服務(wù)器看上去能立即執(zhí)行這個(gè)復(fù)雜的解釋過(guò)程。但是一旦處理的頁(yè)面增加,解釋 —— 從本質(zhì)上說(shuō),重復(fù)工作 —— 就會(huì)對(duì)服務(wù)器造成很大的負(fù)擔(dān)。在某些情況下,“編譯” PHP 代碼的時(shí)間會(huì)遠(yuǎn)遠(yuǎn)超過(guò)執(zhí)行該代碼所需的時(shí)間。因此,當(dāng)需求增加時(shí),您常常會(huì)自食其果,因?yàn)樘幚磉@些不斷解釋和動(dòng)態(tài)生成的頁(yè)面需要消耗更多的系統(tǒng)資源。
若您對(duì)處理器和 RAM 的預(yù)算沒(méi)有限制,那么就大可不必通過(guò)優(yōu)化應(yīng)用棧(硬件、操作系統(tǒng)、數(shù)據(jù)庫(kù)、Web 服務(wù)器和 PHP 代碼)來(lái)保證站點(diǎn)的可響應(yīng)性。然而,由于資金通常都是最缺乏的資源,所以改善性能是必不可少的。調(diào)優(yōu)意味著對(duì)系統(tǒng)增加內(nèi)存、修改操作系統(tǒng)參數(shù)、加速 Web 或數(shù)據(jù)庫(kù)服務(wù)器、提高代碼效率或者這其中的一些組合。每一項(xiàng)都有其各自的作用。
節(jié)約 CPU 周期的另一種方法是減少運(yùn)行 PHP 應(yīng)用程序所需的重復(fù)工作。當(dāng)然,沒(méi)有必要每次都把同樣的 PHP 代碼翻譯一遍。PHP 代碼被翻譯成操作碼后,可以把它保存起來(lái)并重復(fù)使用 —— 直到原始代碼被修改。確實(shí), 緩存 —— 用于保存和重用 PHP 操作碼 —— 是幾種 PHP 加速器內(nèi)部的機(jī)制,包括開(kāi)源 Alternative PHP Cache (APC)、支持 PHP 的 Turck MMCache、XCache、eAccelerator 和商業(yè) Zend Platform。后三類(lèi)加速器能夠緩存和優(yōu)化字節(jié)碼,這為系統(tǒng)提供了更多的速度提升。
這個(gè)月,我將探究如何安裝、部署和配置 XCache。XCache 相對(duì)較新,但是很多站點(diǎn)使用它的效果都很好。此外,XCache 易于構(gòu)建、安裝和配置,因?yàn)樗亲鰹?PHP 擴(kuò)展實(shí)現(xiàn)的。不需對(duì) Apache 和 PHP 進(jìn)行重編譯。
本文基于 XCache V1.2.0。它可為 PHP V4.3.11 至 V4.4.4、PHP V5.1.x 至 V5.2.x 以及 PHP V6 的早期版本提供可靠支持(XCache 并不支持 PHP V5.0.x)。XCache 兼容 mod_php 和 FastCGI 但并不支持 Common Gateway Interface (CGI) 和命令行 PHP 解釋器。XCache 源代碼能構(gòu)建在許多系統(tǒng)上,包括 FreeBSD、Sun Solaris、Linux? 和這里所示的 Mac OS X。使用 Cygwin UNIX? 仿真環(huán)境或 Visual C,能在 Microsoft? Windows? 上構(gòu)建 XCache。還可以為 Cygwin 或原生 Win32 構(gòu)建 XCache。后者與 PHP 的官方 Win32 版本兼容。
本文的演示基于 Apache V2.2.3、PHP V5.2.0、XCache V1.2.0(2006 年 10 月發(fā)布)和 Mac OS X V10.4.8 Tiger 上的 Xcode V2.4.1。硬件平臺(tái)為配有 2-GHz Intel? Core Duo 處理器和 2 GB RAM 的 Apple MacBook。
![]() ![]() |
![]()
|
在開(kāi)始之前,首先確保 PHP 正常安裝并核實(shí)
phpize
是否位于 shell 的
PATH
下。同時(shí),還需要一個(gè) C 編譯器,例如 GNU Compiler Collection (GCC),和一組包含
make
和
m4
的開(kāi)發(fā)工具。在 Mac OS X 上,免費(fèi)的 Xcode 軟件開(kāi)發(fā)環(huán)境提供了必需的構(gòu)建工具。
完成以下操作步驟,在 Mac OS X 上構(gòu)建、部署 XCache 并對(duì)其進(jìn)行性能檢測(cè)。在其他平臺(tái)上構(gòu)建 XCache 與之類(lèi)似。如果使用 Linux,則其發(fā)行版可能已經(jīng)包含了 XCache 或者已經(jīng)將其以預(yù)先打包好的格式提供給您。
首先增加 Mac OS X 上留出的共享內(nèi)存總量。要實(shí)現(xiàn)這一目的,需創(chuàng)建(或編輯)文件 /etc/sysctl.conf 并創(chuàng)建如下條目:
清單 1. 增加 Mac OS X 上留出的共享內(nèi)存總量
kern.sysv.shmmax=33554432kern.sysv.shmmin=1kern.sysv.shmmni=32kern.sysv.shmseg=8kern.sysv.shmall=8192 |
這些設(shè)置把共享內(nèi)存總量增加到了 32 MB。如還需進(jìn)一步擴(kuò)展共享內(nèi)存,可以把
kern.sysv.shmall
設(shè)定為
kern.sysv.shmmax
除以硬件頁(yè)面大小。使用
sysctl hw.pagesize
能獲得硬件頁(yè)面大小。例如,假設(shè)需要 128 MB 的共享內(nèi)存,那么設(shè)定
kern.sysv.shmmax=134217728
并設(shè)定
kern.sysv.shmall=32768
。
重啟 Mac OS X 使修改生效。重啟后,檢驗(yàn)新設(shè)置是否生效,鍵入:
sysctl -a | grep kern.sysv |
接下來(lái),通過(guò)源代碼構(gòu)建 XCache。從 http://xcache.lighttpd.net 處下載源代碼。下載完后解壓代碼,并轉(zhuǎn)換到 .tar 文件創(chuàng)建的新目錄。
清單 2. 通過(guò)源代碼構(gòu)建 XCache
$ cd /tmp$ wget http://210.51.190.228/pub/XCache/Releases/xcache-1.2.0.tar.gz$ tar xzf xcache-1.2.0.tar.gz$ cd xcache |
運(yùn)行
phpize
為編譯 XCache 做準(zhǔn)備。
清單 3. 運(yùn)行 phpize
$ phpizeConfiguring for:PHP Api Version: 20020918Zend Module Api No: 20020429Zend Extension Api No: 20050606 |
運(yùn)行
configure
,創(chuàng)建適合于原生操作系統(tǒng)的 makefile。
清單 4. 運(yùn)行 configure 創(chuàng)建 makefile
$ ./configure --enable-xcache --enable-xcache-coverager checking build system type... i686-apple-darwin8.8.1checking host system type... i686-apple-darwin8.8.1...creating libtoolconfigure: creating ./config.statusconfig.status: creating config.h |
此處,
--enable-xcache
選項(xiàng)包含 XCache 支持,
--enable-xcache-coverager
選項(xiàng)包含用于測(cè)量加速器功效的附加特性。要啟用操作碼優(yōu)化,添加
--enable-xcache-optimizer
。
當(dāng)然,下一步將使用
make
命令行構(gòu)建和安裝代碼。運(yùn)行
make
,然后作為
root
用戶(hù)運(yùn)行
make install
。
清單 5. 利用 make 構(gòu)建和安裝代碼
$ make...cp ./xcache.so /Users/strike/tmp/xcache/modules/xcache.soBuild complete.$ sudo make installInstalling shared extensions: /usr/lib/php/extensions/no-debug-non-zts-20020429/ |
如果上述兩項(xiàng)操作順利完成,那么 XCache 將位于 /usr/lib/php/extensions/no-debug-non-zts-20020429/xcache.so。(路徑 /usr/lib/php/extensions/no-debug-non-zts-20020429 反映了正在使用的 API 版本和用于構(gòu)建 PHP 的編譯選項(xiàng)。如果啟用了試用的 Zend Thread Safety 特性,則 "no-debug" 應(yīng)為 "debug","non-zts" 應(yīng)為 "zts"。)
因?yàn)榘惭b了擴(kuò)展,所以必需修改 php.ini 文件,使之包含 XCache 擴(kuò)展并對(duì)其進(jìn)行配置。打開(kāi)文件 /private/etc/php.ini,在其中添加如下代碼行:
清單 6. 為 XCache 擴(kuò)展修改 php.ini 文件
[xcache-common]zend_extension = /usr/lib/php/extensions/no-debug-non-zts-20020429/xcache.so[xcache.admin]; Change xcache.admin.user to your preferred login name xcache.admin.user = "admin"; Change xcache.admin.pass to the MD5 fingerprint of your password; Use md5 -s "your_secret_password" to find the fingerprintxcache.admin.pass = "0ad72f3f352fcd8acdf266bafd0ac48d"[xcache]; Change xcache.size to tune the size of the opcode cachexcache.size = 24Mxcache.shm_scheme = "mmap"xcache.count = 2xcache.slots = 8Kxcache.ttl = 0xcache.gc_interval = 0; Change xcache.var_size to adjust the size of variable cachexcache.var_size = 8Mxcache.var_count = 1xcache.var_slots = 8Kxcache.var_ttl = 0xcache.var_maxttl = 0xcache.var_gc_interval = 300xcache.test = Offxcache.readonly_protection = Onxcache.mmap_path = "/tmp/xcache"xcache.coredump_directory = ""xcache.cacher = Onxcache.stat = Onxcache.optimizer = Off[xcache.coverager]xcache.coverager = Onxcache.coveragedump_directory = "" |
注意: 為了簡(jiǎn)明起見(jiàn),此處省略了一些注釋。要了解每個(gè)參數(shù)的含義,請(qǐng)參閱 XCache 源代碼中 xcache.ini 文件設(shè)置的例子。
操作碼和變量緩存的大小是 32 MB,這是 /etc/rc 留出的最大值。對(duì)于 Mac OS X,
xcache.mmap_path
必須為文件名。因?yàn)?PHP 代碼將在 MacBook 上運(yùn)行,所以
xcache.count
應(yīng)設(shè)為 2,表示 MacBook 中 CPU 的數(shù)量。要訪問(wèn) XCache 統(tǒng)計(jì)信息頁(yè)面,需改變
xcache.admin.pass
設(shè)置。運(yùn)行:
$ md5 -s " password " |
此處
password
為您的密碼。把輸出復(fù)制給
xcache.admin.pass
。例如,若需將密碼設(shè)定為
op3nsesam3
,可以運(yùn)行:
$ md5 -s "op3nsesam3"MD5 ("op3nsesam3") = cd959ac3debe8f587546a3fa353b3268 |
然后把
cd959ac3debe8f587546a3fa353b3268
復(fù)制給
xcache.admin.pass
。
設(shè)置好 XCache 后,重啟 Apache Web 服務(wù)器。對(duì)于大多數(shù)系統(tǒng),可以以
root
用戶(hù)的身份使用
apachectl restart
進(jìn)行重啟。
$ sudo apachectl restart/usr/sbin/apachectl restart: httpd restarted |
創(chuàng)建程序以調(diào)用 phpinfo()
檢驗(yàn) XCache 是否已啟用,需創(chuàng)建一個(gè)小型 PHP 程序用于調(diào)用
phpinfo()
并在 Web 瀏覽器中打開(kāi)那個(gè)文件。這樣就能看到類(lèi)似下圖的 XCache 版面。
圖 1. phpinfo() 方法給出了 XCache 設(shè)置

要監(jiān)控 XCache,需安裝 XCache 源代碼的 admin 目錄中的管理頁(yè)面。把整個(gè) admin 目錄復(fù)制到 Apache 文檔根目錄下。通常來(lái)說(shuō),Mac OS X 中的文檔根目錄為 /Library/WebServer/Documents。
$ cp -pr admin /Library/WebServer/Documents |
復(fù)制完成后,使用
sudo apachectl restart
重啟 Web 服務(wù)器。用瀏覽器打開(kāi) http://localhost/admin,檢驗(yàn)管理面板是否工作正常。請(qǐng)參閱類(lèi)似圖 2 的面板。
圖 2. XCache Administration 面板

選擇一個(gè)或兩個(gè)應(yīng)用程序進(jìn)行測(cè)試。您可以使用自己的代碼或者,如果想要更復(fù)雜一點(diǎn),使用大型的 PHP 應(yīng)用程序,例如 phpMyAdmin 或者 Serendipity 。
![]() ![]() |
![]()
|
Apache HTTP Web 服務(wù)器提供了一個(gè)叫做
ab
的工具,即 Apache HTTP 服務(wù)器性能檢測(cè)(benchmark)工具的縮寫(xiě)。
ab
用于為 PHP 頁(yè)面自動(dòng)化處理大量的請(qǐng)求。phpMyAdmin 應(yīng)用程序?qū)?huì)是一個(gè)很好的選擇,因?yàn)樗芸赡芤呀?jīng)安裝到您的系統(tǒng)上了。
ab
工具易于使用:只需提供給它一個(gè)重復(fù)數(shù)和一個(gè) URL。
ab
工具對(duì)這個(gè) URL 提交若干次請(qǐng)求并返回統(tǒng)計(jì)信息。由于 XCache 已啟用,所以第一個(gè)性能檢測(cè)顯示了加速后的性能。
在運(yùn)行 ab 之前,用瀏覽器導(dǎo)航到 http://localhost/phpmyadmin/。訪問(wèn)這個(gè) PHP 頁(yè)面一次,便會(huì)加載用來(lái)將此頁(yè)呈現(xiàn)到緩存內(nèi)的所有 PHP 代碼。此時(shí),運(yùn)行如下的性能檢測(cè),重復(fù) 100000 次。
清單 7. phpMyAdmin 的性能檢測(cè)
$ ab -n 100000 http://localhost/phpmyadmin...Concurrency Level: 1Time taken for tests: 14.597 secondsComplete requests: 100000Failed requests: 98262 (Connect: 49131, Length: 49131, Exceptions: 0)Broken pipe errors: 0Non-2xx responses: 50869Total transferred: 25739714 bytesHTML transferred: 12005084 bytesRequests per second: 6850.72 [#/sec] (mean)Time per request: 0.15 [ms] (mean)Time per request: 0.15 [ms] (mean, across all concurrent requests)Transfer rate: 1763.36 [Kbytes/sec] received |
有用的統(tǒng)計(jì)信息包括每秒的請(qǐng)求數(shù)和完成所有測(cè)試的總時(shí)間。對(duì)于前者,值越大越好;對(duì)于后者,值越小越好。
現(xiàn)在,在 php.ini 文件中禁用 XCache,然后再一次運(yùn)行性能檢測(cè),如清單 8 所示。可以注釋掉對(duì) XCache 擴(kuò)展的引用,或者關(guān)閉所有的 XCache 特性。再次運(yùn)行性能檢測(cè)之前,需重啟 Apache。
清單 8. 禁用 XCache 時(shí)的 phpMyAdmin 性能檢測(cè)
$ sudo apachectl restart$ ab -n 100000 http://localhost/phpmyadminConcurrency Level: 1Time taken for tests: 17.771 secondsComplete requests: 100000Failed requests: 98256 (Connect: 49128, Length: 49128, Exceptions: 0)Broken pipe errors: 0Non-2xx responses: 50872Total transferred: 25741232 bytesHTML transferred: 12005792 bytesRequests per second: 5627.15 [#/sec] (mean)Time per request: 0.18 [ms] (mean)Time per request: 0.18 [ms] (mean, across all concurrent requests)Transfer rate: 1448.50 [Kbytes/sec] received |
此處,XCache 禁用之后,每秒的請(qǐng)求數(shù)有所下降,表示 Apache 服務(wù)器處理每個(gè)請(qǐng)求需更長(zhǎng)的時(shí)間。運(yùn)行整套測(cè)試所需的時(shí)間也因此增加了。
盡管這只是一個(gè)簡(jiǎn)單的性能檢測(cè) —— phpMyAdmin 連接數(shù)據(jù)庫(kù)的功能被禁用了,這樣能限制單獨(dú)解釋 PHP 的處理時(shí)間 —— 并且不是非常科學(xué),但它確實(shí)向我們演示了使用 XCache 能夠完成哪些任務(wù)。對(duì)于微小的投入(欣慰地是,PHP 或 Apache 不需重編譯),XCache 能產(chǎn)生一個(gè)相對(duì)較大的回報(bào)。代碼越復(fù)雜,可能的受益也越大。
若想了解 XCache 是如何有效地運(yùn)行的,請(qǐng)?jiān)L問(wèn) http://localhost/xadmin 并單擊 List PHP 。您能看到緩存中的 PHP 文件列表,連同 cache hit、操作碼的代碼大小、源文件的字節(jié)大小,等等。圖 3 顯示了 XCache 專(zhuān)門(mén)為 XAMPP 棧包構(gòu)建時(shí)的結(jié)果。
圖 3. XCache 管理頁(yè)面反映了緩存的狀態(tài)和內(nèi)容

前面已經(jīng)提及,XCache 是許多加速器中的一種。在強(qiáng)大的 Zend 軟件中還有許多免費(fèi)的開(kāi)源替代方案和一個(gè)商業(yè)化產(chǎn)品可選。每種 PHP 加速器都有自己的系統(tǒng)需求,所以應(yīng)主要根據(jù)現(xiàn)有的或預(yù)期的配置以及應(yīng)用程序的特性選擇合適的加速器。從中推薦一種很難,但是安裝編譯器緩存是我建議您務(wù)必要做的。
![]() ![]() |
![]()
|
除了緩存之外,還有許多其他途徑可以加速應(yīng)用程序。可以通過(guò)刪除 PHP 引擎的一些很深?yuàn)W的特性來(lái)簡(jiǎn)化它。例如,若不需使用 TCP/IP V6 (IPv6) 網(wǎng)絡(luò),便可在構(gòu)建 PHP 時(shí)禁用該屬性。通過(guò)在 PHP 源代碼樹(shù)的頂部輸入
./configure --help
可以參閱 PHP 配置選項(xiàng)的完整列表。無(wú)論選擇哪一個(gè)配置選項(xiàng),都應(yīng)該將:
--enable-inline-optimization --disable-debug |
添加到最終的配置命令。前一選項(xiàng)使 PHP 有可能更快地執(zhí)行(不需使用類(lèi)似 Zend Engine 的軟件進(jìn)行額外的操作碼優(yōu)化);后一選項(xiàng)取消了 PHP 的調(diào)試模式,只有當(dāng)需要解決 PHP 應(yīng)用服務(wù)器本身的問(wèn)題時(shí)才需開(kāi)啟該模式。
當(dāng)然,正如一些 C 應(yīng)用程序,我們能利用 C 編譯器構(gòu)建更佳的可執(zhí)行程序。如果把 PHP 作為 Linux 或 FreeBSD 上的 Apache Dynamic Shared Object (DSO) 在 x86 處理器上運(yùn)行,需考慮在
CFLAGS
(存儲(chǔ) C 編譯器選項(xiàng)的環(huán)境變量)中添加
-prefer-non-pic
選項(xiàng)。non-pic 會(huì)使用位置獨(dú)立的代碼構(gòu)建 PHP 并能提供 10% 的性能提升。還可以使用
CFLAGS
中的
-march
確定處理器的類(lèi)型,例如
-march=opteron
表示處理器類(lèi)型為 AMD Opteron。
提升速度的另一個(gè)途徑是 操作碼優(yōu)化 。此處,Zend Engine 之類(lèi)的軟件會(huì)優(yōu)化編譯過(guò)程中產(chǎn)生的操作碼,這理論上會(huì)減少代碼執(zhí)行的工作總量。
緩存和優(yōu)化都是透明的,并不需額外的編程。要應(yīng)用一些優(yōu)化操作,執(zhí)行 結(jié)構(gòu)分析 ,或檢查代碼在哪花費(fèi)了時(shí)間。重復(fù)的工作既不經(jīng)濟(jì)又運(yùn)算緩慢,這顯然會(huì)產(chǎn)生瓶頸。通過(guò)代碼優(yōu)化彌補(bǔ)周期的不足是很有價(jià)值的 —— 但是在結(jié)構(gòu)分析之前不要嘗試進(jìn)行任何優(yōu)化。
![]() ![]() |
![]()
|
在接下來(lái)的幾個(gè)月我將再次討論優(yōu)化,會(huì)談及調(diào)試、快速正文搜索、交替 Web 服務(wù)器等內(nèi)容。同時(shí),還將研究一個(gè)或多個(gè) PHP 加速器和操作碼優(yōu)化器。實(shí)現(xiàn) 10% 到 200% 的性能提升只需幾個(gè)小時(shí)的優(yōu)化和修補(bǔ)。想像一下您的機(jī)器利用這些空閑的周期能做多少事情吧!
學(xué)習(xí)
-
您可以參閱本文在 developerWorks 全球站點(diǎn)上的
英文原文
。
-
查看
本系列
完整的文章列表。
-
對(duì)于 PHP 開(kāi)發(fā)人員,
PHP.net
是個(gè)很好的資源。
-
查閱 “
PHP 的推薦讀物列表
”。
-
瀏覽 developerWorks 上的所有
PHP 文章
和
PHP 教程
。
-
要學(xué)習(xí)關(guān)于 PHP 的更多內(nèi)容,請(qǐng)?jiān)L問(wèn) IBM developerWorks 的
PHP 項(xiàng)目資源中心
。
-
要收聽(tīng)針對(duì)軟件開(kāi)發(fā)人員的有趣訪談和討論,一定要訪問(wèn) developerWorks
podcasts
。
-
隨時(shí)關(guān)注 developerWorks
技術(shù)事件和網(wǎng)絡(luò)廣播
。
-
查閱最近將在全球舉辦的面向 IBM 開(kāi)放源碼開(kāi)發(fā)人員的會(huì)議、展覽、網(wǎng)絡(luò)廣播和其他
活動(dòng)
。
-
訪問(wèn) developerWorks
開(kāi)源軟件技術(shù)專(zhuān)區(qū)
以獲得大量的 how-to 信息、工具和項(xiàng)目更新信息,幫助您利用開(kāi)放源碼技術(shù)進(jìn)行開(kāi)發(fā),并與 IBM 的產(chǎn)品結(jié)合使用。
-
訪問(wèn)
Safari Books Online
獲取大量開(kāi)放源碼技術(shù)的參考資料。
獲得產(chǎn)品和技術(shù)
-
下載
XCache
。
-
下載
eAccelerator
。
-
試用受歡迎的
Alternative PHP Cache (APC)
。
-
下載
Turck MMCache for PHP
。
-
使用
IBM 測(cè)試軟件
改進(jìn)您的下一個(gè)開(kāi)源開(kāi)發(fā)項(xiàng)目,這些軟件可以通過(guò)下載或從 DVD 中獲得。
討論
-
XCache IRC 頻道臨時(shí)由 Lighttpd IRC 頻道的
ZshWiki
托管。
-
查閱
XCache Forum
。
-
通過(guò)參與
developerWorks blogs
加入 developerWorks 社區(qū)。
- 參與 developerWorks PHP Developer Forum 。
![]() |
||
|
![]() |
Martin Streicher 是 Linux Magazine 的主編。他從普度大學(xué)獲得了計(jì)算機(jī)科學(xué)碩士學(xué)位,從 1982 年開(kāi)始用 Pascal、C、Perl、Java 和(最近)Ruby 編程語(yǔ)言編寫(xiě)類(lèi) UNIX 的系統(tǒng)。 |
來(lái)自: http://www.ibm.com/developerworks/cn/opensource/os-php-fastapps1/index.html
[轉(zhuǎn)]為 PHP 應(yīng)用提速、提速、再提速!,第 1 部分: 使用操作碼緩存軟件提升性能和吞吐量
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
