PHPコードを最適化する53条の提案

3663 ワード

1、クラスの方法をstaticと定義できれば、できるだけstaticと定義して、そのスピードは4倍近く上がります。2、$row['id']の速度は$row[id]の7倍です。3、echoはprintより速くて、echoの多重パラメータを使って文字列接続の代わりにします。例えば、echo$str 1、$str 2。4、forサイクルを実行する前に最大サイクル数を決定し、サイクル毎に最大値を計算しないで、foreachを使って代替したほうがいいです。5、使用しない変数、特に大きな配列を取り消してメモリを解放します。6、__u uはできるだけ避けてください。ゲットセットatoload7、require_オンスは高価です。8、includeファイルはなるべく絶対パスを使用します。PHPがinclude_に行くのを避けたからです。ファイルを検索する速度は、オペレーティングシステムのパスを解析するために必要な時間が少なくなります。9、スクリプトの実行が開始された時点を知りたいなら、$SERVER[REQUEST_]TIME'はtime()よりいいです。10、正規表現の代わりに関数が同じ機能を果たします。11、strureplace関数はpreg_に比べてreplace関数は速いですが、sttr関数の効率はstr(u)です。replace関数の4倍です。12、文字列置換関数がパラメータとして受け入れられ、パラメータ長があまり長くない場合、各伝達パラメータは文字であり、1行のコードのみを書くのではなく、クエリーと置換のパラメータとして受け入れるように、追加の代替コードを書くことが考えられます。13、選択分岐文(訳注:switch case)を使って、複数のif、else if文を使うのが良いです。14、@でエラーメッセージを遮断するやり方は非常に効果がなく、極めて効果がない。15、apacheのmod_を開くdeflateモジュールは、ウェブページの閲覧速度を高めることができます。16、データベース接続は使用が完了したらオフにし、長い接続はしないでください。17、エラーメッセージは高価です。18、方法の中で局部変数をインクリメントして、速度は一番速いです。局所変数を関数で呼び出す速度にほぼ匹敵する。19、グローバル変数を一つ上げると、一つのローカル変数より2倍遅くなります。20、オブジェクトの属性をインクリメントする(たとえば、$this->prop+)は、1つのローカル変数のインクリメントよりも3倍遅くなります。21、予め定義されていないローカル変数をインクリメントすると、予め定義されたローカル変数の9倍から10倍遅くなります。22、局部変数だけを定義して、関数で呼び出さないと、同じ速度が遅くなります。PHPは大域変数があるかどうか確認します。23、方法の呼び出しはクラスで定義された方法の数とは関係がないようです。私は10の方法を追加しましたが、性能には変化がありません。24、派生クラスの中の方法は、ベースクラスで定義されている同様の方法より速く実行されます。25、一つのパラメータを持つ空関数を呼び出します。7から8回の局所変数インクリメント動作を実行するのに相当する時間がかかります。同様の方法での呼び出しにかかる時間は15回に近い局所変数インクリメント動作です。26、AppacheがPHPスクリプトを解析する時間は、一つの静的HTMLページを解析するより2倍から10倍遅くなります。できるだけ静的なHTMLページを多く使って、スクリプトを少なく使います。27、スクリプトがキャッシュされない限り、呼び出しのたびに再コンパイルされます。PHPキャッシュ機構のセットを導入すると、通常は25%から100%の性能を向上させ、コンパイルオーバーヘッドを免除することができる。28、できるだけキャッシュして、memcachedを使うことができます。memcachedは、高機能のメモリオブジェクトキャッシュシステムであり、動的なWebアプリケーションを加速させ、データベース負荷を軽減するために使用できる。演算コードのキャッシュは、スクリプトが各要求のために再コンパイルする必要がないようにするために有用である。29、文字列を操作して、その長さが何かの要求を満たしているかを確認する必要がある場合、もちろんstreen関数を使用すると思います。この関数は計算を行わないので、PHP変数を格納するためにzval構造(Cの内蔵データ構造)に格納されている既知の文字列の長さだけを返します。しかし、streen()は関数なので、多少遅くなりますが、関数呼び出しはアルファベットの小文字化、PHPは関数名の小文字化、ハッシュ検索などの多くのステップを経て、呼び出された関数に従って実行されます。場合によっては、isset()技術を使って、あなたのコードを実行することができます。例えば、if(streen($foo)<5){echo'Foo is too shot'(以下のテクニックと比較する)if(!isset($foo{5}){echo’Foo is too shot’はissetを呼び出すのが早いです。後者とは違って、issetは言語構造として、関数検索と小文字化が必要でないことを意味します。つまり、文字列の長さを確認するトップコードには、あまりにも多くの費用がかかりません。34、変数iのインクリメントまたは逓減を実行すると、$i+は+iより少し遅くなります。この違いはPHP特有のもので、他の言語には適用されませんので、CまたはJavaコードを修正しないでください。すぐに速くなることを期待しています。役に立たないです。iより速いのは、3つの命令だけが必要です。i++は4つの命令が必要です。後段のインクリメントは、実際には一時変数を生成します。この一時変数はその後、インクリメントされます。前のインクリメントはそのまま元の値でインクリメントされます。これは最適化処理の一つで、ZendのPHP最適化器が作ったように。この最適化処理をしっかり覚えておくことは、すべての命令最適化器が同じ最適化処理をするわけではないので、優れたコンピュータを備えていないインターネットサービスプロバイダ(ISPs)とサーバーが大量に存在します。35、必ずしも対象に向ける必要はない(OOP)ということではなく、対象に向けてオーバヘッドが多く、方法やオブジェクト呼び出しごとに多くのメモリが消費される。36、クラスですべてのデータ構造を実現するのではなく、配列も有用である。37、方法を細分しすぎないでください。本当に重用するつもりのコードは何ですか?38、あなたが必要とする時、いつもコードを方法に分解します。39、できるだけ大量のPHP内蔵関数を採用する。40、コードに大量の時間消費の関数がある場合、C拡張でそれらを実現することが考えられます。41、検査コードを評価します。検査器はコードのどの部分がどれぐらいかかりましたかを教えます。Xdebug調整器は検査手順を含んでいます。評価検査は全体的にコードのボトルネックを示すことができます。42、mod_zipは、Apacheモジュールとして、あなたのデータを瞬時に圧縮し、データ転送量を80%低減することができます。43、file_が使えます。ゲットするcontenstsがfile、fopen、feof、fgetsなどのシリーズに取って代わる場合は、できるだけfile_を使用します。ゲットする彼の効率はずっと高いからです。でもfile_には注意してくださいゲットするcontenstsはURLファイルを開く時のPHPバージョンの問題です。44、できるだけファイル操作を少なくして、PHPのファイル操作効率も低くないです。45、Select SQL文を最適化し、可能な限り少なくInsert、Update操作を行います。46、できるだけPHP内部関数を使う(しかし、PHPにはない関数を探すために、カスタマイズ関数を書く時間を無駄にしました。経験問題です。)47、循環内部は変数を宣言しないでください。特に大変数:対象(PHPの中で注意すべき問題だけではないようですね?)48、マルチ次元配列は、できるだけ循環ネスティング賦課値49を回避し、PHP内部の文字列操作関数を使用できる場合は、正規表現50、foreach効率をより高くしないで、Whileおよびforサイクル51の代わりにforeachを使用し、ダブル引用文字列52を単引用符で置換し、i+=1をi=i+1に置き換える。c/c++の習慣に合っています。効率が高い53、global変数に対して、使い終わったらunset()を外します。