我正在使用固定大小(不会自动增长)文本区域在 html 中实现一个简单(不丰富)的文本编辑器。我制作了一个分页系统,可以拆分文本以适应该文本区域。对于相对较大的文本(20 页 = 20 个文本区域),这 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 的文本(19pages),该函数被调用 187 次(每页 10 次),firefox 的时间约为 100 毫秒,chrome 和 opera 的时间约为 60 毫秒,IE 的时间约为 200 毫秒。在这 100 毫秒中,大约 40 毫秒用于将文本分配给文本区域(.value = blabla),其余 60 毫秒用于检查滚动高度是否大于客户端高度。因此,99% 的时间都花在了那里。
这看起来并不多,但确实如此。为什么 ?因为我需要每次用户在 textarea 中键入(按一个键)调用该函数,以便相应地应用新文本。用户可以键入字母、退格、删除、回车等等。因此,对于每个 keydown,我再次调用 paginate 函数来计算适合 textarea 的新文本。这使得打字非常慢,因为每个按键都有 100 毫秒的延迟。
所以我想知道是否有优化将文本分配给文本区域或检查滚动高度,或者完全不同的方式。
提前感谢您的所有建议。
请不要建议让 textarea 自动增长,它不在要求中。
编辑:使 while() 循环更清楚地了解它的作用。