PHP 是传统意义上的解释型语言,而不是编译型语言。

因此,在命令行或 Web 服务器调用解释器解释 PHP 代码之前,PHP 代码就是 PHP 代码。PHP 解释器会解释 PHP 脚本,把代码转换为一系列 Zend 操作码(机器码指令,http://php.net/manual/internals2.opcodes.php),再把这些操作码交给 Zend Engine 执行。不过,解释型语言执行的速度比编译型语言慢很多,因为每次执行解释型语言编写的代码时都需要将其转换为机器码,消耗额外的系统资源。Facebook 意识到了这个性能瓶颈,与 2010 年开始开发一个叫 HPHPc 的编译器,把 PHP 代码编译成 C++ 代码。

HPHPc 编译器先把 PHP 代码编译成 C++ 代码,再把 C++ 代码编译成可执行文件,最后把这个可执行文件部署到生产服务器HPHPc 基本上是成功的,它提升了 Facebook 的性能,降低了 Facebook 服务器 的负担。可是,HPHPc 对性能的提升已经到极限了,而且不能完全兼容 PHP 语言,还需要额外话时间编译,因此对开发者来说,反馈回路太长。Facebook 需要一种混合解决方案,既要进一步提升性能,又要让开发速度更快,省去编译代码的时间。

于是,Facebook 开始开发下一步 HPhpc,即 HHVMHHVM 先把 PHP 代码转换成一种字节码中间格式,而且会缓存转换得到字节码,然后使用 JIT 编译器转换并优化缓存的字节码,将其变成 x86_64 机器码。HHVM 的 JIT 编译器提供了很多底层性能优化措施,这些优化措施是把 PHP 代码直接编译成 C++ 代码的 HPHPc 所不具备的。HHVM 才会及时把字节码编译成机器码,这一点和传统的解释型语言很像。2012年10约,HHVM 的性能超过了 HPHPc,而且仍在不断提升。

HHVM 的性能超越 HPHPc 之后不久,HPHPc 就被废弃了。现在,Facebook 的首选 PHP 解释器是 HHVM。

注意:

  • HHVM 的实现可能很负责,可是说到底,HHVM 只不过是我们属性的 PHP 和 PHP-FPM 二进制文件的替代品:
  • 我们在命令行使用 HHVM 二进制文件执行 PHP 脚本,就像 PHP 二进制文件一样。
  • 我们使用 HHVM 二进制文件创建 FastCGI 服务器,就像 PHP-FPM 二进制文件一样。
  • HHVM 原生执行很多常用的 PHP 扩展。

HVVM 适合我使用吗?

HVVM 并不是适合所有人使用。提升性能有更容易的方式,例如,减少 HTTP 请求数和优化数据库查询都是易于实现的方式,能显著提升应用的性能,减少响应时间。如果你还没使用这些优化措施,考虑使用 HHVM 之前先做这些优化吧。Facebook 的 HHVM 是为已经做了这些优化措施之后仍想进一步加速应用的开发者准备的。如果你觉得自己需要 HHVM,可以参考以下资源:

查看 HHVM 兼容的 PHP 扩展

最新文章

  1. curl 小结
  2. P1017 进制转换
  3. android点击状态分析
  4. SQL Server T-SQL高级查询(转)
  5. Machine Learning for hackers读书笔记(十二)模型比较
  6. 【转】Android WebRTC 音视频开发总结(一)
  7. Smartdraw世界上最流行的商业绘图软件
  8. php锁表
  9. redis的安装与配置
  10. Unix/Linux环境C编程入门教程(8) FreeBSD CCPP开发环境搭建
  11. C# 常用接口学习 IEnumerable<T>
  12. Zabbix日志错误总结(持续更新)
  13. 搞java的都土鳖
  14. OC——继承
  15. html页面的音频问题
  16. 你不知道的JavaScript之类型
  17. 简述MyBatis的体系结构
  18. Fisher–Yates shuffle 洗牌算法
  19. opencart3调用三级菜单level 3 sub categories
  20. Hadoop上传文件时报错: could only be replicated to 0 nodes instead of minReplication (=1)....

热门文章

  1. python模块统计
  2. python3 生成二维码并存入word文档
  3. 51nod 2499 不降的数字
  4. springboot 之 使用poi进行数据的导出(一)
  5. 《The One!团队》第八次作业:ALPHA冲刺(二)
  6. Maven安装及其IDEA的配置
  7. 关于Spring的常用注解和接口
  8. 四大网络之Alexnet
  9. Bootstrap是什么意思?
  10. 常用的两种web单点登录SSO的实现原理