Javascript 当用于相同的目的时,为什么.html()比.text()快得多?

Javascript 当用于相同的目的时,为什么.html()比.text()快得多?,javascript,jquery,performance,dom,jsperf,Javascript,Jquery,Performance,Dom,Jsperf,我在运行jQuery的.text()和.html()方法时,惊讶地发现.html()检索文本的速度几乎快了一个数量级: $div.text()–88496操作/秒 $div.html()–592028次/秒 当结果相同时,为什么.text()比.html()慢得多?.text()执行了哪些操作,.html()跳过以解释这种差异 我知道每种方法都有不同的目的;我很好奇它们被用于相同的目的。这与所需的解析量有关.text()速度较慢,因为它必须解析内部HTML并去掉任何内部标记.html()只需

我在运行jQuery的
.text()
.html()
方法时,惊讶地发现
.html()
检索文本的速度几乎快了一个数量级:

  • $div.text()
    –88496操作/秒
  • $div.html()
    –592028次/秒
当结果相同时,为什么
.text()
.html()
慢得多?
.text()
执行了哪些操作,
.html()
跳过以解释这种差异


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

这与所需的解析量有关
.text()
速度较慢,因为它必须解析内部HTML并去掉任何内部标记
.html()
只需抓取(或者,如果您正在设置内容,则删除)存在的任何内容并完成

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


还要注意:即使同时用作setter和仅传递纯文本,
.html()
速度更快;当您使用
.text()
时,浏览器仍然必须确定
elem.nodeType
。这实际上需要解析字符串。

我希望您不要假设两个函数做相同的事情:-?不,不,不--我很好奇,当唯一的内部内容是文本时,为什么会有如此巨大的差异。好吧,我们在这里看到这么多东西…:)色调。。。我将稍微澄清一下我的问题我还假设native
textContent
更快(如果您可以信任文本),请参见:youcansee(第123-144行)和(第404-441行)。当简单地获取(而不是设置)一个值时,
.text()
具有递归,但是
.html()
执行一个简单的
返回elem.innerHTML因此速度要快得多。即使将其用作setter,
.html()
也更简单。+1用于深入了解源代码。非常感谢,艾德!当输入与用户输入不同时,一般使用.text。当您知道源代码是安全的时,请使用.html。