文本编辑器在textarea SLOW - javascript

时间:2012-09-18 07:02:06

标签: javascript html textarea

我正在使用固定大小(不会自动增长)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()循环更清楚它的作用。

0 个答案:

没有答案