Bab*_*ham 2 javascript hash string-search
我很想知道 .includes() 方法使用什么算法?它是否使用像 rabin karp 这样的模块化哈希?
在不了解更多关于它的方法和速度的情况下,我对使用 .includes() 有点犹豫。我发现的文档在讨论时没有详细说明(例如https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/includes)
小智 5
鉴于不同的引擎可以以不同的方式实现 .includes,可能很难对实现做出全面的声明。但是,应该可以通过进行一些基准测试来了解它的速度(因为测试可能是唯一确定的方法)。
使用节点 7.0 我尝试测试三个不同的函数:
1.includes(),传入一个顺序数组
2. 一个基本的 for 循环,一个顺序数组
3.has(),从一个顺序数组中传入一个预先创建的集合
我获得的结果表明数组本身的长度似乎并不重要(正如所希望的那样),但是所需的数字与开始的距离有多大。为了在索引 <20 左右查找数字,for 循环似乎稍微快一点(大约 15%?)。对于更大的索引,includes() 超过了 for 循环(看起来比索引 500 快 2-3 倍)。然而 .has() 在后面的索引中查找数字要快得多(索引 800 快 25-30 倍),并且索引的大小似乎对其速度几乎没有影响(但创建集合需要时间)。
诚然,这些是有限的测试,许多因素可能会影响它们。一个有趣的结果是,如果一个集合是从传入的数组(而不是其他数组)中创建的,即使该集合没有传递到函数中,它似乎也提高了包含的速度,并降低了包含的速度for 循环函数略。我假设某种类型的缓存以某种方式使 .includes() 受益?