文字列を囲むには二重引用符ではなく一重引用符を使用すると高速になります。 PHP は二重引用符で囲まれた文字列内の変数を検索しますが、一重引用符は検索しません。 注: これを実行できるのは echo だけです。これは複数の文字列をパラメータとして受け取ることができる「関数」です (注釈: PHP マニュアル echo は実際の関数ではなく言語構造であるため、関数は二重引用符で囲まれています)。
1. クラスメソッドを静的に定義できる場合は、静的に定義してみると、速度が 4 倍近く向上します。
2. $row[’id’] は $row[id] より 7 倍高速です。
3. Echo は print より高速で、echo $str1、$str2 などの文字列連結の代わりに echo の複数のパラメーター (注釈: ピリオドの代わりにカンマを使用することを指します) を使用します。
4. for ループを実行する前に最大ループ数を決定します。ループごとに最大値を計算するのではなく、代わりに foreach を使用することをお勧めします。
5. 未使用の変数、特に大きな配列の登録を解除して、メモリを解放します。
6. __get、__set、__autoload の使用は避けてください。
7. require_once() は高価です。
8. ファイルをインクルードする場合は、絶対パスを使用するようにしてください。これにより、include_path 内のファイルを検索する PHP の速度が低下し、オペレーティング システムのパスの解析に必要な時間が短縮されます。
9. スクリプトの実行開始時刻 (アノテーション: つまり、サーバーがクライアント要求を受信する時刻) を知りたい場合は、time() よりも $_SERVER[‘REQUEST_TIME’] を使用する方が良いでしょう。
10. 関数は正規表現を置き換えて同じ関数を完成させます。
11. str_replace 関数は preg_replace 関数よりも高速ですが、strtr 関数は str_replace 関数よりも 4 倍効率的です。
12. 文字列置換関数がパラメータとして配列または文字を受け入れ、パラメータの長さが長すぎない場合は、渡される各パラメータが 1 行ではなく 1 文字になるように追加の置換コードを記述することを検討できます。配列をクエリおよび置換のパラメータとして受け入れます。
13. 複数の if、else if ステートメントを使用するよりも、選択的分岐ステートメント (翻訳アノテーション: switch case) を使用する方が適切です。
14. @ を使用してエラー メッセージをブロックするのは非常に非効率的です。
15. Apache の mod_deflate モジュールを開くと、Web ページの閲覧速度が向上します。
16. データベース接続は使用が終了したら閉じる必要があり、長時間の接続は使用しないでください。
17. エラーメッセージは高価です。
18. メソッド内でローカル変数を増やすのが最も早いです。関数内でローカル変数を呼び出すのとほぼ同じ速度です。
19. グローバル変数のインクリメントは、ローカル変数のインクリメントより 2 倍遅くなります。
20. オブジェクト プロパティ ($this->prop++ など) のインクリメントは、ローカル変数のインクリメントより 3 倍遅くなります。
21. 未定義のローカル変数のインクリメントは、事前定義されたローカル変数のインクリメントより 9 ~ 10 倍遅くなります。
22. 関数内で呼び出さずにローカル変数を定義するだけでも、(ローカル変数をインクリメントするのと同じ程度に) 速度が低下します。 PHP はおそらく、グローバル変数が存在するかどうかを確認します。
文字列を囲むには二重引用符ではなく一重引用符を使用すると高速になります。 PHP は二重引用符で囲まれた文字列内の変数を検索しますが、一重引用符は検索しません。 注: これを実行できるのは echo だけです。これは複数の文字列をパラメータとして受け取ることができる「関数」です (注釈: PHP マニュアル echo は実際の関数ではなく言語構造であるため、関数は二重引用符で囲まれています)。
1. クラスメソッドを静的に定義できる場合は、それを静的に定義してみると、速度が 4 倍近く向上します。
2. $row[’id’] は $row[id] より 7 倍高速です。
3. Echo は print より高速で、echo $str1、$str2 などの文字列連結の代わりに echo の複数のパラメーター (注釈: ピリオドの代わりにカンマを使用することを指します) を使用します。
4. for ループを実行する前に最大ループ数を決定します。ループごとに最大値を計算するのではなく、代わりに foreach を使用することをお勧めします。
5. 未使用の変数、特に大きな配列の登録を解除して、メモリを解放します。
6. __get、__set、__autoload の使用は避けてください。
7. require_once() は高価です。
8. ファイルをインクルードする場合は、絶対パスを使用するようにしてください。これにより、include_path 内のファイルを検索する PHP の速度が低下し、オペレーティング システムのパスの解析に必要な時間が短縮されます。
9. スクリプトの実行開始時刻 (アノテーション: つまり、サーバーがクライアント要求を受信する時刻) を知りたい場合は、time() よりも $_SERVER[‘REQUEST_TIME’] を使用する方が良いでしょう。
10. 関数は正規表現を置き換えて同じ関数を完成させます。
11. str_replace 関数は preg_replace 関数よりも高速ですが、strtr 関数は str_replace 関数よりも 4 倍効率的です。
12. 文字列置換関数がパラメータとして配列または文字を受け入れ、パラメータの長さが長すぎない場合は、渡される各パラメータが 1 行ではなく 1 文字になるように追加の置換コードを記述することを検討できます。配列をクエリおよび置換のパラメータとして受け入れます。
13. 複数の if、else if ステートメントを使用するよりも、選択的分岐ステートメント (翻訳アノテーション: switch case) を使用する方が適切です。
14. @ を使用してエラー メッセージをブロックするのは非常に非効率的です。
15. Apache の mod_deflate モジュールを開くと、Web ページの閲覧速度が向上します。
16. データベース接続は使用が終了したら閉じる必要があり、長時間の接続は使用しないでください。
17. エラーメッセージは高価です。
18. メソッド内でローカル変数を増やすのが最も速いです。関数内でローカル変数を呼び出すのとほぼ同じ速度です。
19. グローバル変数のインクリメントは、ローカル変数のインクリメントより 2 倍遅くなります。
20. オブジェクト プロパティ ($this->prop++ など) のインクリメントは、ローカル変数のインクリメントより 3 倍遅くなります。
21. 未定義のローカル変数のインクリメントは、事前定義されたローカル変数のインクリメントより 9 ~ 10 倍遅くなります。
22. 関数内で呼び出さずにローカル変数を定義するだけでも、(ローカル変数をインクリメントするのと同じ程度に) 速度が低下します。 PHP はおそらく、グローバル変数が存在するかどうかを確認します。
if (strlen($foo) < 5) { echo “Foo is too short”$$ } |
(以下のヒントと比較してください)
if (!isset($foo{5})) { echo “Foo is too short”$$ } |
isset() の呼び出しは、strlen() よりも高速です。これは、後者とは異なり、言語構造としての isset() の実行に関数の検索と小文字が必要ないためです。つまり、実際には、最上位コードで文字列の長さをチェックするオーバーヘッドはそれほどかかりません。
34. 変数 $i のインクリメントまたはデクリメントを実行する場合、$i++ は ++$i よりも遅くなります。この違いは PHP に固有のものであり、他の言語には当てはまりません。そのため、C または Java コードを変更して、すぐに高速になることを期待しないでください。実際には機能しません。 ++$i は 3 つの命令 (オペコード) しか必要としないため高速ですが、$i++ は 4 つの命令を必要とします。ポストインクリメントでは、実際には、後でインクリメントされる一時変数が作成されます。プレフィックスの増分は、元の値に直接増加します。これは、Zend の PHP オプティマイザーによって行われるような最適化の一種です。すべてのコマンド オプティマイザーが同じ最適化を行うわけではなく、コマンド オプティマイザーを備えていないインターネット サービス プロバイダー (ISP) やサーバーが多数存在するため、この最適化を念頭に置くことをお勧めします。
35. すべてがオブジェクト指向 (OOP) である必要はありません。オブジェクト指向は多くの場合非常に高価であり、各メソッドとオブジェクトの呼び出しは大量のメモリを消費します。
36. すべてのデータ構造を実装するためにクラスを使用する必要はありません。配列も非常に便利です。
37. 本当に再利用するコードを慎重に考えてください。
38. 必要に応じていつでもコードをメソッドに分割できます。
39. 多数の PHP 組み込み関数を使用してみます。
40. コード内に時間のかかる関数が多数ある場合は、C 拡張機能を使用して実装することを検討できます。
41. コードをプロファイリングします。チェッカーは、コードのどの部分にどれくらいの時間がかかっているかを示します。 Xdebug デバッガーには、コードの全体的な整合性を評価し、コード内のボトルネックを明らかにする検査プログラムが含まれています。
42. mod_zip を Apache モジュールとして使用すると、データを即座に圧縮し、データ転送量を 80% 削減できます。
43. file、fopen、feof、fgets などの一連のメソッドの代わりに file_get_contents を使用できる場合は、より効率的な file_get_contents を使用してください。ただし、URL ファイルを開くときは、file_get_contents の PHP バージョンの問題に注意してください。
44. PHP のファイル操作効率は低くありませんが、ファイル操作は最小限に抑えます。45. Select SQL ステートメントを最適化し、挿入操作と更新操作をできるだけ少なくします (更新について批判されました)。
46. できる限り PHP の内部関数を使用します (ただし、PHP に存在しない関数を見つけるために、カスタム関数を作成できる時間を無駄にしました。)
47. ループ内で変数、特に大きな変数を宣言しないでください (これは PHP だけの問題ではないようですよね?)。48. 多次元配列で代入をループしたり入れ子にしたりしないようにしてください。
49. PHP の内部文字列操作関数を使用できる場合は、正規表現を使用しないでください。50. foreach の方が効率的です。while および for ループの代わりに foreach を使用してください。
51. 文字列を引用するには二重引用符の代わりに一重引用符を使用します。
52. "i=i+1 の代わりに i+=1 を使用します。これは C/C++ の習慣に従っており、より効率的です。";53. グローバル変数は使用後に unset() する必要があります。