javascript - 使用 JavaScript 将 HTML 内容附加到 div 的最快方法

标签 javascript html performance dom

我有一个使用 AJAX 从服务器检索消息的 HTML 页面。我通过设置其 innerHTML 属性将这些消息附加到 a 中。

这在文本量较小时工作正常,但随着文本量的增加,它会导致 Firefox 使用所有可用的 CPU,并且消息速度变慢以致于爬行。我不能使用文本框,因为我希望某些文本以颜色突出显示或使用其他 HTML 格式。有没有更快的方法来执行此操作而不会导致浏览器锁定?

我也尝试过使用 jQuery,但从我读到的内容来看,设置 .innerHTML 比它的 .html() 函数更快,而且根据我自己的经验,情况似乎也是如此。

编辑:感知性能不是问题 - 消息在返回时已经被写入(使用 Comet)。问题是浏览器开始锁定。内容量不是很大——400-500 行似乎就可以了。该 div 中没有 div。整件事都在一张 table 里,但希望这无关紧要。

最佳答案

您明确表示您正在附加意味着您将其附加到同一个父级。你在做类似的事情吗:

myElem.innerHTML += newMessage;

myElem.innerHTML = myElem.innerHTML + newMessage;

因为这是非常低效的(参见这个基准:http://jsben.ch/#/Nly0s)。它会导致浏览器首先执行一个非常非常大的字符串连接(这从来都不好),但更糟糕的是必须重新解析插入并呈现您之前附加的所有内容。比这更好的方法是创建一个新的 div 对象,使用 innerHTML 放入消息,然后调用 dom 方法 appendChild 将消息插入新创建的 div。然后浏览器只需插入并呈现新消息。

关于javascript - 使用 JavaScript 将 HTML 内容附加到 div 的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1387433/

相关文章:

html - 将鼠标悬停在菜单元素上时更改元素的布局

performance - 为什么纹理查找比直接计算慢得多?

MySQL InnoDB : what are the units for "reads/s"?

c++ - 如何解决 QPixmap(大型绘图作业)的性能问题?

html - CSS删除线与文本不同的颜色?

javascript - AngularJS 对象在 Controller 方法中丢失值

javascript - Rails respond_to 格式 - 需要 .js 扩展名?

javascript - jQuery中如何获取窗口滚动位置的偏移量

javascript - 如何在注册方法上显示 Firebase Auth 错误?

javascript - 如何在评论多的时候让评论区自动滚动