PHP OpCodeキャッシュは__Autoloadで動作しますか?
-
22-09-2019 - |
質問
これが基本的である場合は申し訳ありませんが、私はPHPのOOについてできる限り多くのことを学ぼうとしています。
それで、__autoload()がphp opcodeキャッシュに影響を与えているかどうかを知りたいですか?
解決
(免責事項:私はAPCのみを知っています)
OpCodeキャッシュは次のとおりです。
- ファイルが含まれている/必要な場合、そのファイルへのフルパスを取得します
- そのファイルに対応するオペコードがすでにRAMに含まれているかどうかを確認します(オペコードキャッシュ)
- はいの場合、それらが実行されるようにそれらのopcodeを返します
- いいえの場合は、ファイルをロードしてOpCodesにコンパイルします。オペコードをキャッシュに保存します。
ここでの重要なポイントは、エントリポイントです。ファイルへのフルパスです。
一般的に自動装置が行うのは、次のとおりです。
- クラスの名前を取得します
- ファイルの名前に変換します
- そのファイルを含める/要求します
したがって、オペコードキャッシュに関連する情報(ファイルへのフルパス、およびそれが含まれている/必要であるという事実)はまだここにあります。
その結果、AutoLoadはOPコードキャッシュに問題をもたらさないはずです。
(そして、APCを使用する場合、私が知る限りではありません)
他のヒント
Opcode Cachesは自動装置で動作します(または少なくとも機能するはずです)が、パフォーマンスが発生する可能性があります。
から 覚えておいてください:バイトコードキャッシュに優しくしてください:
<arnaud_> does autoload have a performance impact when using apc ?
<Rasmus_> it is slow both with and without apc
<Rasmus_> but yes, moreso with apc because anything that is autoloaded is pushed down into the executor
<Rasmus_> so nothing can be cached
<Rasmus_> the script itself is cached of course, but no functions or classes
<Rasmus_> Well, there is no way around that
<Rasmus_> autoload is runtime dependent
<Rasmus_> we have no idea if any autoloaded class should be loaded until the script is executed
<Rasmus_> top-level clean deps would speed things up a lot
<Rasmus_> it's not just autoload
<Rasmus_> it is any sort of class or function declaration that depends on some runtime context
<Rasmus_> if(cond) function foo...
<Rasmus_> if(cond) include file
<Rasmus_> where file has functions and classes
<Rasmus_> or heaven forbid: function foo() { class bar { } }
と ラムスからのこのメール:
明確にするために、もちろん条件付きで含まれるファイルがコンパイルされ、キャッシュされます。問題は、含まれているファイルではなく、すべての要求で再定義する必要がある条件付きで定義されたクラスと機能です。それが重要であるかどうかは状況の詳細に帰着しますが、それが遅いことは間違いありません。たとえば、NOP対FETCH_CLASSに帰着し、NOPは明らかにはるかに高速です。
所属していません StackOverflow