2012-01-23 5 views
1

This question's answers提案すると、テキストボックスの内容が変更された場合にすぐに(ぼかしを待つことなく)すぐに検出できる信頼性の高い方法としてwindow.setIntervalキープレス以外のテキストボックスのコンテンツが変更されたかどうかを検出するバッテリに優しい方法

私のデスクトップPCでさえ、いくつかのテキストボックスをチェックする比較的シンプルなハンドラで実行される500ミリ秒のsetIntervalで、IEまたはFirefoxがCPUの些細な部分を噛み砕いているのが分かります。これはデスクトップPCでは問題ありませんが、ラップトップや携帯電話ではバッテリーの寿命に悪影響を及ぼします。

jqueryを使用してCPU使用率を最小限に抑えながら、テキストボックスへの変更(クリップボードの貼り付け、Ajaxの更新などを含む)に対する応答を高速に提供するにはどうすればよいですか?

答えて

4

onBlurは、オブジェクトを必ずしも変更せずに移動した場合です。

onChangeは、値を変更したオブジェクトから移動した後にのみ呼び出されます。

お客様のニーズに合わせてください。そうでない場合、さまざまなキー押下イベントが各文字の変更のたびにトリガーされます。

これは、定期的に1つのjavascript変数を更新しても、セレクタがいくつかの奇妙なDOM動作を引き起こしていないかぎり、処理能力を最大限に引き出すことはできません。

これを試してください:idで要素を参照し、その参照をjs変数に格納します。この参照を介して別の変数を更新および変更するのは簡単な操作です。

+0

私はあなたの提案を実装し、メインCPUの問題を発見しました。これは、要素のtext()を繰り返し設定する結果となる比較バグです。テキストが古いテキストと同じであっても、それを更新するために1つのCPUコアの50%を占めていました。 IE9は現在1%未満です。しかし、Firefoxは、最も単純な可能なセレクタを使ってDOMから読み込むだけで、まだ2%-3%を取っています(そしてjs変数でもキャッシュします)。私は@ andiの提案も必要としているということをさらに引き下げる必要があります。私はあなたの答えの両方をアップ投票しています。私は両方とも受け入れることができれば幸いです! –

2

テキストボックスのフォーカスを合わせてwindow.setInterval(またはsetTimeout)チェッカーを実行し、ぼかしでそれを強制終了します。そうすれば、カーソルがテキストボックスにないときにCPUパワーを使い果たすことはありません。

+0

これはうまくいくが、悪いセレクタがないかぎり、この操作で測定可能な時間がかかる理由は考えられないので、私は推薦していない。 – mvrak

+0

私は同意します、この操作はまず悪いことではありません。私はちょうどこの男の質問に答えています...極小の問題への微妙な改善。 =) – andi

関連する問題