【问题标题】:Is there a point to minifying PHP?缩小PHP有什么意义吗?
【发布时间】:2011-05-04 01:20:00
【问题描述】:

我知道你可以缩小 PHP,但我想知道是否有任何意义。 PHP 是一种解释型语言,因此运行起来会比编译型语言慢一点。我的问题是:如果我要缩小我的 PHP,客户会看到页面加载速度的明显提高吗?

另外,有没有办法编译 PHP 或类似的东西?

【问题讨论】:

  • 一个明显的问题是混淆,使您的代码不那么可移植,这可能是一个有效的目标。
  • 另一点是节省服务器空间(如果这很重要的话),

标签: php minify


【解决方案1】:

PHP 被编译成字节码,然后在类似于 VM 的东西上进行解释。许多其他脚本语言遵循相同的一般过程,包括 Perl 和 Ruby。它并不是真正的传统解释语言,比如 BASIC。

如果您尝试“缩小”源,则不会有效提高速度。通过使用bytecode cache like APC,您将获得大幅提升。

Facebook 引入了一个名为 HipHop 的编译器,可将 PHP 源代码转换为 C++ 代码。 Rasmus Lerdorf,一位 PHP 大佬做了一个presentation for Digg earlier this year,涵盖了 HipHop 提供的性能改进。简而言之,它并不比优化代码和使用字节码缓存快多少。 HipHop 对大多数用户来说太过分了。

Facebook 最近还推出了HHVM,这是一款基于他们制作 HipHop 的新虚拟机。它仍然很新,尚不清楚它是否会为公众带来重大的性能提升。

为了确保明确说明,请完整阅读that presentation。它指出了使用xdebugxhprof 等工具(同样来自 Facebook)对代码进行基准测试和分析代码以及识别瓶颈的多种方法。


2021 年更新

几个版本之前,HHVM 与原生 PHP 不同。 PHP 7 和 8 带来了一大堆惊人的性能改进,几乎缩小了差距。您现在不再需要做奇怪的事情来获得更好的 PHP 性能!

出于性能原因,缩小 PHP 源代码仍然没有用。

【讨论】:

  • 请注意,如果没有外部(!)字节码缓存,整个字节码/虚拟机实际上不会给您带来任何好处。我不明白为什么 PHP 在默认情况下会不断丢弃字节码...
  • 我想这是一个共享主机问题。从旧的基于 6.0 的主干开始,APC 默认包含在 PHP 中。我不确定我们是否会在默认情况下在 5.4 中看到它,或者新的主干最终会被调用...
  • 非常感谢您提供的信息。不幸的是,我对我的服务器没有深入的控制(它是租用的)。网络主机是否可能使用 APC?
  • 大多数共享主机提供商不使用 APC。您应该查看虚拟专用服务器,以便您可以控制配置。 VPS 通常比普通的共享主机贵,但比真正的专用服务器便宜得多。流行的 VPS 提供商包括 Slicehost 和 Linode。不要忘记您应该首先对代码进行基准测试和分析
  • 让代码更紧凑有什么好处吗?说 AJAX 向文件发送请求并获得响应所需的时间会更少吗?
【解决方案2】:

放弃缩小 PHP 的想法,转而使用操作码缓存,例如 PHP AcceleratorAPC

或其他类似memcached

【讨论】:

  • 不清楚您的意思不是操作码缓存。
  • memcached 是一种完美的提高性能的方法......在执行基准测试和分析并确定缓存本身将是最好的性能增益之后。
  • 如果您使用的是 PHP 5.5,则无需安装任何操作码缓存,因为它现在默认附带。
  • 我实际上查找了 cromulent :(。我同意其他人的观点,在这种情况下使用 memcached 会产生误导。作为编译过程的一部分缓存数据与生成的操作代码不同。跨度>
【解决方案3】:

是的,有一点(非技术性的)。

您的主机可以在他的服务器上监视您的代码。如果你把它缩小和丑化,间谍更难窃取你的想法。

缩小和丑化 php 的一个原因可能是间谍保护。我认为丑陋的代码应该是自动部署的一步。

【讨论】:

    【解决方案4】:

    通过一些重写(更短的变量名),您可以节省几个字节的内存,但这也很少有意义。

    但是,我确实以允许将包含脚本连接在一起的方式设计了一些应用程序。使用php -w 可以显着压缩它,为脚本启动增加一点速度增益。然而,在启用操作码的服务器上,这只会保存一些文件 mtime 检查。

    【讨论】:

      【解决方案5】:

      这与其说是一个答案,不如说是一个广告。我一直在开发一个 PHP 扩展,它可以将 Zend 操作码转换为在具有静态类型的 VM 上运行。它不会加速任意 PHP 代码。它确实允许您编写比常规 PHP 允许的运行速度更快的代码。这里的关键是静态类型。在现代 CPU 上,动态语言会左右吃掉分支错误预测惩罚。 PHP 数组是哈希表的事实也带来了高成本:大量的分支错误预测、缓存的低效使用、糟糕的内存预取以及任何 SIMD 优化。尤其是分支错误预测和缓存未命中是当今处理器的致命弱点。我的小虚拟机通过使用静态类型和 C 数组而不是哈希表来回避这些问题。结果最终运行速度快了大约十倍。这是使用字节码解释。该扩展可以选择通过 gcc 编译一个函数。在这种情况下,您的速度会提高两到五倍。

      这里是任何感兴趣的人的链接:

      https://github.com/chung-leong/qb/wiki

      同样,该扩展不是通用的 PHP 加速器。你必须为它编写特定的代码。

      【讨论】:

        【解决方案6】:

        有 PHP 编译器...请参阅 this previous question 获取列表;但是(除非您是 Facebook 的规模或将您的应用程序定位为在客户端运行)它们通常比它们的价值要麻烦得多

        简单的操作码缓存将为您带来更多好处。或者分析您的代码以识别瓶颈,然后对其进行优化。

        【讨论】:

          【解决方案7】:

          您不需要缩小 PHP。 为了获得更好的性能,安装一个 Opcode 缓存;但理想的解决方案是将您的 PHP 升级到 5.5 或更高版本,因为较新的版本默认有一个称为 Zend 优化器的操作码缓存,其性能优于其他http://massivescale.blogspot.com/2013/06/php-55-zend-optimiser-opcache-vs-xcache.html

          【讨论】:

            【解决方案8】:

            “要点”是使文件更小,因为较小的文件比较大的文件加载得更快。此外,删除空格会使解析速度稍微快一些,因为不需要解析这些字符。

            会很明显吗?几乎从不,除非文件很大并且大小差异很大。

            【讨论】:

              猜你喜欢
              • 2011-03-15
              • 2015-02-10
              • 1970-01-01
              • 2016-09-16
              • 2010-09-23
              • 2011-02-07
              • 2011-07-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多