PHP为什么速度快

PHP本身很快
PHP往往比Python或者Ruby快个几倍,PHP数组是C写的,还经过了十几年的优化,PHP常用函数也都是C写的,操作数组或者调用这些标准库函数的时候,除了调用开销外,执行函数本身是就是C的速度。

PHP框架很薄
很多人完全不用框架,从FPM进来直奔主题,没有抽象封装带来的多余动作,比如说

URL路由在Nginx中已经简单处理好了,也不用捕获请求路径中的变量。
不需要session的时候,它不会自动给你获取session,session是很重的。
不用做身份认证的时候,也不需要框架里常见的auth那部分处理流程。
没有层层的beforeXXX和afterXXX,跳过了那一大堆HOOK方法。
以上框架常用功能,每一样都有厚重的框架自身的初始化操作,一旦用了,就会严重降低性能。现在比较主流的PHP框架,如Laravel和Codeigniter就是典型代表,性能大致是这样的,一个简单的hello world,每个CPU核心能负担的QPS

不用任何框架,可以跑10K
Codeigniter大概能跑到2K
Laravel优化前100左右,优化后能跑500?
一旦放弃了简单和薄框架,选择了厚重的优雅和封装,后果就是100倍的性能下降。既然Laravel那么慢,为什么有人用?因为大部分项目根本不在乎性能,慢如Laravel,一台12核CPU的服务器,就能扛几千万日请求了。多少互联网公司在日请求不到百万时就倒了?十有八九吧。

下一代PHP运行方式
还有不到10%的PHP用户,在特别需要性能又必须用PHP的时候,选择了Swoole,它不同于FPM,swoole本质是CLI运行,比较耗时的协议解析和常规处理,都是C写的扩展里做好了。Swoole在继承了PHP7的高性能的同时,还把FPM模式下每个请求框架要重新初始化的缺陷彻底解决掉了。然后选择Swoole的同时,仍然可以保持只用薄框架甚至不用框架,那速度是不是要起飞了?

在Swoole这种运行模式下,你可以把PHP看作是一个C写的应用带的配置文件,有什么理由比那些竞争对手慢呢?应该比那些对手们更快才对。如果给Laravel适配上Swoole,那绝对是另一番景象。

说点题外话,过去一年多我正好完整经历了一个Java项目的重构,原先是个大war包,Tomcat开几千个线程,除了高峰期会吃掉18个CPU核心之外,性能本身倒也没什么不妥。后来边拆分服务化边重写,现在1/3是PHP + Swoole 2.x协程,2/3是Java + Vertx异步回调,从性能上看,Swoole和Vertx旗鼓相当,但是PHP进程占用内存比JVM低的多。虽然服务化大大增加了内部调用开销,结果却很乐观,高峰期只要10个CPU核心就够了。

从开发效率上看,我个人身上,PHP大概比Java快10%左右吧,写的时候是PHP快,但是改起来却稍稍费事一些,要理清嵌套好几层的数组的结构,不如Java里直接跳转到明确的类型定义来的方便。加上编译器的存在,又消灭了一些低级bug。Java的标准库设施,文档和参考资料要远多于Swoole,这方面又缩小了开发效率上的差距。

Swoole协程在心智负担上的确要远低于Vertx的回调,一开始的时候是有很明显的差距的,但是Future/Promise写惯了,把常见的同步写法翻译过去也是基本不怎么动脑子的了。从趋势上看,未来还是协程这类同步方式写异步代码的风格会胜出,毕竟不需要几个月的适应回调的时间。

文章来源: PHP为什么速度快

人吐槽 人点赞

猜你喜欢

发表评论

用户名: 密码:
验证码: 匿名发表

你可以使用这些语言

查看评论:PHP为什么速度快