让PHP引擎全速运转的三个绝招

让PHP引擎全速运转的三个绝招

一、代码优化

一谈到代码优化,或许你想到的就是整齐明了的代码,但是本文的意思却不是在此,因为如果要寻求速度的话,就要对PHP源码作相应的调整。一般说来就是去掉多余的注释,让代码不可读。但是这对于一个具有良好素养的程序员来说,简直就是不可思议的。好在ZendTechnologies公司发布了Zend优化引擎可以帮助你做到这一点。它现在是免费的,但是你必须遵循Zend Optimizer许可。这个产品可以对引擎产生的中间代码进行优化。

安装这个引擎比较简单,下载对应平台的版本以后,解开压缩文件,然后在php.ini文件里面加上下面两行,重新启动Web服务器,就搞定了。

zend_optimizer.optimization_level=15

zend_extension="/path/to/ZendOptimizer.so"

zend_loader.enable=Off

如果是Win32平台的应该是:

zend_optimizer.optimization_level=15

zend_extension_ts="C:\\path\\to\\ZendOptimizer.dll"

zend_loader.enable=Off

其实第三行是可选的。因为看起来把zend_loader关掉能提高一点速度,因此值得把这第三行放到php.ini。需要注意的是,关掉的前提条件是你没有在使用Zend加密程序。

二、缓冲

如果想要更进一步提升速度,我们就需要考虑采用缓冲技术了。有一些可选的解决方案,包括Zend Cache(测试版本),APC,以及Afterburner Cache,另外还有jpCache等。

以上这些都是属于缓冲模块,他们把第一次对.php文件请求产生的中间代码存储在Web服务器的内存中,然后对以后的请求返回“编译好”的版本。因为这样减少了磁盘读写,而且都在内存工作,所以这个过程能显著提升应用性能,现成的这类产品比较多,到底选择谁呢?

◆Zend Cache是一款不错的商业产品,在第一次加载那些很大的PHP页面后,你会明显感受到速度的提升,服务器会留出更多的资源。可惜这个产品是要花银子的,但是在有些情形下,你可不要吝啬这些银子。

◆Afterburner Cache是Bware Technologies的产品,目前还处于Beta版本,看起来似乎和Zend Cashe一样,但是它不能达到Zend Cache那样好的效果,也不能和Zend优化引擎一起工作,但是它是免费的,所以我采用了这个模块。

◆APC(Alternative PHP Cache)是Community Connect发布的又一个免费模块,看起来似乎可以用于生产环境了。

三、Web内容压缩

对于日益拥挤的网络来说,节约带宽就像节约用水一样是十分值得提倡的。根据IETF标准,大多数浏览器应该支持使用gzip压缩的内容。也就是说你可以把用gzip压缩的内容发送给浏览器,浏览器会透明的解压数据。

mod_gzip是Remote Communications公司推出的免费Apache模块,能把静态的Web内容压缩后发送给浏览器。对于大多数静态网页来说,这个模块十分合适。尽管Remote Communications公司的人说这个模块支持所有那些mod_php,mod_perl,mod什么产生的动态内容,但是看起来还是不能工作,从mod_gzip的邮件列表来看,这个问题估计要到1.3.14.6f才能解决。

如果要压缩动态内容的话,我们可以采用class.gzip_encode.php,一个在脚本开始和结束时使用的PHP类。对整个网站来说就是在php.ini的auto_prepend和auto_append中调用其中的函数。详细你可以阅读这个类的程序,这个程序注释得很好,作者几乎把什么都告诉你了。不过使用之前,你的PHP要编译为支持zlib。

对于PHP5来说,一个新的解决方案就是使用ob_gzhandler,能达到和上面的类一样的效果,只要简单的在php.ini加入下面这句话就可以了:

output_handler=ob_gzhandler;

这能让PHP激活输出缓冲,并压缩所有输出。如果有什么特殊的理由不想让所有的内容都压缩输出的话,可以采用在.htaccess文件中加入下面的行,对对应目录下的文件进行压缩。

php_value output_handler ob_gzhandler

也可以直接在PHP代码中加入:

ob_start("ob_gzhandler");

这项压缩技术十分有效,但是对Netscape Communicator用户来说,因为不能压缩图形文件,所以看上去没有完整的发送,因此必须关闭对jpeg和gif文件的压缩,IE没有这个问题。

四、结论

采用本文所讨论的技术应该能改善你的网站性能,但是需要注意的是:

◆PHP可能不是导致瓶颈的原因,仔细检查其他原因(例如:数据库)

◆你不可能把服务器性能调节到最高状态。因此在埋怨PHP及其缓冲之前,考虑是否该升级服务器了,或者采用动态负载平衡技术。

◆不要低估内容压缩,在你100Mb的内部网上面看到PHP应用的速度提升时,不要忘记使用调制解调器的用户在哪里埋怨你的100Kb的HTML页面。