提升PHP执行速度全面分析

A-A+ 来源:未知 编辑:mj3 发布: 2013-06-27 15:22
PHP的长处之一是速度很快,关于通常的网站运用,能够说是现已足够了。不过若是站点的拜访量很高、带宽窄或许其它的要素令效劳器发生功用瓶颈的时分,你能够得想想其它的办法来进一步进步PHP的速度了。这篇文章将从几个方面介绍怎样做到这一点,然后令用户阅读的时分愈加“爽”。
 
  代码优化 
  怎样写更洁净的代码,这一点我想每个人都明白,在需求速度的时分,你能够现已在PHP源代码的优化上面做了不少的作业,这里所提出的是,这个烦琐的作业能够交由其它东西来完结。这即是Zend Optimizer,此程序能够从Zend Technologies的网站(http://www.zend.com/)免费得到。它的原理很简略,通过检测Zend引擎发生的中间代码,而且优化它来得到更高的履行速度。我以为优化代码是一项颇烦琐的作业,而且优化后的代码能够变得难以知道,尤其是当你放下该PHP程序一段时间后,突然间客户需求你做一些修正时,能够你自个也不懂了;-)。因而我主张你在PHP的源代码较为杂乱的时分,用Zend Optimizer来做这个优化的作业,优点是它不会令你的代码变得杂乱难明。php视频教程
 
  装置Zend Optimizer是非常简略的。只需依据你运用的渠道,下载关联的预编译库,而且在你的php.ini中参加两行,从头启动你的web效劳器就行了!
 
  zend_optimizer.optimization_level=15zend_extension="/path/to/ZendOptimizer.so" zend_loader.enable=Off
 
  你能够有点新鲜,不是说两行吗,怎样成为三行了。不过第三行是可选的,看来制止这个zend_loader将会令优化的速度更快,因而无妨在你的php.ini文件中多加这一行。要注意的是:只需在你不运用Zend Encoder Runtime的时分,才能够制止zend_loader,关于Zend Encoder Runtime,还会在下文说到。
 
  要更快吗?运用cache(缓冲)
 
  若是你的PHP运用还需求更快的速度,下一个办法是缓冲。要完成这一点,有几种不相同的办法。我自个就试用过Zend Cache(评测版别),APC和Afterburner Cache。
 
  以上说到的都是“缓冲模块”。它们的原理都差不多,在php文件被初次恳求的时分,通过将你的PHP源代码的中间代码存储在web效劳器的内存中,关于今后相同的恳求,都直接供给内存中的“编译”版别。因为它能够令磁盘的拜访到达最小化,因而这个办法的确能够极大地进步PHP的功用。更为便利的是,当你的PHP源代码修正时,缓冲的模块能够察觉到这些改动,而且从头载入相同,因而你不必忧虑客户得到的是旧版别的程序。这些缓冲的模块的确不错,可是我大概选用哪一种呢?下面别离介绍一下php培训

 
  Zend Cache是Zend Technologies的一个商业化的商品(它也是免费为咱们供给PHP引擎和Zend Optimizer的公司)。它的确不错。在初次运转后,你能够显着察觉到PHP的速度得到了很大的进步,效劳器的闲暇资源也更多了。缺陷是你要付费购买它,但就性价比来说,仍是非常值得的。
 
  Afterburner Cache是Bware Technologies(bwcache.bware.it)供给的免费缓冲模块。当时还仅仅beta版,它所做的作业看来与Zend Cache差不多,不过功用的进步就比不上Zend Cache,而且现有的版别不能和Zend Optimizer一同作业,不过它是免费的。
 
  APC(Alternative PHP Cache)是由Community Connect(apc.communityconnect.com)供给的另一个免费模块。它的作业很安稳,速度也有不少的进步,要注意的是,我还没有找到一个官方的测验数据,这些仅仅在我的运用上作测验,因而不能下一个定论。
 
  通过以上两个的办法,相信你的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的用户。
 
本文章内容来源:新程PHP培训  http://www.phppx.com

猜你还想看:

并发症高发敲起健康警钟,防控糖尿病不可慢行!

并发症高发敲起健康警钟,防控糖尿病不可慢行!

相关数据显示,糖尿病已成为威胁人类健康的主要慢性疾病之一。近几年,我国成人2型糖尿病患病率呈明显增长趋势,糖尿...

霍艳明:中西医结合治疗高血压 可预防靶器官损伤

霍艳明:中西医结合治疗高血压 可预防靶器官损伤

近年来高血压发病率呈现出明显的上升趋势,据统计,目前,高血压发病率已达18.7%,部分地区平均每5人就有1人罹患高血压...

专家指导高血压患者如何合理安全用药

专家指导高血压患者如何合理安全用药

原发性高血压是心血管系统最常见的疾病。我国目前患病率约18.8%,计1.6亿人。高血压之所以必须积极治疗是由于此症致残率...

秋冬时节易感冒 高血压病人谨慎选择感冒药

秋冬时节易感冒 高血压病人谨慎选择感冒药

金秋十月,天气逐渐转凉,早晚温差特别明显,有些高血压患者稍不注意就染上感冒。然而,有些高血压病人发现在服用感冒...

别怕!这些情况不是高血压!

别怕!这些情况不是高血压!

随着医学知识的宣传普及,很多人都会开始关注自己的血压,当血压升高时,往往会怀疑自己是不是得了高血压。其实在正常...