PHP実行速度最適化技巧のまとめ


1.file_が使えますゲットするcontenstsがfile、fopen、feof、fgetsなどのシリーズに取って代わる場合は、できるだけfile_を使用します。ゲットする彼の効率はずっと高いからです。でもfile_には注意してくださいゲットするcontenstsはURLファイルを開く時のPHPバージョンの問題です。2.できるだけファイル操作を少なくし、PHPのファイル操作効率も低くない;3.SELECTの最適化 SQL文は、可能な限り少ないINSERT、UPDATE操作を行います。4.できるだけPHPの内部関数を使う(しかし、PHPの中にない関数を探すために、カスタム関数を書く時間を浪費しました。経験問題です。)5.循環内部は変数を宣言しないでください。特に大変数:対象(PHPの中で注意すべき問題だけではないようですね?)6.多次元配列は、できるだけ循環ネスティングしないでください。7.PHP内部の文字列操作関数を使用できる場合は、正規表現を使用しないでください。8.foreachの効率がもっと高くて、できるだけforeachでwhileとforサイクルの代わりにします。9.引用符の代わりにシングル引用符を使用する文字列。10.i+=1をi=i+1の代わりに使う。c/c++の習慣に合っています。効率も高いです。11.global変数に対して、使い終わったらunset()を落とすべきです。静的な呼び出しのメンバーは必ずstaticと定義します。 (PHP 5 ONLY)Tips: PHP 5は静的なメンバーの概念を導入しており、作用はPHP 4の関数内部静的変数と一致しているが、前者はクラスのメンバーとして使用されている。静的変数とRubyのクラス変数(クラス名) variableはほぼ同じで、すべてのクラスのインスタンスは同じ静的変数を共有します。静的に非staticを呼び出す メンバー、効率は静的に起動されます。 static メンバーが遅い 50-60%です。主に前者が生まれるからです。 同前STRICT 警告、内部にも変換が必要です。php class foo {     機能 bar() {         echo 'フォロワー    } } $foo = new foo; instance way$foo->bar()// static way foo::bar()?>クラス定数(PHP 5 ONLY)Tips: PHP 5の新機能は、C++のconstに似ています。クラスの定数を使うメリットは、- コンパイル時に解析します。追加オーバーヘッドがありません。 雑穀表がもっと小さいので、内部検索がもっと速いです。 クラスの定数は特定の「名前空間」にしか存在しないので、寄せ集めの名前はもっと短いです。 コードがもっと綺麗で、間違いをなくすのがもっと便利です。(しばらく)使わないでください。 require/include_オンス  require/include_オンス 呼び出される度にターゲットファイルを開きます!- 絶対パスを使うとPHP 5.2/6.0 この問題は存在しません。 新版の APC キャッシュシステムはこの問題ファイルを解決しました。 I/O 増加 => 効率が低下します。必要であれば、自分で書類を確認してもいいです。 require/includeです意味のない関数を呼び出しないでください。対応する定数がある場合は、関数を使用しないでください。  - 関数なし- Win 98/NT/2000/XP/Vista/Longhorn/Shothorn/Whistler...汎用- いつでも利用可能な時間の問題 (PHP>5.1.0 ONLYはどうやってあなたのソフトウェアの中で今の時間を知ることができますか?シンプル time() アゲイン、 あなた ask 私は…」でも、いずれは関数を呼び出すことができます。遅いです。今はいいです $_SERVER['REQUEST_TIME''は関数を呼ばなくてもいいです。また節約しました。スピードを上げる PCRE- 保存しない結果については、使用しないでください。 (),一律に使う(?:)このように PHP 該当する内容にメモリを割り当てる必要はなく、省。能率が上がる 15% 左右- 正則を使わず、正則を使わずに、マニュアル「文字列関数」の部分を丁寧に読んでください。あなたが落とした使いやすい機能がありますか?例えば、strpbrok()strancasecmp()strpos()/strpos()/stripos()/stripos()加速 sttr変換が必要な場合は、配列ではなく文字列を使います。 sttr: 'e's                           // ...                            )); // bad効率アップ:10 倍です無駄な置き換えをしないでください。代わりがなくても、stru。replace そのパラメータにメモリも割り当てられます。遅いです解決策:- 使う?遣う ストリップ まず(非常に速い)を探して、交換が必要かどうかを見ます。必要であれば、また効率を変えます。 もし代替が必要ならば、効率はほぼ同じで、違いは 0.1% 左右- 置換が必要でない場合: ストリップ 速い 200%です邪悪な @ 操作子は乱用しないでください。 @ オペレータ。とはいえ @ 簡単に見えますが、実は楽屋にはたくさんの操作があります。使う?遣う @ 使わないよりも @,効率の差:3 倍です特にサイクルでは使わないでください。 @,はい、 5 回循環のテストでは、先に使っても大丈夫です。 error_レポートting(0) エラーを消して、サイクルが終わったら開けてもいいです。 @ 速いです使い道がうまい strancmpは「前のn文字」と同じかどうかを比較する必要があります。 strancmp/strancasecmpではなく substr/strowerは、PCREではなく、更にeregを言及しないでください。strancmp/strancasecmp 効率が一番高いです。substrを慎むcompare(PHP 5 ONLY)上の通り、substrcompareは先にsubstrよりもっと速いはずです。答えは否定です。 大きさを無視した比較- 比較的大きい文字列は文字列の代わりに定数を使用しないでください。なぜですか? 二回お問い合わせが必要です。 定数名を小文字に変換する必要があります。 生成 同前NOTICE 警告→ 一時文字列の効率の違いを作成します。700%です。やめてください count/streen/sizof 挿入 for サイクルの条件文にTips: 私の個人的なやり方。php for ($i = 0, $max = count($array);i < $max; ++$i);効率向上比:- count 50%- streen 75%の短いコードは必ずしも速くないです。php// longest if ($a. == $b) {     $str .= $a; else {     $str .= $b;}// longer if ($a. == $b) {     $str .= $a;}$str .= $b;// スト .= ($a. == $b ? $a. : $b);どれが速いと思いますか?効率比較:- longest: 4.27- longer: 4.43- ショートショット: 4.76不思議?もう一つ:read() !== false {     if ($イベント == '.' || $イベント == '..') {         contine;    } } // versus glob('./*')// versus (include . and ..) scandir('.');どれが速いですか効率比較:- original: 3.37- glob: 6.28- scandir: 3.42- オリジナル without OO: 3.14- SPL (PHP 5): 3.95画外音:これからもわかる。 PHP 5 の対象向け効率は多く向上しました。効率は純関数とほとんど変わりません。向上する PHP ファイルアクセス効率は他のものを含む必要があります。 PHP ファイルの場合は、フルパスまたは変換しやすい相対パスを使用します。php include 'file.php'; // bad appach incldue './file.php'; // good include '/path/to/file.php'; // ideal物はすべてPHPを使います たくさんの拡張機能と関数があります。一つの機能を実現する前に、見てください。 PHP この機能がありますか?もっと簡単な実現がありますか?php$filename = "./somepic.gif";ハンドル = fopen($filename) "rb";;contensts = fread($handle) filesize($filename);fclose($handle)// v.s. much シンプルフィルムゲットするcontensts('./somepic.gif');?引用のテクニックについて引用してもいいです。 複雑な構造データへのアクセスを簡単にします。 メモリの使用を最適化します。php$a['b']['c'] = array()/// slow 2 extra sh lookup per access for ($i = 0; $i < 5; ++$i)    $a['b']['c'[$i] = $i;// much faster reference based appach$ref =& $a['b']['c';for ($i = 0; $i < 5; ++$i)    $ref[$i] = $i;?>