(一)简介 本文尝试对PHP程序加速的各个方面进行探索,包括必要性以及从不同角度采取的具体措施。希望有助于读者了解PHP程序加速,并应用于实际。
(二)是否需要加速? 这个问题听起来有点愚蠢。在这个时代,很少有人会怀疑时间是最宝贵的财富,尤其是在商业市场上。程序执行越快,用户就节约越多的时间,这样你的程序就可以用更少的时间和服务器资源为用户服务,从而产生更多效益。
我想对于大部份人(包括我自己)来说,很多WEB项目都是在很紧张的时间里完成的,通常没有经过缜密的思考和严格的测试。当开始一个新的WEB项目。很多人都在构建那种“快而乱”的应用,缺乏必要的时间来调整和改良代码,这时优化和加速就是我们必须采取的措施。
然而需要特别指出的是,并不是所有程序都需要加速。
优化已完成的代码是很浪费时间的,最好的方法是在写代码的时候就注意到效率,然后完成项目后只优化确实需要优化的那部份。一般一个程序只会有少数几个影响速度的瓶颈,将它们找出来并解决掉,程序就可以很好地运行。另外,当遇到执行效率低下的情况,首先要用大局的眼光来找出影响效率的主要因素,而不要拘泥于细节—例如数据量过大,服务器带宽不够,或硬件配置过低,在这样的情况下,优化代码于事无补。
另外,在没有发现程序有明显的执行缓慢的迹象时,就不要太吹毛求疵,为了改进一些非常细节的代码而浪费时间。用这些时间,你可以完成另一个项目或为原来的项目完成一个扩展功能。当然你可以笑话我不够负责,没有把工作做得尽善尽好,我也可以说你是完美主义者:-)
综上,在你决定为你的PHP程序提速之前,问问自己是否有必要。
(三)如何加速? 要回答“如何加速”这个问题前,需要先回答以下两个小问题:
你的程序慢在哪一部份?
PHP可以从哪几个方面考虑加速?
第一个小问题显然我无法给你答案,但我建议你用“测试脚本执行速度”的方法来解决。只有找出限制速度的瓶颈,才能考虑如何去解决。
第二个小问题我大概的答案是:代码优化,压缩输出,内容缓存输出,函数缓存输出,加速/缓存工具软件。如果你知道更多请告诉我:-)
下面我们来详细地研究一下这几个方面的相关技术。当然实际上每个方面都有无数的细节可以讨论,下面的内容难免会有片面的地方,欢迎补充。
<1> 测试
◆ 服务器负载测试
服务器负载太大而影响程序效率也是很常见的,我们需要对此进行测试。这里我以目前最常用的apache(Unix平台最流行的WEB服务器平台)服务器为例。
apache(Unix平台最流行的WEB服务器平台)服务器自带有一个叫AB(apache(Unix平台最流行的WEB服务器平台)Bench)的工具,在bin目录下。使用这个轻巧的工具我们可以对服务器进行负载测试,看看在重负荷之下服务器的表现如何。apache(Unix平台最流行的WEB服务器平台)Bench 可以针对某个特定的 URL 仿真出连续的联机请求,同时还可以仿真出同时间点数个相同的联机请求,因此利用 apache(Unix平台最流行的WEB服务器平台)Bench 可帮助我们在网站开发期间仿真实际上线可能的情况,利用仿真出来的数据作为调整服务器设定或程序的依据。
在命令行下输出:
./ab -n number_of_total_requests -c number_of_simultaneous_requests http://your_web_server/your_php_app.php
例如:
./ab -n 1000 -c 50 http://www.domain.com/myapp.php
AB将同时向http://www.domain.com/myapp.php发出50个并发请求,共发出1000次。
测试结果将可能是这样的:
Server Software: apache(Unix平台最流行的WEB服务器平台)/2.0.16
Server Hostname: localhost
Server Port: 80
Document Path: /myapp.php
Document Length: 1311 bytes
Concurrency Level: 50
Time taken for tests: 8.794 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 1754000 bytes
9 7 3 123456 4 8 :