0

すべての製品名をロードするためにクラス 'chosen-select' を使用しています。ユーザーが product_select をクリックすると、ロードに時間がかかります。パフォーマンスを向上させるためにできることは何ですか。

<select class='chosen-select' data-placeholder="Choose a product..." id="product_select">
  <option></option>
         <?php
          include 'connection.php';

           $query = "SELECT * FROM " . $table_name;

           $result = mysqli_query($con, $query);

           $results = array();
           while ($line = mysqli_fetch_assoc($result))
           {
                   $results[] = $line;
           }
           $i = 0;
           foreach ($results as $r)
           {
               $i++;
               echo "<option value=" . $r['id'] . ">" . $r['Product_name'] . "</option>";
           }
          ?>
</select>

<script>
     $('#product_select').chosen({max_selected_options: 1});

</script>
4

1 に答える 1

2

あなたがすべきこと

ユーザーの正気を保つためだけに、これほど多くのオプションを一度に提供するのはおそらく良い考えではありません。私だったら、オートコンプリート モデルに切り替えるか、ユーザーがリクエストする前にオプション リクエストをサブセットに絞り込む方法に切り替えると思いますが、最適化に使用できるヒントをいくつか紹介します。

あなたにできること

jQuery プラグインを自分で書き直さずに最適化できる唯一のポイントは、サーバー側を改善することです。これには、(Samuel Liew が述べたように) サーバーの応答をキャッシュすることも含まれますが、データベースへの接続を改善することもできます。つまり、リモートではなくローカル データベースを処理していることを確認してください。より高速なクエリに役立ついくつかの簡単な手順:

ターゲット フィールドを使用するのではなく指定すること*で、行数が多い場合に役立つ場合があります。

mysql クエリの最適化に関する 15 のヒント

データベース/テーブルのタイプを変更するだけでも効果があります。たとえば、ハードウェアのディスク書き込み速度/効率が低い場合は、テーブルを完全にメモリから実行してみてください。ただし、これらの種類のオプションを使用するには、データベース サーバーとデータベース構成を十分に制御する必要があります。共有ホストを使用している場合、多くのことを実行できる可能性は低いです... MySQL を使用するかどうかを選択できる場合があります。またはSQLiteでも、ディスクベースのデータベースをよりメモリベースのデータベースに切り替えるには十分かもしれません. 専用サーバーを実行している場合、MySQL を最適化するためにできることはたくさんありますが、多くの読み取りが必要です (複雑なテーマです)。この SO スレッドは、MySQL でできることのいくつかを示唆しています。 :

最適な MySQL 構成 (my.cnf)

役立つかもしれないことの 1 つは、データベース インスタンスのメモリ量によって異なりますが、クエリで HTML を作成することです。複雑なクエリにはこれをお勧めしませんが、生成するものは非常に単純です。以下は、MySQL の使用を前提としています。

SELECT 
  GROUP_CONCAT(
    '<option value="',id,'">', name, '</option>' SEPARATOR ''
  ) AS html
  FROM $table_name 
  GROUP BY NULL

必要な HTML を PHP に戻すデータベースを取得したら、この結果を別の db テーブルにキャッシュするか、ローカル ファイルシステムのファイルとしてキャッシュすることができます。次に、このオプション リストの次のリクエストでは、代わりにキャッシュされた場所からサービスを提供する必要があります — そして、プレフィックスの有効期限が切れるまで (またはキャッシュが削除されるまで)、サービスを提供し続けます。

次のリンクは大まかなプロセスを説明しています。必要に応じて、データベースから返された結果を書き込むだけです。ob_get_contents()ただし、これはサーバー側キャッシュの 1 つの方法にすぎません。

PHP での簡単なサーバー側キャッシュ

クライアント側のキャッシュ

この入力を表示する頻度、またはユーザーが遭遇する頻度に応じて、オブジェクトを使用してクライアント側 (それをサポートするブラウザー用) で最適化することもできwindow.localStorageます。これにより、AJAX 選択リクエストを行う直前に localStorage のチェックを入れることができます。すでにオプション html がそこに保存されている場合は、代わりにそれを使用してリクエストを完全に切り取ることができます。5M の非公式のストレージ制限があるようですlocalStorageが、これは 50000 個のアイテムをカバーするはずです。これは明らかに、ユーザーの最初の訪問を高速化するものではありませんが、その後の訪問はかなり改善されるはずです。また、データベース テーブルが更新された場合にキャッシュをクリアする方法にも注意してください。

于 2013-08-26T08:23:22.303 に答える