0

私は Web アプリを構築しています。テスト目的でアプリから始めた方法は、データベースからセッション配列に大量のデータをロードして、ページ全体で値を簡単に使用できるようにすることです。私は1つのページに多数の選択があり、phpページがすべての変数をループするたびに、選択したものを選択し、ドロップダウンを出力します。私の配列の 1 つには 3000 未満の値があり、このドロップダウンをロードすると、ページが約 300 ミリ秒から 1-1.2 秒に遅くなります。ひどくはありませんが、反応が悪いことは簡単にわかります。それで、ロード速度を改善する方法があるかどうか、またはドロップダウンの代わりについて何か考えがあるかどうかを知りたい.

私がこれまでに試したこと:

  1. セッション配列はすべての値を保持します。ページがjquery ajaxメソッドを介してロードされると、phpページはこれらの値をループしてドロップダウンをエコーし​​ます。

  2. Php インクルード - 選択として事前に書き込まれたすべての値の php または html ページを作成します。これにより、問題のドロップダウン用に ~100kb のページが作成され、include. ほぼ同じ量に加えて、JavaScriptを使用して値を設定する必要がありますが、改善できる場合はこれを行います。おそらく、いくつかのキャッシングがここで改善を提供できると思いました。インクルードの場合、htmlページとphpページの間に大きな違いはないように見えましたが、htmlの方が優れていると思います。また、これらのページを含めるためにphp関数を使用しているため、通常のキャッシュを使用できないと想定しています。

  3. 私はhtmlページにロードしようとしましたが、最初のロードで約1秒かかり、ブラウザのキャッシュ後は100〜350ミリ秒に戻ったので、キャッシュがパフォーマンスを大幅に向上させる可能性があると思います.

私は考えました:

  1. ページ全体のキャッシュ バージョンを作成しますが、これを実装するのは非常に面倒なので、これが正しい方法だと人々が考えた場合にのみ実行します。もともとphpエコーで行っていた入力のデータを取得するには、ajaxを使用する必要があります。

  2. 問題のドロップダウンを削除するだけです。

私が明確にしたことがないことを明確にするために、phpページはブラウザーによってキャッシュされることは決してないという考えで正しいのでしょうか。しかし、html メソッドを使用しているため、php ファイルにリンクされている javascript ファイルをキャッシュできるのはなぜでしょうか?

4

2 に答える 2

1

「これまでに試したこと」の 2 の結果に基づいて、送信しているデータの生のサイズに問題があると思われます。ブラウザのキャッシュに頼ることはできないと思います。サーバー側のキャッシュは、送信されるデータのサイズを変更しません。

ページの読み込み中に送信されるデータの量を減らすためのいくつかのアイデアを次に示します。

  1. メイン ページが配信された後、非同期の JavaScript 呼び出しを使用して、選択ボックスを個別に読み込みます。
  2. 選択肢を階層的な一連の選択肢に分割します。ユーザーが最上位のカテゴリを選択すると、別の選択ボックスに一致するサブカテゴリが表示されます。サブカテゴリを選択すると、3 番目のボックスにそのサブカテゴリの実際の選択肢が表示されます。このような もの。もちろん、これは、2 番目と 3 番目のコントロールが非同期 JavaScript 呼び出しを使用して入力されている場合にのみ機能します。

いずれにしても、サーバーで gzip 圧縮が有効になっていることを確認してください。

編集: ブラウザーのキャッシング
の詳細 ブラウザーは個々のファイルをキャッシュします。通常、次回は異なる可能性があるため、PHP ページをキャッシュするように要求することはありません。(個々の php インクルードは、PHP がそれらのコンテンツを HTML ストリームに結合するため、ブラウザーには表示されません。) ブラウザーの開発者コンソールを使用する場合 (たとえば、Chrome で f12 を押して [ネットワーク] に移動)、ほとんどのページで複数の原因が発生することがわかります。ブラウザからサーバーへのリクエストであり、これらのファイル (js、css、画像) の一部がキャッシュから取得されていることがわかる場合もあります。

Cache-Controlブラウザがキャッシュする内容とその期間は、やなどのさまざまな HTTP 応答ヘッダーによって制御されますExpires。関数を呼び出してこれらを php でオーバーライドしない場合header、それらは Web サーバー (Apache) 構成によって制御されます。

于 2012-10-23T23:39:36.933 に答える
1

ドロップダウンに返されて解析されるデータは、おそらくボトルネックです。ただし、ボトルネックが実際に PHP コードである場合は、 http: //php.net/manual/en/book.apc.php で APC などの optcode キャッシュをインストールしてみてください。これにより、PHP が高速化されます。(Zend Optimizer はhttp://www.zend.com/en/products/guard/runtime-decodersでも入手できます)

ボトルネックがドロップダウン内の項目の取得元のデータベースである場合は、MySQL を設定して結果をキャッシュすることをお勧めします。

また、AJAX を使用して、ユーザーが一度にいくつかのレコードを下にスクロールするときにドロップダウンにデータを入力する別のドロップダウンを試すこともできます。また、入力時に一致する可能性のあるものをユーザーに求めるテキスト フィールドとして作成することもできます。これらのことはより速いかもしれません。

于 2012-10-23T23:50:31.303 に答える