php5.4 Zend引擎的优化

 

  在PHP 5.4的更新list上, 有一句: 提升了Zend引擎的性能, 减少了内存占用.

  那么, 到底是怎么提升的呢?

  避免不必要的Hashtable

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

  而在现在, 这个过程被优化了, 只有在有元素的时候才会分配Hashtable.

  这样就避免一些emalloc/efree操作, 减少一些内存占用.

  四元式优化

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

  而在现在, 所有的操作数将不再直接包含zval, 而是包含一个literal table的指针, 每一个op array都会包含一个literal table.

  并且znode也做了相应的调整.

  这样一来, 也能减少一些内存占用. 从之前的(32位操作系统)一个opcode占用72byte, 到现在的28byte.

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

  字面字符串

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

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

  PHP在copy_zval, free zval等操作的时候, 会对internal string特别处理, 避免不必要的free和复制.

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

  其他

  当然, 还有很多优化点, 比如优化了opcode, 减少了一些不必要的opcodes, 在此就不一一赘述了.

  对比

  下面是PHP开发小组内部测试的一些数据:

  原生PHP, 没有Opcode Cache:

  php-trunkpatchedinprovement

  bench.php (sec)4.313.4919%

  micro_bench.php (sec)19.7814.6326%

  一些实际的应用:

  php-trunkpathcedimprovement

  blog (req/sec)59.366.212%

  drupal (req/sec)1073.91084.81%

  fw (req/sec)105.3111.86%

  hello (req/sec)5362.55351.40%

  qdig (req/sec)243.4253.74%

  typo3 (req/sec)355.3382.68%

  wordpress (req/sec)101.8108.57%

  xoops (req/sec)70.378.512%

  scrum (req/sec)86.5104.220%

  从这些数据来看, 性能提升还是很明显的..

时间: 2024-11-08 22:11:55

php5.4 Zend引擎的优化的相关文章

Zend引擎的优化

在PHP 5.4的更新list上, 有一句: 提升了Zend引擎的性能, 减少了内存占用. 那么, 到底是怎么提升的呢? 避免不必要的Hashtable 我们知道在PHP中, 类的属性/静态属性/常量, 都是保存在Hashtable中的, 而在以前, 即使一个类没有申明属性/静态属性/常量, Zend引擎也会为他们分配Hashtable. 而在现在, 这个过程被优化了, 只有在有元素的时候才会分配Hashtable. 这样就避免一些emalloc/efree操作, 减少一些内存占用. 四元式优化

第十五节--Zend引擎的发展 -- Classes and Objects in PHP5 [15]

object|php5 /*+-------------------------------------------------------------------------------+| = 本文为Haohappy读<<Core PHP Programming>> | = 中Classes and Objects一章的笔记 | = 翻译为主+个人心得 | = 为避免可能发生的不必要的麻烦请勿转载,谢谢 | = 欢迎批评指正,希望和所有PHP爱好者共同进步! +--------

PHP5.0对象模型探索之Zend引擎的发展

在这个系列文章的最后一部分,作者讨论了Zend引擎带来的对象模型,特别提到它与PHP的前几个版本中的模型有什么不同. 当1997年夏天,发布的PHP3中没有计划要使PHP具备面向对象的能力. 当时没有任何与类和对象有关的想法. PHP3是一个纯粹面向过程的语言. 但是,在1997.8.27的晚上PHP3 alpha版中增加了对类的支持. 增加一个新特性给PHP,当时仅需要极少的讨论,因为当时探索PHP的人太少. 于是从1997年八月起, PHP迈出了走向面向对象编程语言的第一步. 确实,这只是第

IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年_php实例

便于大家转载和离线阅读,本教程的HTML源码.UBB源码.PDF版本.Flash版本提供下载.下载地址:http://code.google.com/p/wpmi/downloads/list 操作系统:Windows.Server.2003.R2,Enterprise.Edition,SP2,x86,CHS,VOL,MSDN本次配置PHP的服务器环境:Windows2003+ IIS6+PHP5+MySQL3+Zend+phpMyAdmin整个配置过程需要是使用拥有管理员权限的系统帐号登录Wi

Windows 2003 IIS6+PHP5+MySQL5+Zend环境搭建图文教程-最新新手教程

中介交易 SEO诊断 淘宝客 云主机 技术大厅 Windows 2003 IIS6+PHP5+MySQL5+Zend环境搭建图文教程 最新新手教程 一.系统约定环境软件下载后存放位置:D:\ServerSoft 环境软件安装位置:D:\ServerRoot PHP安装位置:D:\ServerRoot\PHP MySQL安装位置:D:\ServerRoot\MySQL Zend Optimizer安装位置:D:\ServerRoot\Zend IIS网站站点根目录:D:\wwwroot MySQL

第十五节--Zend引擎的发展_php基础

/* +-------------------------------------------------------------------------------+ | = 本文为Haohappy读<<Core PHP Programming>>  | = 中Classes and Objects一章的笔记  | = 翻译为主+个人心得  | = 为避免可能发生的不必要的麻烦请勿转载,谢谢  | = 欢迎批评指正,希望和所有PHP爱好者共同进步!  | = PHP5研究中心: 

Zend引擎的发展 [15]_php基础

本章的最后一节,Zeev讨论了Zend引擎带来的对象模型,特别提到它与PHP的前几个版本中的模型有什么不同.当1997年夏天,我们开发出PHP3, 我们没有计划要使PHP具备面向对象的能力. 当时没有任何与类和对象有关的想法. PHP3是一个纯粹面向过程的语言. 但是,在1997.8.27的晚上PHP3 alpha版中增加了对类的支持. 增加一个新特性给PHP,当时仅需要极少的讨论,因为当时探索PHP的人太少. 于是从1997年八月起, PHP迈出了走向面向对象编程语言的第一步. 确实,这只是第

修改Zend引擎实现PHP源码加密的原理及实践

加密 PHP文件的源码都是明文,这对于某些商业用途来说,并不适合. 因此考虑使用加密的手段保护源码. 实在不耐烦等待zend出编译器,而且编译和加密本质上不是一回事儿.自己动手.开始修改. 一.基本原理 考虑截获PHP读取源文件的接口.一开始,我考虑从Apache和PHP之间的接口处 处理,参见apache的src/modules/php4/mod_php4.c (这个是PHP用static方式编译进apache,make install 后的文件),在send_php()函数中截获文件指针,采

optimizer-急求!有人在iis7配置过php5.6+Zend Optimizer ?

问题描述 急求!有人在iis7配置过php5.6+Zend Optimizer ? 有人在iis7那配置php5.6+zend optimizer吗? 解决方案 IIS7里配置php弄过,可以参考 http://www.jb51.net/article/22372.htm 解决方案二: 楼主 下面的文档说的很清楚啊http://www.baidu.com/link?url=EtJHZlNgxk6U_Qrv9W0xX5fmg9vU9tLLBg_GbUTjQGV9dHyPpELt4nOuLySsUt