1. 多くのコード ファイル、特に多くのインクルード ファイル (include または require) を含むファイルの場合。中間コードの解析と生成にはさらに時間がかかります。
2. PHPのコードファイルに変更がなくても、実行処理は厳密に処理に従って実行されます。つまり、アプリケーション プログラムが変更されるかどうかに関係なく、アプリケーション プログラムを呼び出すたびに再コンパイルしてオペコードを生成する必要があります。 (実際、これがコンパイルキャッシュが存在する理由です)
3. この処理はメインコードファイル内だけでなく、すべての include や require に対しても実行されます。 (これは引き続き最適化される可能性があります)
最適化できる領域は何ですか?
1. このモジュールを毎回ロードしないように、mod_php fast-cgi を作成します。このモジュールも毎回 PHP 解釈環境を初期化する必要があります。
2. 毎回コンパイルすることを避けるために、php ファイルのオペコードコードをキャッシュします。
ポイント2を達成するにはAPCを使用できます。コンパイル キャッシュは PHP 実行中の解析プロセスを削除するため、大量の PHP コードを含むアプリケーションに非常に効果的です。通常の状況では、2 ~ 3 倍以上の速度を上げることができます。多数のインクルード ファイルを含むプロジェクトの場合、コンパイル キャッシュの利点がよりよく発揮されます。
注: include はコンパイル キャッシュによってキャッシュされません。たとえば、main.php と tobeInclude.php という 2 つのファイルがあり、Main.php には include tobeInclude.php というステートメントがあります。中間コードの接尾辞は .op であると仮定します (これは当てはまりません)。次に、キャッシュ main.php=>main.op、tobeInclude.php=>tobeInclude.op を追加した後、ただし、PHP が main.php を実行するときは、依然として main.op 内の include コマンドを解析し、tobeInclude.op のコンテンツを呼び出す必要があります。具体的なプロセスは以下の通りです。
…=>main.opを実行=>tobeInclude.op=>を実行…
単にmain.opを実行するのではなく
だから「インクルードファイルが多すぎるとプログラムのパフォーマンスが低下する」と言われているんですね。
APCの具体的な構成。
Alternative PHP Cache (APC) は、無料で公開されている、PHP 用に最適化されたコード キャッシュです。これは、PHP 中間コードをキャッシュおよび最適化するための、無料でオープンかつ堅牢なフレームワークを提供するために使用されます。
APC公式サイトは http://pecl.php.net/package/apc です
1.インストール
PHP拡張機能としてインストールします
phpize
./configure --enable-apc --enable-apc-mmap
作る
メイクインストール
.soを生成し、.soをPHPがモジュールを参照するディレクトリにコピーし、パーミッションを755に変更します
2. 設定
apc.enabled ブール値
apc.optimization 最適化
オプションはスクリプト内で変更可能です
APC PHP.ini設定オプションの詳細な説明
[APC]
; 代替 PHP キャッシュは、PHP 中間コードをキャッシュして最適化するために使用されます
apc.cache_by_default = オン
;SYS
; デフォルトですべてのファイルのバッファリングを有効にするかどうか。
; Off に設定し、プラス記号で始まる apc.filters ディレクティブと一緒に使用すると、ファイルはフィルターに一致する場合にのみキャッシュされます。
apc.enable_cli = オフ
;SYS
; CLI バージョンで APC 機能を有効にするかどうかは、テストとデバッグの目的でのみこのコマンドをオンにします。
apc.enabled = オン
; APC を有効にするかどうか APC が PHP に静的にコンパイルされており、それを無効にしたい場合は、これが唯一の方法です。
apc.file_update_protection = 2
;SYS
; 実行中のサーバー上のファイルを変更するときは、アトミックな操作を実行する必要があります。
; つまり、まず一時ファイルに書き込んでから、そのファイルを最終的な名前に変更(mv)します。
; テキスト エディターや cp や tar などのプログラムはこのように動作しないため、不完全なファイルがバッファリングされる可能性があります。
; デフォルト値 2 は、ファイルにアクセスするときに、変更時間がアクセス時間から 2 秒未満であることが判明した場合、バッファリングは実行されないことを意味します。
; 運が悪い訪問者は不完全なコンテンツを取得する可能性がありますが、その悪影響はキャッシュによって拡大されません。
; すべての更新操作がアトミック操作であることを確認できる場合は、0 を使用してこの機能をオフにすることができます。
; 大量の IO 操作によりシステムの更新が遅い場合は、この値を増やす必要があります。
apc.filters =
;SYS
; POSIX 拡張正規表現のカンマ区切りのリスト。
; ソースファイル名がいずれかのパターンに一致する場合、ファイルはキャッシュされません。
; マッチングに使用されるファイル名は、絶対パスではなく、include/require に渡されるファイル名であることに注意してください。
; 正規表現の最初の文字が「+」の場合、その式に一致するファイルがキャッシュされることを意味します。
; 最初の文字が「-」の場合、一致したものはキャッシュされません。 「-」はデフォルト値であり省略可能です。apc.ttl = 0
;SYS
; キャッシュ エントリがバッファ内に留まることが許可される秒数。 0 はタイムアウトしないことを意味します。推奨値は7200~36000です。
; 0 に設定すると、バッファが古いキャッシュ エントリでいっぱいになり、新しいエントリがキャッシュされなくなる可能性があります。
apc.user_ttl = 0
;SYS
; apc.ttl と似ていますが、各ユーザーの推奨値は 7200 ~ 36000 です。
; 0 に設定すると、バッファが古いキャッシュ エントリでいっぱいになり、新しいエントリがキャッシュされなくなる可能性があります。
apc.gc_ttl = 3600
;SYS
; キャッシュ エントリがガベージ コレクション テーブルに存在できる秒数。
; この値は、キャッシュされたソース ファイルの実行中にサーバー プロセスがクラッシュした場合でも安全対策を提供します。
; そして、ソースファイルが変更された場合、古いバージョンに割り当てられたメモリは、この TTL 値に達するまで再利用されません。; この機能を無効にするには、ゼロに設定します。
apc.include_once_override = オフ
;SYS
; 予期しない結果を引き起こす可能性があるため、オフのままにしてください。
apc.max_file_size = 1M
;SYS
; このサイズより大きいファイルのキャッシュを無効にします。
apc.mmap_file_mask =
;SYS
; MMAP サポートが –enable-mmap (デフォルトで有効) を使用して APC 用にコンパイルされている場合、
; ここでの値は、mmap モジュールに渡される mktemp スタイルのファイル マスクです (推奨値は「/tmp/apc.XXXXXX」です)。
; このマスクは、メモリ マップ領域をファイル バックアップするか共有メモリ バックアップするかを決定するために使用されます。
; 直接ファイルバックアップメモリマッピングの場合は、「/tmp/apc.XXXXXX」(正確に 6 つの X)に設定します。
; POSIX スタイルの shm_open/mmap を使用するには、「/apc.shm.XXXXXX」に設定する必要があります。
; 「/dev/zero」に設定して、匿名でマップされたメモリにカーネルの「/dev/zero」インターフェイスを使用することもできます。
; このディレクティブを定義しないことは、匿名マッピングの使用を強制することを意味します。
apc.num_files_hint = 1000
;SYS
; Web サーバーに含めたりリクエストしたりできるさまざまなソース ファイルのおおよその数 (推奨値は 1024 ~ 4096)。
; よくわからない場合は、0 に設定してください。この設定は主に、数千のソース ファイルを含むサイトに使用されます。
apc.optimization = 0
; 最適化レベル (推奨値は 0)。
; 正の整数値はオプティマイザーが有効であることを示し、値が大きいほどより積極的な最適化が使用されます。
; 値を大きくすると速度の向上が非常に制限される可能性がありますが、まだ実験段階です。
apc.report_autofilter = オフ
;SYS
; 早期/遅延バインディングにより自動的にキャッシュされないすべてのスクリプトを記録するかどうか。
apc.shm_segments = 1
;SYS
; コンパイラバッファに割り当てられる共有メモリブロックの数(推奨値は1)。
; APC が共有メモリを使い果たし、apc.shm_size ディレクティブがシステムで許容される最大値に設定されている場合、
; この値を増やしてみてください。
apc.shm_size = 30
;SYS
; 各共有メモリ ブロックのサイズ (MB 単位、推奨値は 128 ~ 256)。
; 一部のシステム (ほとんどの BSD バリアントを含む) のデフォルトの共有メモリ ブロック サイズは非常に小さいです。
apc.slam_defense = 0
;SYS (このコマンドの使用には反対です。apc.write_lock コマンドを使用することをお勧めします)
; サービスの開始やファイルの変更など、非常に負荷の高いサーバーでは、
; 複数のプロセスが同時にファイルをキャッシュしようとするため、競合状態が発生する可能性があります。
; このディレクティブは、キャッシュされていないファイルを処理するときにキャッシュステップをスキップするプロセスの割合を設定するために使用されます。
; たとえば、これを 75 に設定すると、キャッシュされていないファイルが見つかったときに 75% の確率でキャッシュされなくなり、衝突の可能性が減ります。
; この機能を無効にするには、0 に設定することをお勧めします。
apc.stat = オン
;SYS
; スクリプトの更新チェックを有効にするかどうか。
; このコマンドの値を変更する場合は十分に注意してください。
; デフォルト値 On は、APC がリクエストされるたびにスクリプトが更新されたかどうかを確認することを意味します。
; 更新された場合は、コンパイルされたコンテンツを自動的に再コンパイルしてキャッシュします。ただし、これを行うとパフォーマンスに悪影響が生じます。
; Off に設定すると、チェックが実行されなくなり、パフォーマンスが大幅に向上します。
ただし、更新されたコンテンツを有効にするには、Web サーバーを再起動する必要があります。
; このコマンドは include/require ファイルにも有効です。ただし、注意してください
; 相対パスを使用する場合、APC はファイルを含める/要求するたびにファイルの場所を確認する必要があります。
; 絶対パスを使用するとチェックがスキップされる可能性があるため、include/require 操作には絶対パスを使用することをお勧めします。
apc.user_entries_hint = 100
;SYS
; num_files_hint ディレクティブに似ていますが、ユーザーごとに異なります。
; よくわからない場合は、0 に設定してください。
apc.write_lock = オン
;SYS
; 書き込みロックを有効にするかどうか。
; サービスの開始やファイルの変更など、非常に負荷の高いサーバーでは、
; 複数のプロセスが同時にファイルをキャッシュしようとするため、競合状態が発生する可能性があります。
; このディレクティブを有効にすると、競合状態を回避できます。
apc.rfc1867 = オフ
;SYS
; このコマンドをオンにすると、APC は、ファイル フィールドの直前に APC_UPLOAD_PROGRESS フィールドを含むアップロード ファイルごとに、upload_ のユーザー キャッシュ エントリ (つまり、APC_UPLOAD_PROGRESS フィールドの値) を自動的に作成します。
3.php関数