24

タイトル、URL、日付、カテゴリのみを含む投稿のリストを返すajax検索フィールドを備えたワードプレスサイトがあります。

毎回最大10件の結果が表示されるように、結果をページ分割したいと思います。

私の疑問は、ページがめくられるたびに異なるリクエストを行うのが良いのか、それともすべての投稿をフェッチしてjavascriptを介してページネーションを管理するのに1つのリクエストだけを行うのが良いのか(応答はi JSONです)?

応答が軽い場合と大きい場合のどちらで、小さなリクエストを頻繁に行う方がよいでしょうか。

私は、サイトライフの初めに最初の解決策が最良の解決策であると思います。サイトの成長に伴うスケーラビリティについてはよくわかりません。

どう思いますか?

更新:私はいくつかの非常に良い答えを受け取りました、問題のより多くのユーザーインターフェース側に対処していました。

Hwrパフォーマンスの観点からもっと焦点を当てていただきたいと思います。私のサイトは共有サーバー上にありますが、サイトは国際的な露出を受けるため、トラフィックは急速に増加すると予想されます。私の恐れは、wordpressがajaxリクエストから生じるオーバーヘッドの増加に対処できないことです。

では、質問に戻ると、サーバーの総負荷、多くの小さな要求、要求された結果ページのみをロードする、またはすべての結果を含む大きなページをロードする方がよいでしょうか。

私が思うすべてのユーザーが最初に私が思うすべての結果ページをチェックしようとしているわけではないことを考えると...

4

5 に答える 5

21

正解は「状況によります」です。

既知の量(1ページあたり10件の結果、10ページの結果)を処理していて、それらすべてをできるだけ早くユーザーが利用できるようにしたい場合は、500ミリ秒でチャンク(10または20)をダウンロードすることをお勧めしますタイマーかそれに類似したもの。

次に、余分なバックページを非同期で埋め、それに応じて「total-pages」コントロールを更新できます。

そこから、ユーザーはすぐに結果を得ることができ、2秒以内にすべてのデータ間を行き来することができます。

すべてのデータにすぐにアクセスできる必要があるサイトがあり、表示する必要のある結果が40ある場合は、大きなダンプを使用します。

無限スクロールのサイトがある場合は、2、3ページの長さを取得する必要があります。Twitterのようなものの場合、おそらく、画面の高さに対して、コンテナーの平均の高さを事前に計算します。次に、3〜4画面の長さのツイートをダウンロードします。そこから、ユーザーが2番目または3番目の画面(またはそれぞれ3番目または4番目)にスクロールしているときに、次のバッチをダウンロードします。

したがって、私のイベントはonscrollにアタッチされている可能性があります。これは、実行が許可されているかどうかをチェックします(前回の実行から少なくとも16ミリ秒経過している場合は、明らかに、まだスクロールしています)。その後、どこにあるかをチェックします。画面の高さ、および最後のバッチの全高(screen_bottom >= latest_batch.height * 0.75)などを考慮して、下部にどれだけ近いかという点で。screen_bottomはlast_batchを基準にしており、ユーザーが前のバッチよりも上にスクロールして戻った場合、screen_bottomは完全に負の数になります。

...またはそれらを正規化して、パーセンテージだけを処理するようにします。

データが常にそこにあるように感じさせるには十分です。開始時に大きなブロックがロードされるのを待つ必要はありませんが、移動しようとしている間も小さなブロックがロードされるのを待つ必要はありません。

それで、あなたがしていることに基づいて、そしてユーザーがあなたのデータをどのように使用することを期待するかに基づいて、幸せな媒体が何であるかを理解してください。

于 2012-08-30T16:52:38.170 に答える
4

この決定には、ユーザーがサイトをどのように操作するか (検索結果の数やクエリの方法など) と、「平均的な検索結果」の大きさの 2 つの要因があります。何千もの投稿と一般的な検索用語がある場合、「大きなもの」の道を進むと、非常に大きな結果セットが得られる可能性があります。ユーザーがこれを頻繁に参照する傾向がある場合、ページが読み込まれるたびにリクエストを行うと、大量のリクエストが発生します。

一般的な答えはありません。これは、アプリケーションとユーザーの検索パターンに大きく依存します。一般的に、私は仕事をする最も単純なことを行いますが、ユーザーの操作 (クエリと結果サイズのログなど)、サイトのパフォーマンス (Google アナリティクスの読み込み時間など)、サーバーの負荷 (munin など) も監視します。 ) をページに追加します。問題が発生した場合でも、この時点からアプリケーションを最適化できます。その時点までに、ユーザーとアプリケーションについてよりよく理解できます。

于 2012-08-30T16:33:50.237 に答える
3

さて、まずは。AJAX が通常のページロードが作成するものと同じ投稿クエリを作成している場合、ページロードをシミュレートできます。つまり、一連の投稿 (多くの投稿があるページなど) をクエリし、すべてのデータを JS に送信して、ページネーションを処理させます。

もちろん、すべての投稿を一度に送信することはできないため、使用可能なページ数を処理する必要があります。そのため、一度にページに相当する量の投稿をクエリする方が良いと思います。通常の WP の動作は、投稿 ID を返すクエリを作成し、ページ内の各投稿に対して投稿全体のクエリを作成することです。

サイトを最適化したい場合は、キャッシュプラグインをインストールしてください。すべての DB クエリを HD にキャッシュし、同じクエリを再度作成する代わりにこれらのファイルを使用します。

于 2013-01-08T13:10:24.850 に答える