2017-07-09 16 views
1

私はちょうど検索機能を持つウェブページを作成し、すべての検索で私は提案をもたらすデータベースクエリがあります。しかし、私がこのonkeyup fucntionを何度も発したとき(私は10〜20時間を意味する)、tryping中に何度も解雇されているので、ウェブサイトの過ちを犯した後、エラーページ、standart google choreエラーページ(php何が間違っているかを説明するエラーページ)、1分後にすべて正常になります。あなたは何か考えていますか?PHP検索funtionは私のウェブサイトを崩壊させます

ありがとうございます。

+2

キーアップ時に盲目的にイベントを発生させるのは悪い習慣です。キーアップ検索が本当に必要な場合は、javascriptで0.5秒のタイムアウトを追加し、次のkeyupイベントで「上書き」(クリアして別のものを設定)する必要があります。また、新しいAjaxリクエストが発生した場合は、前のAjaxリクエストを中断します。 – apokryfos

+0

@apokryfosあなたの答えをありがとう。私はあなたが話していることを理解しています。私は今試してみます。私はあなたに結果を知らせます。 –

答えて

0

@apokryfosは彼のコメントの通りです。

あなたのonkeyupイベントハンドラは、何らかの形でMySQLクエリを開始します。おそらく、ユーザーのブラウザからphpページへのajax形式のリクエストを経由します。 MyQLクエリが完了してその結果セットをブラウザに返す前に、次のイベントハンドラが別のクエリを開始します。

MySQLクエリが(通常のPHP実装で)開始されると、完了まで実行されます。これは、クエリーの実行中にユーザーがブラウザからPHPへの接続を閉じても当てはまります。あなたのユーザが速く多くのクエリを実行できるのであれば、それらのクエリはリソースがなくなるまでMySQLサーバに蓄積されます。

ここには潜在的な悪循環があります。ユーザーは「多分私の要求は通りませんでした」と思ってもう一度クリックします。

jQueryUIオートコンプリートウィジェットには、リクエストが送信される頻度を制御するためのdelayパラメータがあります。 http://api.jqueryui.com/autocomplete/#option-delay私の経験では、1〜2秒に設定すると高品質のユーザーエクスペリエンスが得られます。このようなウィジェットを使用すると便利です。他の誰かがすでに遅延のために使用されているJavaScriptタイムアウトの複雑さをデバッグしました。

関連する問題