PHP中的APC模块在CLI模式下运行时是否支持代码优化?例如,当我运行一个文件时 php -f <file> 文件在执行前是否会被APC优化?假设 APC 设置为在配置文件中加载。另外,脚本是否包含在 require_once 也可以优化吗?

我知道优化在 fastcgi 模式下运行时效果很好,但我想知道它是否也适用于 CLI。

apc_* 函数可以工作,但我想知道代码优化,这是我在这里追求的主要内容。

快乐的一天,马蒂奇

有帮助吗?

解决方案

的文档 apc.enable_cli, ,它控制是否应在 CLI 模式下激活 APC,说 (引用) :

主要用于测试和调试。设置此启用APC的CLI版本的PHP。正常情况下 情况,这并不理想 创建、填充和销毁 APC 缓存在每个 CLI 请求上,但 各种测试场景都很有用 能够为 CLI 启用 APC PHP版本很容易。

也许 APC 会将操作码存储在内存中,但是随着 PHP 可执行文件在脚本结束时终止,该内存将会丢失:它不会在脚本执行之间持续存在。

所以APC中的opcode-cache在CLI模式下是没有用的:它不会优化任何内容,因为每次启动 PHP 的可执行文件时,PHP 仍然必须将源代码重新编译为操作码。


实际上,APC 并没有“优化”:执行 PHP 脚本的标准方法如下:

  • 读取文件,并将其编译成操作码
  • 执行操作码

APC 的作用是将操作码存储在内存中,因此 PHP 脚本的执行变为:

  • 从内存中读取操作码 (比编译源代码快得多)
  • 执行操作码

但这意味着您必须在内存中有某个位置来存储操作码。当 PHP 作为 Apache 模块运行时,Apache 负责该内存段的持久性......当 PHP 从 CLI 运行时,没有任何东西可以保存内存段,因此它在 PHP 执行结束时被销毁。
(我不知道它到底是如何工作的,但至少在原理上是这样的,即使我的话不是很“技术”^^)


或者,“优化”指的是操作码缓存之外的其他东西,例如配置指令 apc.优化 ?如果是的话,这个在 APC 3.0.13 中已经被删除了

其他提示

好了,有一个很好的理由,APC在CLI方式: 单元测试:我想用尽量靠近后生产环境尽可能的环境做我的单元测试。 Zend框架具有一个内部高速缓存解决方案,其可以使用APC的可变Cache作为存储后端 - 我想使用此

如果您的 CLI 代码可以根据环境生成任何配置,则 CLI 代码将认为 APC 未启用。例如,当通过CLI生成Symfony的DI容器时,它会告诉Doctrine不要使用APC(细节).

另外,我还没有测试过它,但 APC 有可能会提高脚本执行后包含的文件的速度。 pcntl_fork(). 。编辑:我问过关于 装甲运兵车& pcntl_fork() 这里.

为了完整起见,要在 CLI 上启用 APC(在 Ubuntu 中):

echo 'apc.enable_cli = 1' > /etc/php5/cli/conf.d/enable-apc-cli.ini

有另外一个原因在CLI模式下使用它:一些脚本能够使用它作为一个缓存

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top