gpt4 book ai didi

javascript - 浏览器 Javascript 堆栈大小限制

转载 作者:行者123 更新时间:2023-11-28 04:14:41 27 4
gpt4 key购买 nike

我遇到了一些客户端 Javascript 堆栈溢出问题,特别是在 IE 浏览器中,这种情况发生在第三方库内,该库进行一些函数调用,并且由于某种原因,它们偶尔会在 IE 中制动,因为它的堆栈限制较低。

然后,我编写了一个小型测试 HTML 来测试某些浏览器的堆栈大小限制,发现与在 Windows 7 操作系统、8Gb RAM 的笔记本电脑上运行的 FF 7 或 Chrome 14 相比,IE8 实际上具有较小的堆栈限制:

<html>
<body>

<!-- begin Script: -->
<script type="text/javascript">

function doSomething(){

var i = 3200;
doSomethingElse(i);

}

function doSomethingElse(i){
if (i == 0) return -1;
doSomethingElse(i-1);
}

doSomething();

</script>
<!-- END OF PAGE -->

</body>
</html>

当值在 3200 左右时,IE 会引发堆栈溢出,与 IE 相比,Firefox 和 Chrome 可以处理非常深的递归。

我想知道是否有一种方法可以将堆栈溢出异常与在 IE 或任何其他浏览器中运行时引发该异常的 Javascript 函数联系起来,以及它是否可以提供堆栈跟踪以及堆栈中的函数链:错误发生的那一刻。

最佳答案

使用简单的测试:

var i = 0;
function inc() {
i++;
inc();
}

try {
inc();
}
catch(e) {
// The StackOverflow sandbox adds one frame that is not being counted by this code
// Incrementing once manually
i++;
console.log('Maximum stack size is', i, 'in your current browser');
}

Internet Explorer

  • IE6:1130
  • IE7:2553
  • IE8:1475
  • IE9:20678
  • IE10:20677

Mozilla 火狐浏览器

  • 3.6:3000
  • 4.0:9015
  • 5.0:9015
  • 6.0:9015
  • 7.0:65533
  • 8b3:63485
  • 17:50762
  • 18:52596
  • 19:52458
  • 42:281810
  • 89:10746
  • 91:26441

谷歌浏览器

  • 14:26177
  • 15:26168
  • 16:26166
  • 25:25090
  • 47:20878
  • 51:41753
  • 93:13903

Safari

  • 4:52426
  • 5:65534
  • 9:63444
  • 14:45606

Safari iOS

  • 15:7909

歌剧

  • 10.10:9999
  • 10.62:32631
  • 11:32631
  • 12:32631
  • 78:13908

边缘

  • 87:13970
  • 93:13903

Yandex

  • 21:13909
<小时/>

关于您的问题,请使用浏览器的开发人员工具查看堆栈。在 IE 8+ 中,按 F12,转到“脚本”选项卡,然后单击“开始调试”。当抛出异常时它会中断,并且你可以看到调用堆栈。您还可以使用 Chrome 的开发者工具 Ctrl+Shift+J

关于javascript - 浏览器 Javascript 堆栈大小限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45965434/

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