html5中文学习网

您的位置: 首页 > 网络编程 > PHP编程 » 正文

Zend引擎的优化_PHP教程_编程技术

[ ] 已经帮助:人解决问题

  在PHP 5.4的更新list上, 有一句: 提升了Zend引擎的性能, 减少了内存占用.RAqHTML5中文学习网 - HTML5先行者学习网

  那么, 到底是怎么提升的呢?RAqHTML5中文学习网 - HTML5先行者学习网

  避免不必要的HashtableRAqHTML5中文学习网 - HTML5先行者学习网

  我们知道在PHP中, 类的属性/静态属性/常量, 都是保存在Hashtable中的, 而在以前, 即使一个类没有申明属性/静态属性/常量, Zend引擎也会为他们分配Hashtable.RAqHTML5中文学习网 - HTML5先行者学习网

/RAqHTML5中文学习网 - HTML5先行者学习网

  而在现在, 这个过程被优化了, 只有在有元素的时候才会分配Hashtable.RAqHTML5中文学习网 - HTML5先行者学习网

  这样就避免一些emalloc/efree操作, 减少一些内存占用.RAqHTML5中文学习网 - HTML5先行者学习网

  四元式优化RAqHTML5中文学习网 - HTML5先行者学习网

  在PHP中, 真正执行的是Opcodes, 一个Opcodes包含3个固定的操作数, result, left, right, 在以前, 这三个操作数每一个都包含一个zval, 即使根本用不到的时候, 比如没有右操作数的时候, 还会为右操作数分配一个zval.RAqHTML5中文学习网 - HTML5先行者学习网

  而在现在, 所有的操作数将不再直接包含zval, 而是包含一个literal table的指针, 每一个op array都会包含一个literal table.RAqHTML5中文学习网 - HTML5先行者学习网

  并且znode也做了相应的调整.RAqHTML5中文学习网 - HTML5先行者学习网

  这样一来, 也能减少一些内存占用. 从之前的(32位操作系统)一个opcode占用72byte, 到现在的28byte.RAqHTML5中文学习网 - HTML5先行者学习网

  另外, 对于string, literal table还会保存一份这个string的预先计算的hash值, 避免了在运行时多次计算. 从而提高一部分性能.RAqHTML5中文学习网 - HTML5先行者学习网

  字面字符串RAqHTML5中文学习网 - HTML5先行者学习网

  就好像C语言中, 代码中的字面字符串, 会保存在一个固定段内(数据段), 在整个执行时期, 这些字符串都是常量字符串,不能被修改,不能被free.RAqHTML5中文学习网 - HTML5先行者学习网

  PHP也借鉴了这样的思想, 提出一个Internal string的概念, 在PHP代码中的字面量字符串, 将会一次分配, 并前在整个执行期都不能被修改.RAqHTML5中文学习网 - HTML5先行者学习网

  PHP在copy_zval, free zval等操作的时候, 会对internal string特别处理, 避免不必要的free和复制.RAqHTML5中文学习网 - HTML5先行者学习网

  并且这些字面量字符串的hash值将会被预先计算, 这样一来, 对于字符串比较 ==, 以及hashtable中的hash计算来说, 都可以直接使用这个预先计算的hash值, 从而能提高一部分性能.RAqHTML5中文学习网 - HTML5先行者学习网

  其他RAqHTML5中文学习网 - HTML5先行者学习网

  当然, 还有很多优化点, 比如优化了opcode, 减少了一些不必要的opcodes, 在此就不一一赘述了.RAqHTML5中文学习网 - HTML5先行者学习网

  对比RAqHTML5中文学习网 - HTML5先行者学习网

  下面是PHP开发小组内部测试的一些数据:RAqHTML5中文学习网 - HTML5先行者学习网

 RAqHTML5中文学习网 - HTML5先行者学习网

 RAqHTML5中文学习网 - HTML5先行者学习网

php-trunk patched inprovement
bench.php (sec) 4.31 3.49 19%
micro_bench.php (sec) 19.78 14.63 26%

一些实际的应用:RAqHTML5中文学习网 - HTML5先行者学习网

  php-trunk pathced improvement
blog (req/sec) 59.3 66.2 12%
drupal (req/sec) 1073.9 1084.8 1%
fw (req/sec) 105.3 111.8 6%
hello (req/sec) 5362.5 5351.4 0%
qdig (req/sec) 243.4 253.7 4%
typo3 (req/sec) 355.3 382.6 8%
wordpress (req/sec) 101.8 108.5 7%
xoops (req/sec) 70.3 78.5 12%
scrum (req/sec) 86.5 104.2 20%

从这些数据来看, 性能提升还是很明显的..RAqHTML5中文学习网 - HTML5先行者学习网

RAqHTML5中文学习网 - HTML5先行者学习网
RAqHTML5中文学习网 - HTML5先行者学习网
(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助