深度探讨 PHP 之性能
机器独立部署。
3.2裸PHP性能 最简单的PHP脚本。
require_once ‘./actions/indexAction.php’; $objAction = new indexAction(); $objAction->init(); $objAction->execute(); ?> Acitons/indexAction.php里面的代码如下 class indexAction { public function execute() { echo ‘hello, world!’; } } ?> 通过压力工具测试结果如下:
3.3裸PHP框架性能 为了和3.2的对比,基于bingo2框架实现了类似的功能。代码如下
require_once ‘Bingo/Controller/Front.php’; $objFrontController = Bingo_Controller_Front::getInstance(array( ‘actionDir’ => ‘./actions’, )); $objFrontController->dispatch(); 压力测试结果如下:
从该测试结果可以看出:框架虽然有一定的消耗,但对整体的性能来说影响是非常小的。 3.4标准PHP模块的基准性能 所谓标准PHP模块,是指一个PHP模块所必须要具体的基本功能: 路由分发。 自动加载。 LOG初始化&Notice日志打印。所以的UI请求都一条标准的日志。 错误处理。 时间校正。 自动计算每个阶段耗时开销。 编码识别&编码转化。 标准配置文件的解析和调用 采用bingo2的代码自动生成工具产生标准的测试PHP模块:test。 测试结果如下:
3.5结论 从测试数据的结论来看,PHP本身的性能还是可以的。基准性能完全能够达到几千甚至上W的QPS。至于为什么在大多数的PHP模块中表现不佳,其实 这个时候更应该去找出系统的瓶颈点,而是简单的说OK,PHP不行,那我们换C来搞吧。(下一个章节,会通过一些例子来对比,采用C来处理不见得有特别的 优势) 通过基准数据,可以得出以下几个具体的结论: 1.PHP本身性能也很不错。简单功能下能够达到5000QPS,极限也能过W。 2.PHP框架本身对性能影响非常有限。尤其是在有一定业务逻辑和数据交互的情况下,几乎可以忽略。 3.一个标准的PHP模块,基准性能能够达到2000QPS(80 cpu idle)。 4.对比分析 很多时候,大家发现PHP模块性能不行的时候,就来一句“ok,我们采用C重写吧”。在公司内,采用C/C++来写业务逻辑模块的现象到处都有,在前几年甚至几乎全部都是采用C来写。那时候大家写的真是一个痛苦:调试难、敏捷不要谈。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |