我是否因为PHP为每个请求重新编译源代码而支付性能损失?

时间:2012-06-09 17:53:53

标签: php apc eaccelerator opcode-cache

我知道PHP主要是一种解释语言。 PHP解释器(Windows中的php.exe和Linux中的php文件)是在每次执行脚本时执行解释还是仅在我更改源时执行解释?换句话说,PHP解释器是否缓存了解释脚本?

3 个答案:

答案 0 :(得分:3)

是的,你有性能损失,因为PHP每次都会进行解释。但是,如果您安装并配置了APC(备用PHP缓存:http://php.net/apc),它将在内存中保留整个字节代码,并在发生某些更改时重新构建它。

答案 1 :(得分:2)

这实际上是每次请求到达时会发生的事情:

  • PHP读取文件
  • PHP将文件编译为可以处理的语言,即所谓的操作码
  • PHP运行操作码

正如许多人已经指出的那样,将文件编译成操作码会有一些开销,而且默认情况下PHP没有缓存,因此它会执行"编译"每当请求到达时进程即使文件没有改变。

有一些可选的模块可以生成操作码缓存以避免这种开销,其中最常推荐的是APC,因为默认情况下它将在PHP 6上发布。

答案 2 :(得分:1)

是。

作为一种解释性语言,您确实会付出性能损失。 然而,在编制和使用它的方向上有一些研究。

看看PHP Accelerator

  

大多数PHP加速器通过缓存PHP的编译字节码来工作   脚本,以避免解析和开销   在每个请求上编译源代码(一些甚至大多数可能   永远不会被执行)。为了进一步提高性能,缓存的代码是   存储在共享内存中并直接从那里执行,最小化   运行时缓慢的磁盘读取和内存复制量。