我有一些JavaScript代码,看起来像这样:
var myClass = {
ids: {}
myFunc: function(huge_string) {
var id = huge_string.substr(0,2);
ids[id] = true;
}
}
之后该函数被调用时使用了一些大字符串(100 MB+)。我只想保存在每个字符串中找到的一个短id。然而,Google Chrome的substring函数(实际上是我的代码中的正则表达式)仅返回一个“切片字符串”对象,它引用原始字符串。因此,在对myFunc
进行一系列调用后,我的Chrome选项卡会耗尽内存,因为临时的huge_string
对象不能被垃圾收集。
我应该如何复制字符串id
,以便不维护对huge_string
的引用,并且可以回收huge_string
?
.substr()
、.substring()
、.slice()
和相关的正则表达式函数都会返回一个新的字符串。调用myClass.myFunc()
的其他代码是否保留了对您巨大字符串的引用?如果您的真实代码更复杂,是否意外地在闭包中保留了这些巨大的字符串? - nnnnnn(' ' + src).slice(1)
。目前还没有官方的解决方案。 - user2864740