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

时间:2014-07-25 19:17:58

标签: javascript jquery performance dom jsperf

我正在使用jQuery的.text().html()方法并运行some simple jsPerf tests,当时我惊讶地发现.html()快了近一个级别在检索文本时:

  • $div.text() - 88,496 ops / sec
  • $div.html() - 592,028 ops / sec

为什么.text()在结果相同时比.html()慢得多? .text()执行.html()会执行哪些操作来解释这种差异?

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

1 个答案:

答案 0 :(得分:21)

它与所需的解析量有关。 .text()速度较慢,因为它必须解析内部HTML并删除任何内部标记。 .html()只是抓住(或者,如果你正在设置内容,将其删除)那些已经完成的任务。

您可以看到the source for .text() here(第123-144行)和the source for .html() here(第404-441行)。如果只是获取(未设置)值,.text()会有递归,但.html()执行简单的return elem.innerHTML;,因此速度更快。即使将其用作制定者,.html()也更简单。

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