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);
});

我已经尝试删除条件,转到一个绑定,甚至插入硬值只是为了继续它的滞后。也许将一些变量移出绑定函数?将实际的计数器过程也变成一个函数?

4

2 回答 2

0

您将希望尽可能多地移动查找元素,并且仅在必要时运行删除类。(在找出确定是否有必要的有效方法之前,值得尝试消除重复搜索。)

于 2011-09-09T09:52:17.017 回答
0

我在这里做了一个例子:http: //jsfiddle.net/zpjc6/

对我来说工作得很快(虽然是铬)。我还通过将跨度保存在变量中进行了小幅改进。虽然这样做是一种很好的做法,但它不应该那么昂贵。但也许它有帮助。

编辑:也许你可以链接到你的实际网站?

于 2011-09-09T09:58:02.213 回答