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