javascript - 为什么 .html() 在用于相同目的时比 .text() 快得多?

标签 javascript jquery performance dom jsperf

我正在研究 jQuery 的 .text().html() 方法并运行 some simple jsPerf tests ,当我惊讶地发现 .html() 在检索文本时几乎快了一个数量级:

  • $div.text() – 88,496 次操作/秒
  • $div.html() – 592,028 次操作/秒

当结果相同时,为什么 .text().html() 慢很多? .text() 执行哪些操作 .html() 会跳过以解释这种差异?

我知道每种方法都有不同的目的;我很好奇它们用于相同目的的情况。

最佳答案

它与所需的解析量有关。 .text() 较慢,因为它必须解析内部 HTML 并去除任何内部标签。 .html() 只是抓取(或者,如果您正在设置内容,则删除)那里已经完成的任何内容。

可以看到the source for .text() here (第 123-144 行)和 the source for .html() here (第 404-441 行)。当简单地获取(而不是设置)一个值时,.text() 有递归,但是 .html() 做一个简单的 return elem.innerHTML; 因此速度要快得多。即使将它用作 setter,.html() 也更简单。

另请注意:即使您将两者都用作 setter 并仅传递纯文本,.html() 也会更快;当您使用 .text() 时,浏览器仍然需要确定 elem.nodeType。这实际上需要解析字符串。

关于javascript - 为什么 .html() 在用于相同目的时比 .text() 快得多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24963015/

相关文章:

javascript - 单词的阿拉伯语句子在数据表上颠倒了 pdfhtml5 "pdfmake"

javascript - 正则表达式用于带有特定前置字符的HTML标记引号,并破坏HTML引号

javascript - 在 mousemove 上播放视频时出现抽搐

Javascript 执行函数 onload 但不触发按钮的 onclick 事件

javascript - 如何打印弹窗内容和主要内容

.net - 向服务器发送数据时查询字符串和 cookie 的替代方法?

performance - pig 和 hive 脚本性能分析教程

c# - list.Count > 0 和 list.Count != 0 之间的区别

performance - 为什么使用 HT 的并行编译性能比不使用 HT 时差?

javascript - 空 php session (if else 语句)