2

現在、別のサイトで再利用する予定のない非常に大規模なプロジェクトでは、サイトの名前がどこのファイルにもハードコードされています。さて、もし私がサイト名を変更したとしたら、それをどこでも変更するのは大変な努力を要するでしょう。明らかな解決策は、名前を変数または定数として格納することですが、それを私のマイクロ最適化の考え方と呼ぶことができると思います。PHPが解析する必要のあるものが1つ少なくなると常に考えていました。それほど大きな違いはないことはわかっていますが、APCのようなオペコードキャッシュを使用することで、PHPがそれを再解析する必要さえないかどうかを知りたかっただけです。

4

2 に答える 2

6

本当に:あなたはそのようなことを気にするべきではありません。

構成の違いは、はるかに大きな違いを意味します(たとえば、apc.statAPCのオプションは、サーバーの負荷にかなりの影響を与える可能性があります。DBクエリのようなものは、何百倍も影響があります)

ここで、おそらく重要なのは保守性です。

  • サイト名をハードコーディングしないことで(そのナノ最適化を除いて)何らかのメリットがありますか?
  • ハードコーディングすることで何かメリットがありますか(同じ例外)

どちらの場合も答えが「いいえ」で、アプリケーションが機能する場合は、それが重要です。


そのようなマイクロ最適化に満たない時間を費やす時間がある場合は、プロファイラーを使用してアプリケーションコードを調べ、DBクエリを調べ、静的JS/CSSをフェッチするために実行しているHTTPリクエストの数を調べる方がよいでしょう。 / images、PHPのアップグレード、またはPHP 5.3で実行できるようにコードを変更する(PHP 5.3には5.2を超えるいくつかの最適化が付属しているため)、...

それらすべてはおそらくあなたにより高いゲインを得るでしょう;-)


コメントの後に編集:

基本的に、PHPファイルがロードされるとき:

  • ファイルはディスクから読み取られます
  • 解析され、オペコードにコンパイルされます
  • オペコードが実行されます

オペコードキャッシュ付き:

  • オペコードを含む場所がRAMにある場合、それらはRAMからロードされます(つまり、ファイルの読み取りも解析/コンパイルも行われません)
    • そうでない場合は、前の手順を参照してください。次のリクエストのために、実行前に「オペコードをRAMに保存する」を追加するだけです。
  • そしてオペコードが実行されます

このapc.statオプションは、APCがファイルの最終変更日時を調べてRAMからのオペコードを使用するか、RAM内のオペコードよりも新しい場合はファイルを再コンパイルするかを決定するかどうかを定義します。

このオプションを無効にすると、次のようになります。

  • ファイルはディスク上でチェックされません=>より速く、より少ないリソースを使用します
    • たとえば、非常に負荷の高いサーバーでこのオプションを無効にすると、CPU負荷が10〜15%低下することがわかりました。
  • ただし、変更のチェックがないため、変更を考慮に入れる場合は、キャッシュをクリアする必要があります


それでも、私が言ったことは真実です。おそらく、「ハードコードされた値を使用する必要がある」よりも「定数/変数を使用する必要がある」よりも重要なゲインを意味する、最適化できることがたくさんあります。

于 2009-09-22T20:43:41.830 に答える
3

これはまさに起こるワットです..トークンレベルの詳細に立ち入ることなく...

PHPはスクリプト言語であり、ほとんどの人はそれがコンパイルされていないことを意味すると考えています。これは、gccまたはjavacを呼び出さないという点で、従来の意味では当てはまります。代わりに、スクリプトが要求されるたびにコンパイルします。実際、PHPとJavaのコンパイルライフサイクルは非常に似ています。どちらも中間命令セット(オペコードまたはバイトコード)にコンパイルされ、仮想マシン(Zend VMまたはJVM)で実行されるためです。

ここに画像の説明を入力してください

解析とコンパイルのフェーズは遅いです。opcacheを追加するときは、解析フェーズとコンパイルフェーズの結果を保存することでこのプロセスを短縮し、実行だけを通常どおり動的に実行します。事実上、Javaのライフサイクルに近づいています。主な違いは、ファイルではなく共有メモリに保存し、スクリプトに変更が発生した場合に自動的に再コンパイルできることです。

ここに画像の説明を入力してください

オペコードキャッシュを使用します。これにより、マイクロ最適化よりもパフォーマンスが向上します。さらに、Zend OpCacheを使用すると、多くの最適化が行われます(たとえば、戻り値が使用されていないときに$i++を++$iに切り替える)。

オペコードキャッシュの使用は、もはやオプションではありません。これにより、わずかな労力でハードウェアのパフォーマンスを向上させることができます。

于 2014-05-09T13:37:42.893 に答える