我知道PHP主要是一种解释型语言。PHP 解释器(Windows 中的 php.exe 和 Linux 中的 php 文件)是否在每次脚本执行时执行解释,还是仅在我更改源代码时进行解释?换句话说,PHP 解释器是否缓存解释的脚本?
是的,你有一个性能损失,因为PHP每次都会进行解释。但是,如果您安装并配置了APC(替代PHP缓存:http://php.net/apc),它将在内存中保留整个字节代码,并在发生某些更改时重建它。
这实质上是每次请求到达时发生的情况:
- PHP 读取文件
- PHP 将文件编译为它可以处理的语言,即所谓的操作码
- PHP 运行操作码
正如许多人已经指出的那样,将文件编译为操作码有一些开销,并且 PHP 默认没有缓存,因此每次请求到达时它都会执行"编译"过程,即使文件没有更改。
有一些可选模块可以生成操作码缓存以避免这种开销,其中通常最推荐的是 APC,因为它默认在 PHP 6 上提供。
是的。
作为一种解释性语言,您确实要付出性能损失。但是,在编译和使用它的方向上有一些研究。
看看 PHP Accelerator。
大多数PHP加速器通过缓存PHP的编译字节码来工作 避免解析开销的脚本和 在每个请求上编译源代码(其中一些甚至大部分可能 永远不会被执行)。为了进一步提高性能,缓存的代码是 存储在共享内存中并直接从那里执行,最大限度地减少 运行时缓慢的磁盘读取和内存复制量。