为了账号安全,请及时绑定邮箱和手机立即绑定

浏览器Javascript堆栈大小限制

浏览器Javascript堆栈大小限制

开心每一天1111 2019-07-17 16:11:06
浏览器Javascript堆栈大小限制我得到一些客户端Javascript堆栈溢出问题,特别是在IE浏览器,这是发生在一个第三方库,作出一些功能调用,出于某些原因,他们偶尔刹车IE只是因为它的低堆栈限制。然后,我编写了一个小测试HTML来测试某些浏览器的堆栈大小限制,并发现如果与运行在Windows 7操作系统下的笔记本电脑上的FF 7或Chrome 14相比,IE8实际上有一个较小的堆栈限制,即8GB RAM:<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>IE在值约为3200时会引发堆栈溢出,与IE相比,Firefox和Chrome可以处理非常深的递归。我想知道是否有一种方法将堆栈溢出异常与在IE或任何其他浏览器中运行时引发它的Javascript函数绑定,以及在引发错误时,它是否可以使用堆栈中的函数链提供堆栈跟踪。
查看完整描述

2 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

使用一个简单的测试:

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

Internet资源管理器

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

Mozilla Firefox

  • 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

谷歌Chrome

  • 14: 26177

  • 15: 26168

  • 16: 26166

  • 25: 25090

  • 47: 20878

  • 51: 41753

狩猎

  • 4: 52426

  • 5: 65534

  • 9: 63444

歌剧

  • 10.10: 9999

  • 10.62: 32631

  • 11: 32631

  • 12: 32631


关于您的问题,请使用浏览器的开发工具查看堆栈。在IE8+中,点击F12,转到“脚本”选项卡,然后单击“开始调试”。当抛出异常时,它将中断,您可以看到调用堆栈。你也可以使用Chrome的开发工具,克特+换档+J.


查看完整回答
反对 回复 2019-07-17
?
墨色风雨

TA贡献1853条经验 获得超6个赞

这是浏览器特有的,不仅是堆栈大小,还包括优化,比如尾递归优化等等。我想这里唯一可靠的方法是以一种不会将大量内容放入堆栈的方式编写代码,或者手动测试(深入了解每个浏览器的文档)。毕竟,当您看到“太多递归”错误或类似的情况时,您已经知道代码确实有问题。


查看完整回答
反对 回复 2019-07-17
  • 2 回答
  • 0 关注
  • 1509 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信