Javascript JS:从索引0开始创建所有子字符串的最快方法

Javascript JS:从索引0开始创建所有子字符串的最快方法,javascript,performance,substring,Javascript,Performance,Substring,因此,我正在寻找一种方法,从索引0开始的较大字符串生成所有可能的子字符串。那么,让我们假设我们有 var a = "test"; 然后我想生成 "test", "tes", "te" and "t" 我想象用substring、substr或slice来做这件事,我在这里测试了它们: 现在切片法的速度几乎是其他方法的两倍。有人能解释一下吗?或者有更快的方法来实现这一点吗?这似乎更快: substr = "" for (var i = 0; i < length; i++) {

因此,我正在寻找一种方法,从索引0开始的较大字符串生成所有可能的子字符串。那么,让我们假设我们有

var a = "test";
然后我想生成

"test", "tes", "te" and "t"
我想象用substring、substr或slice来做这件事,我在这里测试了它们:


现在切片法的速度几乎是其他方法的两倍。有人能解释一下吗?或者有更快的方法来实现这一点吗?

这似乎更快:

substr = ""
for (var i = 0; i < length; i++) {
    substr += text.charAt(i)
}
substr=“”
对于(变量i=0;i

在您的基准测试中,
切片
更快,因为
文本
的长度每次迭代都会减少

如果查看V8中的
substr
substring
slice
实现,您会发现它们使用相同的内部函数
%\u substring
。他们只是以微不足道的代价操纵它的参数

  • String.prototype.slice
  • String.prototype.substring
  • String.prototype.substr

将标题(从索引0开始)中的约束添加到问题正文中。在Linux上的Firefox中,速度仅提高了35%左右。但我仍然发现速度有了显著提高。。。有什么线索吗?在不同的浏览器中它的速度并不一致。现在看一下图表,IE9的速度大致相同,FF26的速度要慢得多,FF23的速度要快得多,Chrome的速度要快得多。对于这些数字我不会读太多。回答得很好,谢谢你的解释和关于实现的细节:太好了!智能实施,最大限度地减少查找量;谢谢还添加了反面(这是我想要的):