【发布时间】:2012-11-26 11:34:09
【问题描述】:
Collada 文件格式包含大量数据,这些数据以空格分隔的浮点/整数/布尔值列表形式存储。这些列表可能巨大。我们大致使用以下代码在 JavaScript 中解析这些列表:
var floats = input.split(' ').map(parseFloat)
但这会产生大量垃圾,因为巨大的输入字符串被分割成数千个单独的小字符串。有没有办法避免这种情况?类似于 parseFloat() 函数的东西,我可以指向现有字符串中的偏移量,从而避免生成垃圾。
【问题讨论】:
-
为什么其余的都是垃圾?您一次只需要一个值吗?
-
“垃圾”是什么意思?您是在谈论内存使用情况,例如需要进行垃圾收集的临时字符串数组,还是只是垃圾,例如您不想要的值?没有从字符串中的偏移量中提取的
parseFloat()变体。您可以在循环中使用.indexOf()和.substr()手动提取子字符串或其他内容,但这会创建同样多的字符串(它们不会同时全部保存在数组中)。当前的代码是否表现不佳? -
是的,我说的是
split()创建的小临时字符串。substring()也将创建这些。我需要所有的花车。 -
没有办法避免创建这些临时字符串,但是包含几千个短字符串的数组应该不是问题 - 您是否遇到内存问题?