让你的PHP引擎全速运转

  作为流行的Web编程语言,PHP的最大优势就是速度。PHP4已经在这方面做的非常好了,你几乎找不到比它更快的脚本编程语言了。但是如果你的应用负荷很大,而带宽又比较小,或者有其他的瓶颈影响你的服务器性能,那么,你不妨试试笔者为你开出的几个药方,看看是否灵验。
  一、代码优化
  一谈到代码优化,或许你想到的就是整齐明了的代码,但是本文的意思却不是在此,因为如果要寻求速度的话,就要对PHP源码作相应的调整。一般说来就是去掉多余的注释,让代码不可读。但是这对于一个具有良好素养的程序员来说,简直就是不可思议的。好在Zend Technologies公司发布了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内容压缩后发送给浏览器。对于大多数静态网页来说,这个模块十分合适。尽管
  Remotecommunications公司的人说这个模块支持所有那些mod_php,mod_perl,mod什么产生的动态内容,但是看起来还是不能工作,从mod_gzip的邮件列表来看,这个问题估计要到1.3.14.6f才能解决。
  如果要压缩动态内容的话,我们可以采用class.gzip_encode.php,一个在脚本开始和结束时使用的PHP类。对整个网站来说就是在php.ini的auto_prepend和auto_append中调用其中的函数。详细你可以阅读这个类的程序,这个程序注释得很好,作者几乎把什么都告诉你了。不过使用之前,你的PHP要编译为支持zlib。
  对于PHP 4.0.4来说,一个新的解决方案就是使用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及其缓冲之前,考虑是否该升级服务器了,或者采用动态负载平衡技术(那可是一大笔银子哦)。
  -不要低估内容压缩,在你100 Mb的内部网上面看到PHP应用的速度提升时,不要忘记使用调制解调器的用户在哪里埋怨你的100Kb的HTML页面。