随着7.x版本的公布,PHP的性能得到倍数级提升,这里尝试着整理一下其原因.
我们先看官方网站php.net上的7.0版本发布消息: http://php.net/archive/2015.php#id2015-12-03-1
其中提到的
PHP 7.0.0 comes with a new version of the Zend Engine, numerous improvements and new features such as
PHP 7.0.0 带来了一个新版本的Zend引擎,数不清的提升和新特性,如下:
- Improved performance: PHP 7 is up to twice as fast as PHP 5.6 //提升的性能: 比5.6版本快至两倍
- Significantly reduced memory usage //显著减少了内存的使用
- Abstract Syntax Tree //抽象语法树
- Consistent 64-bit support //持续的64位支持
- Improved Exception hierarchy //提升过的异常分层
- Many fatal errors converted to Exceptions //许多致命的错误 转为了 异常
- Secure random number generator //使随机数生成器安全
- Removed old and unsupported SAPIs and extensions //移除了旧的未受支持的SAPI和扩展
- The null coalescing operator (??) // 空合运算符(??)
- Return and Scalar Type Declarations //Return(返回值)和Scalar(标量)类型的声明
- Anonymous Classes //匿名类
- Zero cost asserts //零成本的断言(?)
从上面可以看出7.0版本的一些大致的提升和新特性.那么我们再从7.0版本主要开发者鸟哥来介绍一下,到底是通过哪些方式来达到性能的提升的:
直接看总结部分
到现在我们基本上把zval的变化概况介绍完毕, 抽象的来说, 其实在PHP7中的zval, 已经变成了一个值指针, 它要么保存着原始值, 要么保存着指向一个保存原始值的指针. 也就是说现在的zval相当于PHP5的时候的zval *. 只不过相比于zval *, 直接存储zval, 我们可以省掉一次指针解引用, 从而提高缓存友好性.
其实PHP7的性能, 我们并没有引入什么新的技术模式, 不过就是主要来自, 持续不懈的降低内存占用, 提高缓存友好性, 降低执行的指令数的这些原则而来的, 可以说PHP7的重构就是这三个原则.