新葡 京娱乐网址:提升PHP速度全攻略

PHP的优点之一是速率很快,对付一样平常的网站利用,可以说是已经足够了。不过假如站点的造访量很高、带宽窄或者其它的身分令办事器孕育发生机能瓶颈的时刻,你可能得想想其它的法子来进一步前进PHP的速率了。这篇文章将从几个方面先容若何做到这一点,从而令用


当前位置: 主页 >


PHP的优点之一是速率很快,对付一样平常的网站利用,可以说是已经足够了。不过假如站点的造访量很高、带宽窄或者其它的身分令办事器孕育发生机能瓶颈的时刻,你可能得想想其它的法子来进一步前进PHP的速率了。这篇文章将从几个方面先容若何做到这一点,从而令用户浏览的时刻加倍“新葡 京娱乐网址爽”。

代码优化

在这里并不想再次奉告你若何写更干净的代码,这一点我想每小我都清楚,在必要速率的时刻,你可能已经在PHP源代码的优化上面做了不少的事情,这里所提出的是,这个啰嗦的事情可以交由其它对象来完成。这便是Zend Optimizer,此法度榜样可以从Zend Technologies的网站(http://www.zend.com/)免费获得。它的道理很简单,经由过程检测Zend引擎孕育发生的中心代码,并且优化它来获得更高的履行速率。我觉得优化代码是一项颇啰嗦的事情,而且优化后的代码可能变得难以理解,尤其是当你放下该PHP法度榜样一段光阴后,忽然间客户要求你做一些改动时,可能你自己也不懂了;-)。是以我建议你在PHP的源代码较为繁杂的时刻,用Zend Optimizer来做这个优化的事情,好处是它不会令你的代码变得繁杂难解。

安装Zend Optimizer是异常简单的。只要根据你应用的平台,下载相关的预编译库,并且在你的php.ini中加入两行,从新启动你的web办事器就行了!

zend_optimizer.optimization_level=15

zend_extensi新葡 京娱乐网址on="/path/to/ZendOptimizer.so"

zend_loader.enable=Off

你可能有点稀罕,不是说两行吗,怎么变成三行了。不过第三行是可选的,看来禁止这个zend_loader将会令优化的速率更快,是以不妨在你的php.ini文件中多加这一行。要留意的是:只有在你不应用Zend Encoder Runtime的时刻,才可以禁止zend_loa新葡 京娱乐网址der,关于Zend Encoder Runtime,还会鄙人文提到。

要更快吗?应用cache(缓冲)吧

假如你的PHP利用还必要更快的速率,下一个法子是缓冲。要实现这一点,有几种不合的要领。我自己就试用过Zend Cache(评测版本),APC和Afterburner Cache。

以上提到的都是“缓冲模块”。它们的道理都差不多,在php文件被首次哀求的时刻,经由过程将你的PHP源代码的中心代码存储在web办事器的内存中,对付今后同样的哀求,都直接供给内存中的“编译”版本。因为它可以令磁盘的造访达到最小化,是以这个措施确凿可以极大年夜地前进PHP的机能。更为方便的是,当你的PHP源代码改动时,缓冲的模块可以察觉到这些变更,并且从新载入一样,是以你不必担心客户获得的是旧版本的法度榜样。这些缓冲的模块确凿不错,然则我应该选用哪一种呢?下面分手先容一下:

Zend Cache是Zend Technologies的一个商业化的产品(它也是免费为我们供给PHP引擎和Zend Optimizer的公司)。它确凿不错。在首次运行后,你可以显着察觉到PHP的速率获得了很大年夜的前进,办事器的余暇资本也更多了。毛病是你要付费购买它,但就性价最近说,照样异常值得的。

Afterburner Cache是Bware Technologies(http://bwcache.bware.it/)供给的免费缓冲模块。当前还只是beta版,它所做的事情看来与Zend Cache差不多,不过机能的前进就比不上Zend Cache,而且现有的版本不能和Zend Optimizer一路事情,不过它是免费的。

APC(Alternative PHP Cache)是由Community Connect(http://apc.communityconnect.com/)供给的另一个免费模块。它的事情很稳定,速率也有不少的前进,要留意的是,我还没有找到一个官方的测试数据,这些只是在我的利用上作测试,是以不能下一个结论。

Web内容的压缩(令你客户用起来更“爽”)

颠末以上两个的措施,信托你的PHP利用的机能已经获得了很大年夜的前进,现在该从另一个方面来斟酌了:下载速率。假如你的利用只是在公司内跑,所有的客户都应用100Mb/s的以太网连接到办事器,这可能不是一个问题,然则假如你的客户中有应用慢速的modem连接的,你就要斟酌应用内容压缩这个措施了。根据IETF的规范,大年夜多半的浏览器都支持gzip的内容压缩。这意味着你在将web的内容发给客户的浏览器前,可以先应用gzip进行压缩,浏览器在接管的时刻就会自动解压数据,并且令用户看到原本的页面。同样,压缩web页面的内容也有几个不合的措施。

mod_gzip是Remote Communications(http://www.phpbuilder.com/columns/www.remotecommunications.com)免费供给的一个Apache模块,它可以压缩静态的web页面。它事情得很好,你只必要将它和apache一路编译就行了(或者将它作为一个DSO应用)。Remotecommunications的人说它还可以压缩动态的内容,包括mod_php, mod_perl等。不过我考试测验了一下,看来并不可。我在mod_gzip的邮件列表中懂得到,这个bug将鄙人一个版本中修正(我想应该是1.3.14.6f版本)。不过你仍旧可以用它作静态内容的压缩。

不过我们还想压缩动态的内容,是以我们必须找别的的法子。一个法子是应用class.gzip encode.php(http://leknor.com/code/),只要在你的PHP脚本中的开首和结尾调用这个PHP类,就可以压缩你的页面内容。假如全部站点都必要这样的压缩,你可以在你的php.ini文件中的auto_prepend和auto_append中调用这些函数。它事情得很好,不过在负载很重的站点上,它显着会带来一点的系统开销。要具体懂得它是若何事情的,可以看一下它的类代码(你至少必要在编译PHP时加入zlib支持)。作者在里面的阐明也异常具体,你可以获得任何必要懂得的器械。

在近来,我也看到了一篇关于PHP输出缓冲的文章。它说的是PHP4.0.4推出了一种新的输出缓冲的处置惩罚手段--ob_gzhandler,它的感化和上面先容的类相同,但差别是你只要在你的php.ini中应用以下的句法就行了:

output_handler = ob_gzhandler ;

这样将激活PHP的输出缓冲功能,并且压缩所有它发送的器械。出于某些特其余缘故原由,假如你不想在这里设置的话,只在必要的地方才改变这个默认设置的话(不压缩),只要在必要压缩的PHP源码目录中,改动一下.htaccess文件就行了,应用的句法如下:

php_value output_handler ob_gzhandler

... 或者直接在你的PHP代码新葡 京娱乐网址中调用它,以下面的要领:

ob_start("ob_gzhandler");

这个输出缓冲处置惩罚的措施很好,并且不会为办事器带来额外的系统开销。我十分建议你应用这种措施。它的改变可以用以下的例子阐明,假如客户应用的是28.8K的modem的话,颠末这个处置惩罚,他将会觉得忽然间换成了一个ISDN接入一样。要留意的一点是:Netscape Communicator并不支持图象的压缩,以是将显示不出来。是以除非你的客户整个应用Internet Explorer,否则你必须禁止压缩jpeg和gif图象。其它文件的压缩应该没有问题,然则我建议你最好测试一下,分外是浏览器应用了不常见的插件或者是少人用的浏览器。

其它有用的器械...

Zend Technologies的在线市廛在今年1月24开通了,并且售卖一些与PHP相关的有趣产品。包括前面提到的Zend Cache,Zend Encoder(简单说来,是PHP代码的编译器,可以孕育发生编译的类,这样你就可以售卖给顾客而不用担心泄露源代码。在必要运行这些类的web办事器上,将要应用Zend Encoder Runtime来解码),Zend Ide(一个为PHP而设的集成化开拓情况,带有很多强大年夜的机能),还有为PHP开拓者供给的支持办新葡 京娱乐网址事。

结论

应用这篇文章提到的技巧,你将可以极大年夜地前进站点的机能,不过请留意以下几点:

1.瓶颈或许不在PHP,你必要考察利用中的每个工具(例如数据库)

2.一个web办事器的机能都是有限定的,是以,不要觉得机能不好便是PHP的缘故原由,也可能是造访量很大年夜,你的办事器必要进级了,或者斟酌应用负载均衡的系统(将会花很多钱)

3.不要觉得内容压缩不紧张,在100Mb/s的局域网中,你的PHP利用或许机能很好,但要斟酌到应用慢速modem的用户。

发表评论
加载中...

相关文章