1

サイトのメモリを最適化する際に、特定の目的のために多数のPHPクラスファイル(600以上)を含めると、メモリ消費量が急増することに気付きました。分解すると、PHPファイルを含める(したがって、おそらくオペコードにコンパイルする)と、ディスク上のファイルサイズの約50倍のメモリが必要になることに気付きました。

私の場合、ディスク上のファイルのサイズは合計で約800 kBです(インデントとコメント、純粋なクラス宣言、多くの文字列は含まれていません)が、すべてを含めた後、メモリ消費量は約40MB高くなりました。

私はこのように測定しました(PHP 5.3.6):

echo memory_get_usage(), "<br>\n";
include($file);
echo memory_get_usage(), "<br>\n";

600ファイルを超えるループ内で、メモリ消費量が基本的にゼロから40MBに増加するのを見ることができます。(追加のクラスをロードするオートローダー、またはすぐに実行されるグローバルコードやコンストラクターコードはありません。実際には純粋なインクルードのみです。)

これは正常な動作ですか?オペコードは純粋なソースコードよりもコンパクトだと思いました(すべてのスペースとコメントを削除するか、たとえば「foreach」文字列の代わりに1つまたは2つの命令バイトを使用するなど)。

これが正常な場合、それを最適化する方法はありますか?(オペコードキャッシュを使用すると、実際のメモリ消費量ではなく、コンパイル時間を節約できると思いますか?)

4

1 に答える 1

1

どうやらそれはそれがそうである方法です。

私はこれをゼロから再テストしました:

  • 空の長さゼロのファイルを含める:784バイトのメモリ消費量の増加
  • 空のクラスX{}定義を含める:2128バイト
  • 空のメソッドが1つあるクラスを含める:2816バイト
  • 2つの空のメソッドを持つクラスを含めます:3504バイト

インクルードファイルのファイルサイズは、すべてのテストで150バイト未満です。

于 2013-02-01T13:44:13.910 に答える