20

CLI モードで実行している場合、PHP の APC モジュールはコードの最適化をサポートしていますか? たとえば、ファイルを実行する場合、ファイルはphp -f <file>実行前に APC で最適化されますか? APC が構成ファイルにロードするように設定されていると仮定します。また、付属のスクリプトrequire_onceも最適化されますか?

fastcgi モードで実行すると最適化が正常に機能することはわかっていますが、CLI でも機能するかどうか疑問に思っています。

apc_* 関数は機能しますが、コードの最適化について疑問に思っています。これは、私がここで求めている主なものです。

ハッピーデイ、マティッチ

4

4 に答える 4

29

apc.enable_cliAPC を CLI モードでアクティブにするかどうかを制御するのドキュメントには、 (引用)と記載されています。

主にテストとデバッグ用です。これを設定すると、PHP の CLI バージョンで APC が有効になります。通常の状況では、CLI リクエストごとに APC キャッシュを作成、設定、および破棄することは理想的ではありませんが、さまざまなテスト シナリオでは、PHP の CLI バージョンで APC を簡単に有効にできると便利です。

おそらく、APC はオペコードをメモリに保存しますが、PHP 実行可能ファイルがスクリプトの最後で終了すると、そのメモリは失われます。スクリプトの実行間で保持されません。

したがって、APC の opcode-cache は CLI モードでは役に立ちません。PHP の実行可能ファイルが起動されるたびに、PHP がソースをオペコードに再コンパイルする必要があるため、何も最適化しません。


実際、APC は「最適化」しません。PHP スクリプトを実行する標準的な方法は次のようになります。

  • ファイルを読み取り、オペコードにコンパイルします
  • オペコードを実行する

APC が行うことは、オペコードをメモリに格納することなので、PHP スクリプトの実行は次のようになります。

  • オペコードをメモリから読み取る(ソースコードをコンパイルするよりもはるかに高速)
  • オペコードを実行する

ただし、これは、オペコードを格納するためのメモリ内の場所が必要であることを意味します。PHP を Apache モジュールとして実行する場合、Apache はそのメモリ セグメントの永続化を担当します... PHP を CLI から実行する場合、そこにメモリ セグメントを保持するものは何もないため、PHP の実行の最後に破棄されます。
(正確な仕組みはわかりませんが、少なくとも原則としては、私の言葉があまり「技術的」でなくても、そのようなものです ^^ )


または、「最適化」とは、構成ディレクティブapc.optimizationのように、オペコード キャッシュ以外のものを意味しますか? もしそうなら、これは APC 3.0.13 で削除されました。

于 2009-08-07T15:25:18.327 に答える
6

環境に基づいて構成を生成する CLI コードがある場合、CLI コードは APC が有効になっていないと見なします。たとえば、CLI を使用して Symfony の DI コンテナーを生成する場合、Doctrine に APC を使用しないように指示します ( details )。

また、私はそれをテストしていませんが、.a の後に含まれるファイルのスクリプトの速度を APC が改善する可能性がありますpcntl_fork()編集: APC & pcntl_fork()hereについて質問しました。

完全を期すために、CLI で APC を有効にするには (Ubuntu の場合):

echo 'apc.enable_cli = 1' > /etc/php5/cli/conf.d/enable-apc-cli.ini
于 2013-05-24T09:37:41.367 に答える
3

さて、CLI モードで APC を使用するのには十分な理由があります: 単体テスト: 後の運用環境にできるだけ近い環境を使用して単体テストを実行したいと考えています。Zend Framework には内部キャッシング ソリューションがあり、APC の Variable Cache をストレージ バックエンドとして使用できます。これを使用したいと考えています。

于 2011-01-13T16:03:26.443 に答える
2

CLI モードで使用する別の理由があります。一部のスクリプトはキャッシュとして使用できます。

于 2011-06-27T20:22:55.743 に答える