• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

【问底】缓汉彬:PHP7和HHVM的性能之争

php 搞代码 4年前 (2022-01-24) 17次浏览 已收录 0个评论

【问底】徐汉彬:PHP7和HHVM的性能之争

<iframe allowtransparency=”true” frameborder=”0″ scrolling=”no” src=”http://hits.sinajs.cn/A1/weiboshare.html?url=http%3A%2F%2Fwww.gaodaima.com%2Farticle%2F2014-12-19%2F2823234&type=3&count=&appkey=&title=%E8%BF%91%E6%97%A5%EF%BC%8CPHP7%E5%92%8CHHVM%E7%9A%84%E6%80%A7%E8%83%BD%E4%B9%8B%E4%BA%89%E6%88%90%E4%B8%BA%E4%BA%86%E4%B8%80%E4%B8%AA%E8%AE%A8%E8%AE%BA%E7%83%AD%E7%82%B9%EF%BC%8C%E4%BD%86%E6%AF%AB%E6%97%A0%E7%96%91%E9%97%AE%EF%BC%8C%E5%AE%83%E4%BB%AC%E9%83%BD%E5%9C%A8%E6%8F%90%E5%8D%87PHP%E6%89%A7%E8%A1%8C%E6%80%A7%E8%83%BD%E6%96%B9%E9%9D%A2%E5%8F%96%E5%BE%97%E4%BA%86%E7%AA%81%E7%A0%B4%E6%80%A7%E7%9A%84%E8%BF%9B%E5%B1%95%E3%80%82%E6%9C%AC%E6%9C%9F%E3%80%8A%E9%97%AE%E5%BA%95%E3%80%8B%EF%BC%8C%E5%BE%90%E6%B1%89%E5%BD%AC%E5%B0%86%E4%B8%BA%E5%A4%A7%E5%AE%B6%E7%A7%91%E6%99%AE%E5%92%8C%E4%BB%8B%E7%BB%8D%E5%AE%83%E4%BB%AC%E7%9A%84%E6%80%A7%E8%83%BD%E4%B9%8B%E4%BA%89%E3%80%82&pic=&ralateUid=&language=zh_cn&rnd=1419687713138&#8243; width=”22″ height=”16″></iframe>摘要:近日,PHP7和HHVM的性能之争成为了一个讨论热点,但毫无疑问,它们都在提升PHP执行性能方面取得了突破性的进展。本期《问底》,徐汉彬将为大家科普和介绍它们的性能之争。

  1. 最快的是PHP语言结构(isset、echo等),PHP语言的一部分(它们根本不是函数)。
  2. 然后比较快的就是PHP的原生和拓展函数。PHP拓展,基于Zend API之上,用C实现的功能,执行效率和C++/Java是属于同一个数量级的。
  3. 真正慢的就是,我们通过PHP自己写的代码和函数。例如,假如我们使用的比较重的纯PHP实现的框架,因为框架本身的模块很多,所以,会明显拖累语言层面的执行效率,同时占据更多的内存。(国内的Yaf框架,以拓展的方式实现,因此执行效率远快于纯PHP写的框架)
  1. 拓展开发耗时比较长,需求变更的时候修改也复杂,写得不好可能会影响Web服务稳定性。(例如,在Apache的worker模式下,多线程场景下挂掉,会影响同一个进程下的其他正常子线程。如果是多线程的Web模式,编写拓展还需要支持线程安全)
  2. 拓展在PHP版本升级的时候,可能需要做额外的兼容工作。
  3. 人员变动后的维护和接手成本也比较高。
  1. 服务部署比较复杂,有一定维护成本。
  2. 对PHP原生代码并非完整支持,PHP拓展也需要做适当的兼容。
  3. HHVM是个新虚拟机,长时间运行有内存泄露。(据说,一线互联网公司在应用这个技术时,是通过自己打Patch的方式解决内存泄露)
  1. PHPNG(PHP next generation,下一代PHP),对Zend执行引擎本身的各种性能优化,其中JIT,可能会实现在Zend Opcache组件中。
  2. AST(Abstract Syntax Tree,抽象语法树),目的是在PHP编译过程引入一个中间件,替代直接从解释器吐出opcode的方式。让解释器和编译器解耦,可以减少大量Hack代码,同时,让实现更容易理解和维护。
  3. uniform variable syntax(统一变量语法),引入一种内部一致和完整的变量语法,让PHP的解析器更完整地支持各种类型的变量。部分变量的用法需要调整,例如变量的变量$$a等。
  4. 支持integer semantics(整型语义),例如NaN、Infinity、<>,修正list()的一致性等等。
  • 综合测试速度提升35%。
  • 在实际应用场景有20%-70%的速度提升(WordPress首页有60%(本文来)源gaodaimacom搞#^代%!码&网(
    搞gaodaima代码

    的提升)

  • 更少的内存消耗
  • 支持大部分常用的SAPIs
  • 支持大部分的PHP拓展绑定到资源分配(69个完成,6个待迁移)
  • 提供堪比HHVM3.3.0的执行速度
  1. 在“严谨”的语言中,通常是预先定义好一个变量的类型,自始至终,变量的类型是固定的,使用范围也是固定。而PHP的变量,通常我们只能看见它名字,类型大部分都不可以预先定义,并且还可以随意改变。(内存分配不好管理)
  2. 为了兼容弱类型特性,PHP需要实现大量兼容代码,包括类型判断、类型转换、存储方式等,增加了语言内部的复杂度。(执行效率低下)
  3. 变量的类型是不可控的,在执行过程中存在大量的“隐性类型转换”,容易产生不可预知的结果。(这里的确需要强调,PHP的类型转换是个必须掌握的点,各种类型的互相转换的可能会产生很多问题,尤其是初学PHP的同学哈)

责编/仲浩

欢迎订阅“CSDN大数据”微信号获得更多大数据生态圈信息。

[email protected]资讯。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:【问底】缓汉彬:PHP7和HHVM的性能之争
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址