【问题标题】:Phalcon Zephir vs APC vs HHVM PerformancePhalcon Zephir vs APC vs HHVM 性能
【发布时间】: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


【解决方案1】:

Zephir 无法处理面向目标的高级代码。您的应用程序的速度会比干净的 PHP 方式差。

在这里您可以找到干净的 PHP 与 Zephir 的比较。 https://github.com/dgafka/zephir-BookStore

因此,如果您想将应用程序重写为 zephir,请三思而后行。

https://github.com/phalcon/zephir/issues/694#issuecomment-67987616

【讨论】:

    【解决方案2】:

    Zephir 非常快(当然,因为它被编译为 C 扩展)! https://www.simonholywell.com/static/files/2014-02-28/index.html

    Hack 也非常快,比 Zephir 慢,但另一方面,它比 Zephir 更成熟/活跃/有文档记录。

    使用 Zephir/Hack 的主要优点是您可以获得静态类型作为奖励。将这种安全性添加到 PHP 代码中是一种真正的解脱。

    动态类型有其局限性,允许出现太多丑陋/危险的事情。

    【讨论】:

      【解决方案3】:

      使用 Zephir 进行抽象功能编码。

      例如,执行特定于您的项目的字符串格式的函数库。所有高级 PHP OOP(业务逻辑)等都应该在 PHP 中完成。

      就这么简单!
      使用与项目相匹配的工具。

      【讨论】:

        猜你喜欢
        • 2010-10-30
        • 2013-05-15
        • 1970-01-01
        • 2013-08-25
        • 2021-02-27
        • 2013-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多