2012-04-14 27 views
-2

私はPHPの教祖ではない、あなたの助けが必要です。PHPスクリプトの最適化

私は選択メニューのPHPフォームを持っています。メニューは顧客テーブルの電子メールから形成される。私は次のコードを使用しました:

for($i = 0; $i < sizeof($customers_table); $i++){ 
    echo '<option value="'.$customers_table[$i]['id'].'">'.$customers_table[$i]['email'].'</option>'; 
} 

ベースがかなり大きいので、オプションフィールドの作成に時間がかかります。より高速に動作するようにスクリプトを最適化する方法はありますか?

ありがとうございます。

+1

オートコンプリートを使用していない限り、選択ボックスに何千ものオプションがあるのは間違いありませんか? – Andy

+0

for文の中に 'sizeof()'を作成せず、代わりにその値を持つ変数を作成して、ループ呼び出しごとに呼び出されることはありません。しかし、それはそれほど大きな影響を与えないマイクロ最適化です。私はPHPがそのような弱点を補完すると考えているからです。あなたはより大きな範囲であなたのスクリプトを見なければなりません。 –

答えて

1

サイズは、それを保存し、変更されませんので:

$size = sizeof($customers_table); 
for ($i = 0; $i < $size; $i++) { 
    echo '<option value="'.$customers_table[$i]['id'].'">'.$customers_table[$i]['email'].'</option>'; 
} 

次にあなたがループ条件を短縮し、配列アクセスを減らすことができます。

$i = $size = sizeof($customers_table); 
while ($i) { 
    $table = $customers_table[$size-$i--]; 
    echo '<option value="'.$table['id'].'">'.$table['email'].'</option>'; 
} 

次の部分は、ちょうどすることができますecho文であります出力する前に文字列をconcatenatingする代わりに出力します。

$i = $size = sizeof($customers_table); 
while ($i) { 
    $table = $customers_table[$size-$i--]; 
    echo '<option value="', $table['id'], '">', $table['email'], '</option>'; 
} 

diffeあなたはメートル法が必要です。最も時間がかかるのは、ブラウザに送信するHTMLの量です。しかし、それはこの断片の範囲外です。私はforeachを使用することをお勧めし、コードの全体的な読みやすさ向上のために

:一般

foreach ($customer_table as $row) 
{ 
    echo '<option value="', $table['id'], '">', $table['email'], '</option>'; 
} 

これは、同様にかなり速いです。

+0

これは最適化してもよろしいですか? – Starx

+0

@Starx:ええ、絶対に。 sizeofまたはcountを呼び出すのはかなり高価です。とにかく、最適化はあなたが実際に違いを感じることはできませんマイクロです^^ – hakre

0

Andy氏によると、このスクリプトをこのように最適化することは好ましくありません。 時間を大幅に変更したい場合は、問題を再考する必要があります。

お客様のリストがありますが、時間的に問題がある場合は、たくさんあると思います。したがって、ドロップダウンリストはユーザーにとっては役に立たないでしょう。他のソリューションは、より効率的で、あります

:キャッシュのようなものを使用して

  • > HTMLコードは常に、あなたが追加したときにだけ、一回のループを行う必要があるので、同じものを削除または更新しますhtmlコードをスクリプトまたはデータベースに格納することができます。したがって、ページがリロードされるたびに、htmlコードを取得するだけで済みます。
  • すべての顧客を読み込まない>関心のある顧客だけを表示する必要はないため、ユーザーが入力中にオプションを読み込むことができます(例:jQuery Autocomplete

これらのソリューションは最適化に最適です。それらを組み合わせると(3文字以上のキャッシングとオートコンプリートも)、ユーザーエクスペリエンスにも優れています。