【发布时间】:2014-12-04 22:27:05
【问题描述】:
我开始阅读有关 HHVM 和 Zephir 的信息。一开始我很兴奋,由于这项技术,性能得到了提升。 但后来我开始问自己一个问题。如果它真的像这项技术的所有者所说的那样为您提供这样的性能。
现在我要说,我认为它看起来如何。如果我错了,请纠正我。
PHP 脚本实时进程: 运行脚本 -> 编译 -> 执行脚本
这里明显的问题是编译。每次启动脚本时,我们都需要对其进行编译。
假设我安装了 Apache2,并且正在运行名为“test.php”的 php 脚本:
APC:
APC 打开和 APC 选项以检查更改关闭。
它应该是这样的:
运行脚本 -> 执行脚本
因为它已经编译到我们的内存中并且可以使用了。
HHVM:
嘻哈虚拟机的行为类似于 APC。这里的区别在于,虚拟机,对于标准 PHP 和 APC 来说是 Zend Engine。
所以它是这样的:
运行脚本 -> 执行脚本
因为它已经编译(在内存中?)并且可以使用了。
Zephir:
我将我的脚本编译为 C 扩展。所以我想它不需要编译? (我不确定这一点)。所以我的 php 脚本中的函数现在是原生的。
因此,如果我编写另一个名为“test2.php”的脚本,它将运行我在“test.php”中的本机函数(是的,它应该具有 .zep 格式,但现在没关系)。
现在使用 APC 我避免了编译过程。
运行脚本 -> 执行脚本
现在我很困惑。就你所见,现在一切都一样了。我没有看到使用 Zephir 和 HHVM 超过标准 APC 的任何优势。 所以我想听听,我是对的还是完全错的?
【问题讨论】:
-
停止考虑 APC 来进行操作码缓存,想想 OpCache,它也进行了优化
-
存储在 opcache 中的 PHP 代码仍然不能作为本地机器码执行,它是字节码,仍然需要 PHP 虚拟机执行;而 Zephir 和 HHVM 创建将直接执行的实际机器代码
-
Zephir 绝对值得编写小型库例程,这些例程作为大型 PHP 应用程序的一部分经常被调用,特别是当原生 PHP 任务是进程密集型时......一个称为 10,000 的小例程脚本执行期间的时间,但在 PHP 中执行需要 100ns,转换为 Zephir 库可能需要 60ns 来运行每次迭代......这将节省 10,000 * (100-60) = 的脚本执行每次执行该脚本需要 400,000ns 或 400ms...
-
您遗漏的另一点是 HHVM 不仅仅是 PHP 的插件替代品,它也是一个基础设施组件,也替代了您的网络服务器......所以您的任何配置您正在使用的 Apache(或任何网络服务器)需要针对 HHVM 重新配置...这是额外的学习,并且(除非您管理自己的服务器(当您需要管理安装和配置时)您'你将不得不找到一个可以让你运行它的托管服务
-
就个人而言,我玩过 HHVM,但没有在其上运行任何严肃的/生产质量的东西......我一直在使用 Zephir 将我的一些库转换为扩展,并看到了一些真实的结果是性能上的好处,并且(在使用本机 C 数据类型而不是 PHP zvals 方面进行了额外的工作)一些内存改进......我的 Zephir Tries 类在 42 秒内加载字典,而原生 PHP 版本为 89 秒相同的代码 - github.com/MarkBaker/Tries 尽管搜索字典大致相同(尽管 Trie 已针对该搜索进行了优化)
标签: php apache compilation phalcon hhvm