2011-09-09 8 views
0

私はJQueryライブラリで使用する文字カウンタをTwitterカウンタと同様の効果を残して作成しました。しかし、私は気づいたことがあります少なくともFireFoxはそれを扱うのに荒い時間があります(他のブラウザはいくつかの歪みを示していますが、悪くはありません)。基本的には、安定したペースでタイピングしながら、「追いつく」ようになり、追いつくまでブラウザが反応しなくなる。 Twitterのテキストボックスで同じ入力速度を試してみると、全く減速しません!テキストフィールドカウンタが遅いです

私はこのボックスを監視する自動サイズ変更プラグインを持っていますが、私はこのコードだけがスローダウンを引き起こしていることを見つけるために多くの削除と変更を試みました。だから、ブラウザが特定の時間に処理するのはあまりにも数学的な計算であると思うかもしれませんが、私は本当にこれがどれほど単純かに問題があるのか​​、また解決策を考えることはできません。

/* Post Saying text count */ 
var postSayingLimit = 450; 
$('span.counter').text(postSayingLimit); 
$('#post-saying').bind('keyup keypress', function() { 
    var postSayingUsed = $(this).val().length; 
    if(postSayingUsed >= postSayingLimit - postSayingLimit/10) { 
    $(this).parent().find('span.counter').addClass('counter-limit'); 
    } else { 
    $(this).parent().find('span.counter').removeClass('counter-limit'); 
    } 
    var postSayingCount = postSayingLimit - postSayingUsed; 
    $(this).parent().find('span.counter').text(postSayingCount); 
}); 

私は、条件付きを削除し、1つのバインディングに行って、ハード値を挿入して遅れを継続しようとしました。たぶんbind関数からいくつかの変数を移動するのでしょうか?実際のカウンタープロセスを関数にすることもできますか?

答えて

0

私はここに例作っ:http://jsfiddle.net/zpjc6/

が私のために高速に動作する(クロムしかし)。私はまた、変数にスパンを保存することで少し改善しました。そうするのがよい練習ですが、そのが高価です。 しかし、おそらくそれが役に立ちます。

編集:あなたの実際のサイトにリンクできますか?

+0

いくつかの制限のために、私は公開のコピーを提供することはできませんが、私は与えられた事前に作業しています。それは、予想通り、遅れを増加させるDOMと追加のJSの量です。しかし、ラグを増やすように見えるのは2つのキーの束縛です(これは一般的にタイプを入力している間にJSを2回実行しているのでわかります)。カウンタが更新される方法の両方の理由でバインドを行います(キーを押したままにするとキーアップが機能しませんが、キーを押すと常にselect all + deleteで更新されるわけではありません) –

+0

私が考えている解決策はkeyupとkeypressを別々の機能に束縛していますが、まったく異なる解決策を模索するかもしれません。ちなみに、これであなたの助けてくれてありがとう! –

0

可能な限り多くの要素を見つけ出し、必要に応じてクラスを削除したいだけです。 (それはしかし必要ですかかどうかを決定する効率的な方法を考え出す前に、それだけで繰り返し検索を廃止しようとする価値はあります。)

+0

ええ、あなたがそれを言いますと、各キーアップ/プレスでfind()が提供されるたびにdomを再チェックしているので問題になるようです。しかし、変更にはまだ遅れがありますが、コードをもっとクリーンアップしました。ありがとう! –