我正在使用固定大小(不会自动增长)textarea在html中实现一个简单(不丰富)的文本编辑器。我制作了一个分页系统,将文本拆分以适应textarea。对于相对大的文本(20页= 20 textareas),这20个页面的功能总共需要大约100毫秒(如果文本较少,则较少)。逻辑是这样的:
function paginate() {
clienth = textarea.clientheight;
while (maxTextSize>minTextSize+1) {
textarea.value = text;
// a binary subdivision algorithm which runs in logarithmic time
if (textarea.scrollheight>clienth) {
text = newsmallertext;
} else {
text = newbiggertext;
}
maxTextSize = newvalue1;
minTextSize = newvalue2;
}
}
因此对于大约14 KB的文本(19页),该函数被调用187次(每页10次),firefox的时间约为100ms,chrome和opera的时间约为60ms,IE的约为200ms。在那些100ms中,大约40ms用于将文本分配给textarea(.value = blabla),其余60用于检查滚动高度是否大于客户端高度。因此,99%的时间都花在那里。
这不是很多,但确实如此。为什么?因为我需要每次都调用该函数,用户在textarea中键入(按键)以相应地应用新文本。用户可以键入字母,退格键,删除键,按Enter键等等。因此,对于每个keydown,我再次调用paginate函数来计算适合textarea的新文本。这使得键入非常慢,因为对于每个按下的键,延迟为100毫秒。
所以我想知道是否有优化将文本分配给textarea或检查scrollheight,或者完全不同的方式。
提前感谢您提出的所有建议。
请不要建议让textarea自动增长,这不符合要求。
编辑:使while()循环更清楚它的作用。