gpt4 book ai didi

javascript - 'indexOf' 方法性能优化

转载 作者:行者123 更新时间:2023-11-29 19:27:57 25 4
gpt4 key购买 nike

根据 Is JavaScript a pass-by-reference or pass-by-value language? JavaScript 按值传递字符串对象。因此,调用 indexOf 方法将触发复制内容。

在我的例子中,我正在解析一个大字符串来查找数据。我经常使用 indexOf 来查找数据。字符串可以大到 100-200KB,每次完整扫描我可能需要调用 indexOf 多达 1000 次。

恐怕这会导致不必要的复制字符串污染“内存”,并可能影响性能。

我的结论正确吗?如果是这样,处理我的任务的正确方法是什么?

可能,我可以使用正则表达式,但目前看起来复杂。

最佳答案

字符串是 Javascript 中的怪兽,它们似乎居于基本类型和对象之间的中间地带。虽然技术上它们被认为是原始的,但由于它们的不变性,在许多情况下它们可以被视为引用。

鉴于它们不可变的,如果将字符串的副本传递给任何函数,我会非常感到惊讶,因为那将既昂贵又完全不必要。

找出答案的一种看似简单的方法是将一个字符串传递给一个函数并更改其中一个字符,以查看它是否反射(reflect)在返回的原始字符串中。然而,如前所述,字符串的不变性使得这成为不可能。


可能可以通过在数百万次的循环中针对两个字符串之一执行 indexOf("a") 以间接方式对此进行测试。

要搜索的字符串可以是“a”“包含数千个字符的非常长的字符串...”

如果字符串是通过引用传递的,时间上应该没有明显的差异。按值传递应该是可检测的,因为您必须复制字符串数百万次,而短字符串应该比长字符串复制得更快。

但是,正如我所说,这可能是不必要的,因为引擎很可能会尽可能优化。

关于javascript - 'indexOf' 方法性能优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29838311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com