PHP コードを最適化する 40 の小さな例
1. メソッドが静的である場合は、それを静的として宣言すると、
2 よりも速度が向上します。 print 、echo には戻り値がないため、
3. ループ中ではなく、ループの前に変数を破棄してメモリを解放します。 、特に大きな配列;
5. __get、__set、__autoload などのマジック メソッドの使用は避けてください。
6.requiere_once() はより多くのリソースを消費します。
7 . include と require で絶対パスを使用すると、パスの分析にかかる時間を短縮できます。 time ();
9. 文字処理関数を使用できる場合は、正規表現よりも効率的であるため、それらを使用してみてください。
10. str_replace の文字置換は、通常の置換 preg_replace よりも高速です。ただし、strtr は str_replace より高速です。Fast 1/4;
11. 関数が文字置換など、配列と単純な文字の両方をパラメータとして受け入れることができ、パラメータ リストが長すぎない場合は、次のようにすることができます。検索および置換の引数として配列を受け入れる代わりに、1 つの文字のみを置換する、より簡潔な置換ステートメントの使用を検討してください。大きなことは小さく、1+1>2;
12. @ でエラーをカバーすると、スクリプトの実行速度が低下します。
13.$row['id'] は、 $row[id] 7 倍速くなります。配列キーに引用符を追加する習慣を身に付けることをお勧めします。
14. エラー メッセージは非常に便利です。
15. 関数は使用しないでください。 For($x=0; $x < count($array); $x) などのループでは、count() 関数が最初に外側で計算します。最速の 97xxoo は、メソッド内でローカル変数を呼び出すのとほぼ同じ速度です。
17. グローバル変数の作成は、ローカル変数よりも 2 倍遅くなります。
18. ($this->prop++ ) などの (クラス内の変数) は、ローカル変数よりも 3 倍遅くなります。
19。宣言されていないローカル変数の作成は、初期化されたローカル変数よりも 9 ~ 10 倍遅くなります。
20. 宣言されていないローカル変数の宣言は、初期化されたローカル変数よりも 9 ~ 10 倍遅くなります。また、関数で使用されるグローバル変数もパフォーマンスを低下させます (PHP で同じ数のローカル変数を宣言するのと同じです)。グローバル変数が存在するかどうかを確認します。
21. メソッドのパフォーマンスはクラスで定義されたものと同じです。10 個以上のメソッドを追加してもパフォーマンスに違いはありません。テスト対象のクラスへ (これらのメソッドはテスト メソッドの前後にあります);
22. サブクラス内のメソッドのパフォーマンスは基本クラスよりも優れています。
23.パラメータがあり、関数本体が空の場合、実行には 7 ~ 8 回の $localvar++ 操作が必要ですが、同様のメソッド (クラス内の関数) の実行は約 15 回の $localvar++ 操作に相当します。
24 で文字列を囲みます。 ” とすると、php は '…' 内ではなく、“…” 内の変数を検索するため、解釈が少し速くなります。 もちろん、これは文字列に変数を含める必要がない場合にのみ実行できます。
25. 文字列を出力する場合は、ドットの代わりにカンマを使用する方が高速です。 注: これは、Apache サーバーでは、一部の文字列をパラメータとして受け入れます。対応する HTML 静的ページよりも生成に少なくとも 2 ~ 10 倍の時間がかかります。キャッシュがインストールされていない限り、より多くの静的 HTML ページを使用することをお勧めします。
27.アクセスするたびに再コンパイルする必要があります。php キャッシュ プログラムをインストールすることをお勧めします。これにより、繰り返しのコンパイルが削除され、パフォーマンスが 20 ~ 100% 向上します。
28. 高性能の分散メモリ オブジェクト キャッシュの使用をお勧めします。
29. ip2long() 関数と long2ip() 関数を使用して、IP アドレスを整数に変換し、代わりにデータベースに保存します。キャラクター。これにより、保管スペースが約 1/4 に削減されます。同時に、アドレスの並べ替えと迅速な検索も簡単です。
30. checkdnsrr() を使用して、ドメイン名の存在を通じて一部の電子メール アドレスの有効性を確認できます。各ドメイン名は IP アドレスに対応します。 ;
31。php5 および mysql4.1 以降を使用している場合は、mysql_*;
32 の改良された関数の使用を検討してください。三項演算子 (? :);
を使用します。33. プロジェクトを完全にやり直すことを考える前に、PEAR に必要なものがあるかどうかを確認してください。 PEAR は、多くの PHP 開発者が知っている巨大なリソース ライブラリです。
34. ページのソース コードの適切な形式のコピーを自動的に出力するには、error_reporting() を使用します。 0) 機密性の高い情報がユーザーに表示されないようにする機能。理想的には、php.ini ファイルでエラー報告を完全に無効にする必要があります。ただし、共有仮想ホストを使用していて php.ini を変更できない場合は、error_reporting(0) 関数を追加して各スクリプト ファイルの最初の行に配置することをお勧めします (または、require_once() を使用してそれをロードします)。これにより、エラーが発生したときに、機密性の高い SQL クエリとパスが表示されないように効果的に保護できます。36. 大容量の文字列を圧縮 (解凍) してから保存します。データベース時間。この組み込み関数は、gzip アルゴリズムを使用して 90% に圧縮できます。
37. 関数は、パラメーター変数アドレスを参照することで複数の戻り値を持つことができます。値ではなくアドレスで渡すことを示すために、変数の前に「&」を追加できます。
38. これを読んでいるほとんどの開発者が「マジック クオート」と SQL インジェクションの危険性を十分に理解していることを願っています。 SQL インジェクションについてはすでによく知っていますが、この用語を理解することが非常に重要であるため、ここで説明します。この用語を聞いたことがない場合は、残りの時間をグーグルで読んでください。
39. strlen() は、小文字やハッシュ テーブル クエリなどの他の操作を呼び出す必要があるため、それほど高速ではありません。isset() を使用すると、strlen();
より高速になります。 40.変数 $i++ の値をインクリメントまたはデクリメントすると、++$i よりも少し遅くなる場合があります。これは PHP 固有のものであり、他の言語には当てはまらないため、C または Java コードを変更するつもりはありません。 ++$i は、$i++ に使用される 4 つのオペコードの代わりに 3 つだけ必要なため、PHP ではたまたま高速になります。実際には、ポスト インクリメントにより、一時的な変数が作成されます。事前インクリメントは元の値を直接増加させますが、これは Zend の PHP オプティマイザーと同様にオペコードが最適化する最適化の 1 つです。すべてのオペコード オプティマイザーがこの最適化を実行するわけではなく、多数の最適化が存在するため、注意が必要です。オペコード オプティマイザーなしで実行されている ISP とサーバー。