html5中文学习网

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  原生PHP, 没有Opcode Cache:NLzHTML5中文学习网 - HTML5先行者学习网

  php-trunkpatchedinprovementNLzHTML5中文学习网 - HTML5先行者学习网

  bench.php (sec)4.313.4919%NLzHTML5中文学习网 - HTML5先行者学习网

  micro_bench.php (sec)19.7814.6326%NLzHTML5中文学习网 - HTML5先行者学习网

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

  php-trunkpathcedimprovementNLzHTML5中文学习网 - HTML5先行者学习网

  blog (req/sec)59.366.212%NLzHTML5中文学习网 - HTML5先行者学习网

  drupal (req/sec)1073.91084.81%NLzHTML5中文学习网 - HTML5先行者学习网

  fw (req/sec)105.3111.86%NLzHTML5中文学习网 - HTML5先行者学习网

  hello (req/sec)5362.55351.40%NLzHTML5中文学习网 - HTML5先行者学习网

  qdig (req/sec)243.4253.74%NLzHTML5中文学习网 - HTML5先行者学习网

  typo3 (req/sec)355.3382.68%NLzHTML5中文学习网 - HTML5先行者学习网

  wordpress (req/sec)101.8108.57%NLzHTML5中文学习网 - HTML5先行者学习网

  xoops (req/sec)70.378.512%NLzHTML5中文学习网 - HTML5先行者学习网

  scrum (req/sec)86.5104.220%NLzHTML5中文学习网 - HTML5先行者学习网

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

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