【问题标题】:Is type hinting helping the performance of PHP scripts?类型提示是否有助于 PHP 脚本的性能?
【发布时间】:2011-04-04 14:00:11
【问题描述】:

类型提示帮助编译器假定变量的类型,但是,由于 PHP 是一种动态脚本解释语言,我想到了一个问题,即类型提示是否有可能使运行时更快?

【问题讨论】:

    标签: php performance type-hinting


    【解决方案1】:

    PHP 中的所有类型提示都是添加代码来测试参数的类型,如果它不是预期的则失败,因此类型提示永远不会帮助性能。它唯一真正的用途是调试,所以如果你有一个经常被调用的函数,删除生产代码中的类型提示可以加快速度,特别是因为检查对象的类型并不是世界上最快的事情。

    另见when should I use type hinting in PHP?

    【讨论】:

    • 准确,除了“它唯一真正的用途是用于调试”。类型提示为您的代码引入了一定程度的安全性。
    • 第二个链接失效
    【解决方案2】:

    类型提示只会影响性能,因为它需要(对于对象)测试继承层次结构。更糟糕的是,这种检查在 PHP 中代价高昂,因为它的时间与层次结构的深度成正比。

    不过,类型测试,例如为 array 提示所做的测试,开销要小得多。

    此外,它目前不用于任何优化目的。

    然而,它是一个有用的防御性编程功能。

    【讨论】:

      【解决方案3】:

      PHP 是一种动态语言。
      动态语言仅支持运行时检查。
      类型提示是运行时类型检查。
      运行时类型检查不利于性能。
      因此,类型提示不利于性能。

      【讨论】:

      • +1 - 我喜欢这个,它几乎就像一个类型提示(或其他东西)的禅宗:)
      • 运行 Zend Optimizer 或类似的缓存操作码怎么样?
      • ff 9 的类型推断是什么,它如何帮助提高性能? extremetech.com/computing/…
      • @Ming-Tang 是否有任何基准支持您的答案?
      • 它确实会影响性能,但在大多数实际应用程序中这种影响可以忽略不计。好处(更安全的代码)超过了成本。请注意,未来版本的 PHP 可能会附带 JIT compiler,它可能会利用类型提示来编译为更优化、因此更快的代码。
      【解决方案4】:

      我做了一个基准测试

      https://github.com/EFTEC/php-benchmarks#type-hinting(可以查看整个代码,自己测试一下)。

      /**
       * @param DummyClass $arg1
       * @param DummyClass $arg2
       *
       * @return DummyClass
       */
      function php5($arg1,$arg2){
          return new DummyClass();
      }
      function php7(DummyClass $arg1,DummyClass $arg2): DummyClass {
          return new DummyClass();
      }
      
      • php5 0.0006339550018310547 秒
      • php7 0.0007991790771484375 秒

      类型提示比没有类型提示慢 10% 左右。 它不会很慢,除非在代码的重要部分(例如一个巨大的循环)中需要它,或者我们需要原始性能。

      我更喜欢PHPdoc,它的工作原理类似,更完整,不影响性能。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-28
        • 1970-01-01
        • 1970-01-01
        • 2023-04-02
        • 2020-11-10
        相关资源
        最近更新 更多