【发布时间】:2016-11-29 03:55:47
【问题描述】:
我有字符串(长度 50-2000)和潜在子字符串(长度 2-8),它们只能从特定位置开始(它可能发生在其他地方,但我不在乎)。我需要测试大量的字符串,所以速度是这里的关键。那么有没有更快的方法:
var q = baseString.indexOf(searchString, assumedIndex) === assumedIndex;
或
var q = baseString.substr(assumedIndex, searchString.length) === searchString;
【问题讨论】:
-
您有性能问题吗?
-
我的猜测是第二个要快得多,因为它有运行时
O(m),其中 m 是搜索字符串的长度,而第一个有O(n),其中 n 是基本字符串的长度。并且m小于n。尽管这是假设 indexOf 的简单实现。这些数字也没有那么大,所以大的 O 表示法不是真正有效的 -
@JosephYoung 没有更多细节,你的 猜测 就是这样,一个猜测,它并不比任何其他猜测好多少(如果你知道字符串有 97% 的机会立即匹配吗??)
-
暂时没有,它还没有投入生产。它适用于 10k-500k 的检查,最坏的情况是需要第二次左右(快速的机器,合成数据 - 与实际相比,浏览器可能以错误的方式优化)。但是如果我添加更多类似的 indexOf/substr,我可以改善它的行为。这会减慢它的速度。所以我正在寻找改进它。
-
@Amit 好吧,是的,但正如我所说,我使用的是大 O 表示法,所以为了争论,这是假设最坏的情况。我在评论中写了它,因为我没有确切的答案
标签: javascript string performance