PHP 7.4 早期性能基准测试:与 7.3 差不多

2019年05月23日

PHP 7.4 目前正在积极开发中,准备添加到该版本的新特性包括短闭包、自定义对象序列化、FFI(Foreign Function Interface,外部函数接口)与扩展运算符等。

7.4 的首个 alpha 版本预计将于 6 月 6 日发布,而 beta 版本将从 7 月 18 日开始,如果一切顺利,PHP 7.4 正式版本将在 11 月底或 12 月初发布。

1 月份以来 PHP 7.4 已经开始在 Git 上分支,而 PHP 8.0 也开始在 master 上开发,国外科技媒体 Phoronix 针对从 Git 构建的 PHP 7.3.6、7.2.18、7.1.29、7.0.32、7.4 与 8.0 运行了一些快速基准测试,每个版本都以相同的方式构建,测试环境如下:

下边来看看结果:

PHPBench 显示 7.4 目前所处阶段(pre-alpha)的性能与 PHP 7.3 稳定版相当,并且已经比 PHP 7.0 的速度快了大约 30%。

上图微基准测试是数据越小性能越好,结果显示 PHP 7.4 比 PHP 7.3 略快,PHP 8.0 的性能也差不多,但是这里还没有考虑 8.0 开启 JIT 的情况。

在 Phoronix Test Suite 的内部 PHP 自我基准测试结果也显示,PHP 7.4 目前的 pre-alpha 状态下性能与 PHP 7.3 相当。

详情查看:

https://www.phoronix.com/scan.php?page=news_item&px=PHP-7.4-Early-Benchmark

展开阅读全文
4 收藏
分享
加载中
精彩评论
PHP之后很难再有像PHP7那样大幅提升真实PHP Web应用性能的版本了.
PHP8的JIT也不过是提升了PHP计算上的性能,对传统PHP应用性能帮助不大.

PHP新特性JIT,FFI,preload的核心开发者都是俄罗斯人Dmitry Stogov.
其中JIT和FFI参考了LuaJIT的设计和实现,preload则参考了JVM的Class Data Sharing.

FFI不意味着更快,以bench.php中的ary3测试为例.
与访问本机PHP数组和对象相比,访问FFI数据结构要慢很多(大约2倍).
所以使用它们来提高速度是没有意义的.但可以减少内存消耗.
在解释模式下,所有其他语言类似的FFI实现都是如此.
不过LuaJIT在其JIT中为FFI提供了特殊支持,FFI性能反而更高.

PHP 7.4引入的opcache.preload可以有效提升PHP框架性能.
在服务器(PHP-FPM)启动时(在运行任何应用程序代码之前),
我们可以将一组特定的PHP文件加载到内存中,
并使其内容"永久可用"于该服务器的所有后续请求.
这些文件中定义的所有函数和类都可以用于开箱即用的请求,
与内部实体完全相同(例如函数strlen()或类exception).
这样,我们可以预加载整个或部分框架,甚至整个应用程序类库.
2019-05-23 10:28
13
举报
最新评论 (14)
希望能够加个asycn和await
2019-05-27 01:36
0
回复
举报
还在用5.x
2019-05-25 09:06
0
回复
举报

引用来自“南漂一卒”的评论

短闭包是 Lambda 表达式吗?
是的
2019-05-24 19:45
0
回复
举报

引用来自“eechen”的评论

PHP之后很难再有像PHP7那样大幅提升真实PHP Web应用性能的版本了.
PHP8的JIT也不过是提升了PHP计算上的性能,对传统PHP应用性能帮助不大.

PHP新特性JIT,FFI,preload的核心开发者都是俄罗斯人Dmitry Stogov.
其中JIT和FFI参考了LuaJIT的设计和实现,preload则参考了JVM的Class Data Sharing.

FFI不意味着更快,以bench.php中的ary3测试为例.
与访问本机PHP数组和对象相比,访问FFI数据结构要慢很多(大约2倍).
所以使用它们来提高速度是没有意义的.但可以减少内存消耗.
在解释模式下,所有其他语言类似的FFI实现都是如此.
不过LuaJIT在其JIT中为FFI提供了特殊支持,FFI性能反而更高.

PHP 7.4引入的opcache.preload可以有效提升PHP框架性能.
在服务器(PHP-FPM)启动时(在运行任何应用程序代码之前),
我们可以将一组特定的PHP文件加载到内存中,
并使其内容"永久可用"于该服务器的所有后续请求.
这些文件中定义的所有函数和类都可以用于开箱即用的请求,
与内部实体完全相同(例如函数strlen()或类exception).
这样,我们可以预加载整个或部分框架,甚至整个应用程序类库.

引用来自“phper08”的评论

也就是使用框架也可以达到原生PHP一样快了?

引用来自“久峰爱玩火”的评论

常驻后
觉得还是很理想 有了swoole preload优势在哪里
2019-05-24 13:00
0
回复
举报

引用来自“eechen”的评论

PHP之后很难再有像PHP7那样大幅提升真实PHP Web应用性能的版本了.
PHP8的JIT也不过是提升了PHP计算上的性能,对传统PHP应用性能帮助不大.

PHP新特性JIT,FFI,preload的核心开发者都是俄罗斯人Dmitry Stogov.
其中JIT和FFI参考了LuaJIT的设计和实现,preload则参考了JVM的Class Data Sharing.

FFI不意味着更快,以bench.php中的ary3测试为例.
与访问本机PHP数组和对象相比,访问FFI数据结构要慢很多(大约2倍).
所以使用它们来提高速度是没有意义的.但可以减少内存消耗.
在解释模式下,所有其他语言类似的FFI实现都是如此.
不过LuaJIT在其JIT中为FFI提供了特殊支持,FFI性能反而更高.

PHP 7.4引入的opcache.preload可以有效提升PHP框架性能.
在服务器(PHP-FPM)启动时(在运行任何应用程序代码之前),
我们可以将一组特定的PHP文件加载到内存中,
并使其内容"永久可用"于该服务器的所有后续请求.
这些文件中定义的所有函数和类都可以用于开箱即用的请求,
与内部实体完全相同(例如函数strlen()或类exception).
这样,我们可以预加载整个或部分框架,甚至整个应用程序类库.

引用来自“phper08”的评论

也就是使用框架也可以达到原生PHP一样快了?
常驻后
2019-05-24 12:55
0
回复
举报
怎么做针对某个项目的preload?
2019-05-23 19:27
0
回复
举报
框架常驻内存还是非常有用的,除了框架,还是框架的插件,通通扔到内存当中。
2019-05-23 17:07
0
回复
举报
osc两个php“大咖”都来评论了,留影一下!
2019-05-23 16:12
0
回复
举报

引用来自“回去干活”的评论

实时引擎这块,在服务端每秒15帧的循环,估计没几个人会用PHP来做吧。
用luajit
2019-05-23 15:37
0
回复
举报
实时引擎这块,在服务端每秒15帧的循环,估计没几个人会用PHP来做吧。
2019-05-23 14:42
0
回复
举报
更多评论
14 评论
4 收藏
分享
返回顶部
顶部