2

私はphpが初めてです。最高のパフォーマンスを得るために、この PHP コードを最適化する最善の方法を教えてください。

 $data = mysql_query("SELECT * FROM wcddl_recents ORDER BY id DESC LIMIT 15");
$searchai = mysql_fetch_array( $data );
while($searchai = mysql_fetch_array($data)) {
$searchai[query] = strip_tags($searchai[query]);
    $searchai_clean = str_replace(array("/","\\","'",'"',"<",">","-","+","%","@","%20","(",")",":","[","]","{","}","?","!")," ",$searchai[query]);
    $searchai_cleandvigubai = str_replace(" ","-",$searchai_clean);
    $searchai_cleandvigubaix = str_replace(array("---","--"),"-",$searchai_cleandvigubai);
    $searchai_cleandvigubai2 = strtolower($searchai_cleandvigubaix);
4

3 に答える 3

2

最適化クラブのルールに注意してください:

  1. 最適化クラブの最初のルールは、最適化しないことです。
  2. 最適化クラブの 2 つ目のルールは、測定せずに最適化しないことです。
  3. アプリが基になるトランスポート プロトコルよりも高速に実行されている場合、最適化は終了しています。
  4. 一度に 1 つの要因。
  5. マーケットロイドもマーケットロイドのスケジュールもありません。
  6. 必要な限り、テストは続行されます。
  7. これが Optimization Club での最初の夜である場合は、テスト ケースを作成する必要があります。

あなたが注意を払う必要がある2つの大きなものは、#2と#3です.

まず、測定せずに最適化しています。そのコード ブロックのどの部分に最も時間がかかっているかはまだわかりません。そのためには、xdebug などの通知ツールが必要です。それができない場合は、各ステートメントの後に PHP の関数を呼び出して、microtime()各ステートメントの実行にかかる時間を計算します。

提供されている回答のほとんどは、文字列関数を高速化する方法を提供しているようですが、SQL 関数を呼び出して行を返すのに費やされた時間は、これらの文字列関数の実行時間を大幅に短縮することに間違いありません。たとえば、コード全体が 1000 ミリ秒で実行され、SQL 呼び出しに 970 ミリ秒かかり、文字列関数に 30 ミリ秒かかる場合、文字列関数の速度を半分にしても、節約できるのは 15 ミリ秒だけです。

SQL 呼び出しがボトルネックであると仮定して、それらを高速化するために何ができるかを見てください。SQL クエリは必要なインデックスを使用していますか? ID 列はインデックス化されていますか?

正しい PHP 関数を使用していますか? mysql_*データベースに 15 回ヒットするのではなく、結果のすべての行を 1 回のバッチで返す関数はありますか? さらに言えば、mysqli_またはpdo_関数のセットはどういうわけか高速ですか? 関数はmysql_公式に非推奨です。(大きな赤いボックスを見て、代替案について読んでください。)

最後に、どれくらい速くする必要がありますか? 今実行に 10 秒かかる場合、どれくらい速く実行したいですか? 9秒で十分ですか?それとも、1 で実行する必要がありますか? 探している種類のスピードアップを得ることさえできないかもしれません。

tl;dr:コードの高速化を試みる前に、遅い部分を調べてください。

于 2012-09-07T21:32:24.287 に答える
0

これはどう?変数が少なく、効果的に、strip_tagsと一緒に最初のステートメントでstrtolowerを使用できます。

複数の文字をスペースに置き換えてから、スペースをダッシュ​​に置き換えます。2つを組み合わせるのもよいでしょう。また、クリーンな交換品からダッシュを取り外します。Microsoftの二重ダッシュでない限り、スペースに置き換えられてから再びダッシュになります。ただし、Microsoftの二重ダッシュの場合は、以下の例で再度追加できます。

$searchai[query] = strtolower(strip_tags($searchai[query]));
$searchai_clean  = str_replace(array("/","\\","'",'"',"<",">","+","%","@","%20","(",")",":","[","]","{","}","?","!"),"-",$searchai[query]);
$searchai_cleandvigubaix = str_replace(array("---","--"),"-",$searchai_clean);
于 2012-09-07T21:14:51.543 に答える
0

最適化しないでください。プロファイリングします。

XDebugなどのプロファイラー ツールを使用して、コードのどの部分の実行に最も時間がかかるかを調べます。コードのどの部分に最も時間がかかるかがわかれば、それらの部分に集中できます。

コードのこれらの特定の領域を高速化するための少量の作業は、端をいじるのに数か月かかるよりもはるかに大きな効果があります。

実際、大量のトラフィックがあるサイトで作業していて、帯域幅を可能な限りすべて節約する必要がない限り、人々が「最適化」と呼ぶエッジをいじっても、目に見える効果はほとんどないでしょう。

要するに: 何が遅いのかを調べてください。それを修正します。残りは気にしないでください。

于 2012-09-07T21:59:29.550 に答える