澳门新浦京娱乐游戏HHVM简介(译)

PHP 是最流行的用于 web 开发的脚本语言之一。PHP 的最新版本,PHP 7
在性能上做了很大的优化。不过,PHP 还有一个竞争对手 HHVM (HipHop Virtual
Machine) — 一个运行 PHP
代码的虚拟工具。二者直接的比较正在升温,那么让我们来看一下他们直接的性能对比吧。

原文链接:

什么是 HHVM?

在2008年,Facebook 启动了一项工作,计划开发一个工具 将 PHP
脚本转换成 C++,这样就可以被编译后在 web
服务器上运行。目的是节省服务器资源,这是一个很重要的目标,因为 Facebook
的用户量正在快速增长。从这个意义上讲,这个项目是成功的,因为它可以让服务器处理之前五到六倍的请求量。

时间回到2010年,Facebook
的服务器需求已经增加了很多,是时候考虑用新的创新来提升更大的效率。基于这个需求,Facebook
开发了 HHVM。

HHVM 使用了 Just-In-Time (JIT) 编译方式将 PHP
代码转换成某种字节码。接下来把字节码再转换成机器码并进行优化,让它尽可能快的运行。

“HHVM(HIpHop Virtual
Machina)把PHP代码转换成高层次的字节码(普遍认为是一种中间语言)。然后这样的字节码在运行时被JIT(just-in-time)编译器动
态地转换成x64机器码。基于这样的考虑,HHVM和包括C#/CLR和Java/JVM在内的其他语言中的虚拟机类似。”

什么是PHP 7?

PHP 7 是 PHP 社区对 HHVM 的回应。PHP 7 发布的预览版本号称比之前的 PHP 5
的性能要提升100%。

你可能会问 PHP 的版本直接从 PHP5 跳到了 PHP7,答案是这样的:PHP6
的开发开始于2005年,但是它的进展过于缓慢又出现了很多的问题,这样 PHP6
在它还没有发布正式版本之前就有了不好的名声。所以PHP社区决定给这个语言的新版本直接命名为
PHP7。

真正的问题不是 PHP5 和 PHP7 之间的比较,因为已经很明显了 PHP7
提供了更快速的运行速度。但是我们想比较的是 PHP7 和
HHVM。很多专家已经分别使用了这两个方法来处理PHP代码,并且揭示了一些有趣的结论。

澳门新浦京娱乐游戏,有点长的历史

比较 PHP7 和 HHVM 的异同:

在回答哪个更好之前,让我们先来看一下他们之间的关键不同点和相似之处。

代码解析:

PHP7 和 HHVM 之间的基本不同之处在于他们解析 PHP 代码的方式。PHP7
使用标准的 PHP
解析器,它是一个可以给所有人使用的免费软件,可以在服务器上直接解析和运行。它生成
HTML 代码,然后发送给客户端,客户端显示出用户期望的内容。

相比之下,HHVM 首先把 PHP 代码转化为 HipHop
字节代码,这个代码再被翻译成机器码然后执行。在这个过程中 HHVM
会对代码进行优化,优化一些影响执行效率的 PHP 代码,目标是提高运行速度。

选择 PHP 7 的理由


  • PHP 7 在某些情况下比 HHVM 更快,包括运行 Drupal 8。
  •  使用 PHP 7 不需要安装设置 HHVM。
  • 尽管很多 PHP 4 的功能在新版本中不再支持,但用 PHP 5 写的代码在转换到
    PHP 7 后将会如预期一样工作。
  • PHP 7 由 PHP 社区开发,这是一群开发稳定可靠 PHP 版本久负盛名的人。

在2008年早期Facebook网站便工作在HipHop(一个PHP执行引擎,现在是HPHP)上。其原始的动机便是把Facebook网站中
大量的PHP代码转换成C++代码,以便节约资源和提升应用性能。其原始版本便是HPHPc(一个把PHP代码转换成C++代码的编译器)。

HHVM vs. PHP 7: 作出你的选择

不要犹豫太久,Kinsta 建议那些在线的网站尽量在 PHP 7 与 HHVM
之间作出选择,早点开始实施解决方案,让你的网站性能得到优化。一个低效的网站也会让你的声誉受损,那将很难挽回。

相对于旧版本的 PHP,HHVM and PHP 7
都更有益。作出决定,尽快将你的网站切换到新的系统。

在接下来的两年时间里Facebook网站继续工作在HipHop上,这时候的HipHop增加了HPHPi(一个HPHP的”开发模式”版本)和
HPHPd(HipHop
debugger)。运行在HipHop平台上的PHP应用程序允许开发者查看和单步执行代码并且可以交互式地调试。

在巅峰时期,运行在HipHop上的PHP代码在性能上是运行在ZEND引擎上的PHP代码的6倍。然而,在HipHop的第一次迭代版上仍然有几个缺点:

1、HPHPc不是完全的支持PHP语言,最明显的便是不支持create_function和eval这两个函数。诚然,我并不认为对于不支持eval这个函数是件坏事。

2、Facebook的开发者必须维护两个不同的引擎(HPHPc和HPHPi),这样的结果便是导致重复的工作和浪费资源。

3、最后,HPHPc需要完全不同的部署过程,这样会妨碍到它被PHP开发者所采纳。

鉴于这些问题,Facebook公司在2010年早期采取了两个关键行动。其一便是把HipHop平台开源了,开源这样的一个项目是一个伟大的方
式,便于构建一个围绕着这个项目的社区并且可以从社区中获取到来自外界的帮助。其二,Facebook公司开始了HipHop在现代版本上的发展,这便是
HHVM(HipHop virtual
Machine)。HHVM提升了HPHPc的健壮性并且修正了许多关键性的问题。

HHVM建立在HPHPc的顶端,其工作方式便是把PHP代码转换成高层次的字节码(一种中间语言)。这样的字节码在运行时被JIT(Just-In-Time)编译器动态地转换成机器码。

如果你像我一样,你可能对字节码、机器码和Just-In-Time编译器还有着模糊的记忆。所以,让我们暂时偏离一下主题快速地回顾下这些概念,然后讲解下他们是如何在HHVM中扮演关键性的角色。

字节码、机器码以及JIT,哦,我的…!

字节码:它是一个人们读不懂的代码,被设计来让解释器或者编译器高效执行的。当HHVM第一次导入我们的项目,它把所有的PHP代码转换成字节码这样的中间形式。产生的字节码和特定类型的计算机结构无关,因此可以很方便地在不同的系统间移植。

机器码:它是一组被设计成可以由CPU直接执行的指令。如果你曾经玩过Assembly(谁没玩过呢?),你一定能很好的理解什么是机器码。对于没有兴趣玩assembly或者类似语言的极少数的你们来说,机器码是由编译器或者解释器产生的并且可以直接被CPU执行的代码。

JIT(Just In Time)编译器:Just in
time编译技术是用来提升软件性能的一项技术。它的实现原理便是在执行期间编译存储在内存中字节码,JIT编译器导入这些字节码并且编译成所需要的部分。

通过应用这些技术所获得的性能和速度便能给HipHop及随后的HHVM提供核心优势。保持一个PHP代码库,同时实现性能上堪比编译过的应用程序。

目前的HHVM基本上支持整个的PHP5.4版本,然而HHVM仍然有妨碍到一些应用程序执行的许多bugs。基于这样的原因,Facebook公
司设置的目标便是能让开源的顶尖的前20个PHP应用程序运行在HHVM上。第一个运行在其上的最流行的应用便是Wordpress。

接下来

现在我们对于HHVM究竟是做什么的及其优势有了很好的了解,并且对于运行在其上的应用程序我们可以很方便的开始测试了。在接下来的文章里,我会介
绍到如何在虚拟机上安装HHVM,以及在你的应用程序上运行基准测试,最后(双手合十),介绍如何在HHVM上运行Magento。

 

更多文章请关注我的个人博客:

发表评论

电子邮件地址不会被公开。 必填项已用*标注