1

私はこの主題に関して何か役に立つものをグーグルで検索することができないので、この主題を扱っている記事へのリンクか、ここでの直接の答えのどちらかが良いです。

訪問者が非常に多いサイトでPHP/MySQLの検索システムを実装しているので、訪問者が検索フィールドに入力できる文字の長さと必要な最小時間にいくつかの制限を実装します。 2つの検索の間。私はこれらの問題に少し慣れておらず、これが通常行われる「本当の理由」を本当に知らないので、データベースが返す結果の数を最小限に抑えるために文字の最小長が実装されているというのは私の仮定だけです。また、検索間の時間は、ロボットが検索システムにスパムを送信してサイトの速度を低下させるのを防ぐために実装されています。そうですか?

そして最後に、2つの検索間の最小時間をどのように実装するかという問題です。私が思いついた解決策は、擬似コードで、これです

  1. 検索フォームが送信されるURLにテストCookieを設定します
  2. 検索結果を出力するURLにユーザーをリダイレクトします
  3. テストCookieが存在するかどうかを確認します
    • そうでない場合は、検索システムの使用が許可されていないという警告を出力します(おそらくロボットです)。
  4. 最後の検索時刻を示すCookieが存在するかどうかを確認します
    • これが5秒未満の場合は、再度検索する前に待機する必要があるという警告を出力します
  5. 探す
  6. 最後の検索時刻を現在の時刻に設定するCookieを設定します
  7. 検索結果を出力する

これはそれを行うための最良の方法ですか?

これは、Cookieを無効にしている訪問者が検索システムを使用できないことを意味することを理解していますが、それは最近本当に問題ですか?2012年の統計は見つかりませんでしたが、2009年に3.7%の人がCookieを無効にしたというデータを見つけることができました。それほど多くはないようで、最近はもっと少なくなるはずです。

4

2 に答える 2

0

「データベースが返す結果の数を最小限に抑えるために、文字の最小長が実装されているという私の仮定のみ」。あなたの仮定は絶対に正しいです。ユーザーに検索対象を考えさせることで、潜在的な結果の数を減らします。

ボットが検索をスパムする限り、キャプチャを実装できます最も頻繁に使用されるのはキャプチャです。キャプチャをすぐに表示したくない場合は、ユーザーが検索を送信した回数を(セッションを介して)追跡できます。特定の時間枠内にX回の検索が発生した場合は、キャプチャをレンダリングします。

SOやthechive.comのようなサイトがこのタイプの戦略を実装しているのを見てきました。キャプチャはすぐにはレンダリングされませんが、しきい値に達するとレンダリングされます。

于 2013-03-21T00:33:20.140 に答える
0

このようにして、検索エンジンが検索結果にインデックスを付けるのを防ぎます。これを行うためのよりクリーンな方法は次のとおりです。

  1. 検索が開始されたIPを取得する
  2. そのIPをmemcachedなどのキャッシュシステムに保存し、クエリが実行された時刻
  3. 別のクエリが同じIPから送信され、x秒未満が経過した場合は、単にそれを拒否するか、ユーザーを待機させます

パフォーマンスを向上させるためにできるもう1つの方法は、アナリティクスを調べて、最も頻繁に行われるクエリを確認し、それらをキャッシュすることです。これにより、リクエストが届いたときに、完全なdbクエリや解析などを行わずに、キャッシュされたバージョンを提供します。 。

もう1つの単純なオプションは、スクリプトを1日に1〜2回実行して、すべての一般的なクエリを実行し、ユーザーがデータベースをヒットする代わりに特定の検索クエリを実行するときにヒットする静的HTMLファイルを作成することです。

于 2013-03-21T00:33:27.837 に答える