1

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

4

3 回答 3

3

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

于 2012-06-09T17:56:40.187 回答
2

这实质上是每次请求到达时都会发生的情况:

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

正如许多人已经指出的那样,将文件编译成操作码有一些开销,并且 PHP 默认没有缓存,因此即使文件没有更改,每次请求到达时它都会执行“编译”过程。

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

于 2012-06-09T18:05:33.633 回答
1

是的。

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

看看PHP 加速器

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

于 2012-06-09T17:59:49.753 回答