在Internet Explorer 11中加载巨大的数组导致堆栈溢出
Loading huge array in Internet Explorer 11 cause stack overflow
我有一个(生成的)页面,其中包含一个非常大的锯齿数组。它不会在IE11中初始化;我得到SCRIPT28: Out of stack space
和SCRIPT2343: Stack overflow at line: 1
。我已经用随机数据将有问题的页面减少到最低限度,它看起来是这样的:
<html><body>
<div id="info">
Loading...
</div>
<script>
var d = [];
var i = 0;
d[i++] = [
"XHC_14",
0
];
d[i++] = [
"ZXS_26",
"UVT_27",
"QML_3149",
"MJO_3150",
15993327
];
d[i++] = [
"VKG_3156",
"ZEA_3157",
"KZG_3159",
"MNA_3162",
"AKX_3163",
"KLK_3164",
618601
];
// more array initialization ...
info.innerHTML = "<h1>Ready!</h1>"; // this will only show if the initialization succeeded
</script>
</body></html>
实际文件有~500k行,重复数组初始化大约~14k次。真正的文件可在这里:ie11_stack_overflow_problem.zip
只有当数组初始化足够大时才会崩溃。我尝试了各种各样的变化,包括把它放在一个函数中,给它自己的作用域,但都无济于事。它可以在我测试的所有其他浏览器上运行,包括XP上的IE8。我的配置是Win7与IE 11.0.9600.17107(完全更新)。
有人知道为什么会这样吗?
这个文件是可怕的,是Visual Studio和notepad++的死亡之吻…还有IE11。你已经炸毁了解释器。
我使用
让它工作JSON.serialize(d)
,然后将输出作为字符串粘贴到源文件中。
:
var jsonStr = '[[blablabla...I go on foreeeeeever]]';
var d=JSON.parse(jsonStr);
现在它在IE11中加载了。
解决方案是将数据结构写成JSON字符串并解析
相关文章:
- 如何在映射数组中添加换行符
- javascript结合了数组和字典
- 需要帮助设置json数组
- 不能从angular2中的子组件指定父组件中的数组
- 使用JS将数组转换为json对象
- 数组在递归方法中设置为null
- knockoutjs可观察数组
- Javascript-如何读取json文件中的列并将其保存在Javascript数组中
- 将数组从PHP传递到Javascript
- 在JavaScript中异步迭代大型数组,而不会触发超出堆栈大小
- 使用 js 数组作为堆栈
- Chrome:如何解决Math.max.apply(Math,数组)上的“超出最大调用堆栈大小”错误
- 使用 top_of_stack(n).value 访问像堆栈一样的数组
- 复制数组——>堆栈或堆溢出
- 调用堆栈溢出,只适用于小数组对,我怎么让它需要10k数组对
- 在Internet Explorer 11中加载巨大的数组导致堆栈溢出
- 将数组缓冲区转换为字符串:超出最大调用堆栈大小
- 循环 10k 数组显示错误 超出最大调用堆栈大小
- 在 JavaScript 中将 max 应用于大型数组时如何避免堆栈溢出
- 是否可以用Javascript将数组推送到队列或堆栈中