在 PHP CLI 模式下运行时,APC 模块是否支持代码优化?例如,当我使用 php -f <file>
命令运行一个文件时,该文件是否会在执行之前通过 APC 进行优化?假设在配置文件中设置了 APC 加载。另外,使用 require_once
包含的脚本是否也会被优化?
我知道在 fastcgi 模式下运行时优化效果很好,但我想知道它是否也适用于 CLI 模式。
apc_* 函数可以正常工作,但我关心的主要是代码优化。
愉快的一天, Matic
在 PHP CLI 模式下运行时,APC 模块是否支持代码优化?例如,当我使用 php -f <file>
命令运行一个文件时,该文件是否会在执行之前通过 APC 进行优化?假设在配置文件中设置了 APC 加载。另外,使用 require_once
包含的脚本是否也会被优化?
我知道在 fastcgi 模式下运行时优化效果很好,但我想知道它是否也适用于 CLI 模式。
apc_* 函数可以正常工作,但我关心的主要是代码优化。
愉快的一天, Matic
apc.enable_cli
的文档控制 APC 是否在 CLI 模式下激活,其中写到:
主要用于测试和调试。 设置此项将启用 PHP CLI 版本中的 APC。 在正常情况下,在每个 CLI 请求中创建、填充和销毁 APC 缓存并不理想, 但对于各种测试场景,能够轻松地为 PHP CLI 版本启用 APC 是有用的。
或许 APC 会把 opcode 存储在内存中,但随着 PHP 执行结束,这段内存也将丢失:它不会在脚本执行之间保留。
因此,在 CLI 模式下使用 opcode 缓存是无用的:它不会优化任何东西,因为每次启动 PHP 可执行文件时,PHP 仍然需要重新编译源代码为 opcode。
实际上,APC 并没有 "优化" :执行 PHP 脚本的标准方式如下:
APC 所做的就是将 opcode 存储在内存中,因此执行 PHP 脚本变成了:
但这意味着你必须有一些地方来存储这些 opcode。当 PHP 作为 Apache 模块运行时,Apache 负责该内存段的持久化...当 PHP 从 CLI 运行时,没有任何东西可以保留内存段,因此在 PHP 执行结束时它被销毁。
(我不知道它的确切工作原理,但至少原理上是这样的,即使我的话不太 "技术性" ^^ )
或者,如果您所说的“优化”并非指操作码缓存,而是指配置指令apc.optimization的话,那么这个指令在APC 3.0.13中已经被删除了。
在CLI模式下使用APC是有好处的: 单元测试:我想使用尽可能接近后续生产环境的环境进行单元测试。Zend Framework具有内部缓存解决方案,该解决方案可以使用APC的变量缓存作为存储后端 - 我想使用这个。