【问题标题】:How is lastIndexOf() better than indexOf() in this case? [duplicate]在这种情况下,lastIndexOf() 如何比 indexOf() 好? [复制]
【发布时间】:2018-12-16 14:32:52
【问题描述】:

以下是 Google 对 String.startsWith() 的实现,取自 Closure 库:

goog.string.startsWith = function(str, prefix) {
   return str.lastIndexOf(prefix, 0) == 0;
};

我想知道他们为什么选择lastIndexOf 而不是indexOf,因为:

  1. 在某些情况下,indexOf 的速度是原来的两倍。
  2. 浏览器兼容性相同。

这不是微优化,我真的相信:

return str.indexOf(prefix) == 0;

比:更简单、更干净并且碰巧更快:

return str.lastIndexOf(prefix, 0) == 0;

lastIndexOf 在这种情况下如何更好?

【问题讨论】:

  • lastIndexOf 应该理论上更快。
  • some quick testing 表明 lastIndexOf() 实际上比 indexOf() 慢 96%
  • @SheshankS。 1. 这不是我的问题 2. 在将某些内容标记为重复之前,不仅要阅读问题标题,还要阅读其内容。
  • @SheshankS。可能,但仅仅因为标题共享很少的单词并不意味着问题是重复的。随意建议一个更好的标题。
  • 您可能想看看这里:stackoverflow.com/questions/646628/…,以及它下面的解决方案(以及第二个答案)。话虽如此,当您问“我想知道他们为什么选择...” 时,您的问题自动基于意见,因为这是该团队的选择。但是,如果您询问性能差异,我相信我链接的问题是一个很好的重复目标(因为我提到的两个答案)。

标签: javascript indexof google-closure-library lastindexof


【解决方案1】:

MeasureThat 非常适合这类问题,我在这里为您创建了一个,可能会帮助您回答问题:

https://www.measurethat.net/Benchmarks/Show/3384/0/index-vs-lastindexof

据此, indexOf 只是快一点。当然,这取决于您要索引的内容。

IndexOf 查找第一次出现,lastIndexOf 返回最后一次出现。总而言之,它们现在的功能要好得多,比如地图。

老实说,如果 Google 使用它可能是有充分理由的。

【讨论】:

  • 这甚至不能回答问题。
  • "据此,indexOf 只是快一点。" --- 据此,它表明基准执行得很差,并且被 vm 优化了。
  • Erm,它有点“在某些情况下 indexOf 的速度是原来的两倍。”,这表明它不是大声笑。我的意思是,最重要的是,这两者是不同的功能。
  • "呃,它有点像'indexOf 在某些情况下速度是原来的两倍。'" --- 它没有,这里后者快 100 倍,每秒 800M 操作,即表示优化:您的测试仅表明您无法快速运行。
  • 这很有趣,我想你实际上得到了不同的结果,我在 Mac 上使用 Safari,Chrome 和 Safari 之间可能不同。顺便说一句,这不是我的,只是我知道的一个网站。
猜你喜欢
  • 1970-01-01
  • 2013-07-17
  • 1970-01-01
  • 1970-01-01
  • 2013-04-23
  • 2017-11-04
  • 2013-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多