当前位置: 首页 > 面试题库 >

浏览器Javascript堆栈大小限制

拓拔俊艾
2023-03-14
问题内容

我在IE浏览器中遇到了一些客户端Javascript堆栈溢出问题,这是在第三方库中发生的,该库进行了一些函数调用,并且由于某些原因,它们有时仅由于IE栈限制低而在IE中制动。

然后,我编写了一个小的测试HTML,以测试某些浏览器的堆栈大小限制,并发现与运行Windows 7 OS,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();
}
inc();
  • IE6:1130
  • IE7:2553
  • IE8:1475
  • IE9:20678
  • IE10:20677

火狐浏览器

  • 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

谷歌浏览器

  • 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的开发者工具,Ctrl+
Shift+ J



 类似资料:
  • 问题内容: 我正在通过jQuery的getJson()调用跨域Web服务。由于响应对象的大小很大,因此我在Web服务中使用了最大的JSon大小。我已经检查过getJson()提供正确的响应对象。但是仍然没有调用我的回调函数。Firebug表示已超过(firefox)响应大小。 谁能告诉我标准浏览器(例如,Firefox)处理的最大浏览器响应大小限制是多少,以及如何处理该问题? 这是相同的代码段。

  • 我明白了在递归中,每个递归调用是如何堆栈在堆栈上的;如果超过堆栈限制,则会出现堆栈溢出。那么为什么Python的返回一个数字;递归调用的最大深度? 这不是取决于我在递归函数中做了什么吗?还是以某种方式将变量保存在堆栈以外的其他地方?它是如何工作的?

  • 我正在尝试设置浏览器堆栈和本地测试。我使用浏览器堆栈本地客户端打开了一个隧道,如下所示: 所以它通过我的本地网络转发所有的传输。在我的本地 /etc/hosts文件中,我有如下条目:127.0.0.1dev.mysite.com 然后,当我执行简单的selenium测试时,browserstack virtualmachine能够访问我的域名,一切正常。但在一些我有外部脚本/css/图像等的部分,

  • 我想用量角器和BrowserStack运行测试。我跟踪了这个帖子,我背后的一个代理。我已安装browserstack local,并使用以下命令运行它: 一切似乎都起作用了,因为我有这样的信息: 谢谢

  • 不要求代码 我只想说清楚,我不希望任何人给我解决这个问题的代码,我想自己写,这样我实际上学到了一些东西。 不要求代码 好的,所以我需要创建一个类,它将采用一个txt文件,该文件具有一个由('W' = WALL,'S' = START,'O' = 可遍历空间,'F' = FINISH)组成的迷宫,并返回一个布尔真/假,说明迷宫是否可以使用堆栈和/或队列解决。 我现在处于早期阶段,所以我在想... 我

  • 问题内容: 有没有办法在所有浏览器中手动设置浏览器窗口的最小大小? 问题答案: 你可以试试 一旦视口小于600像素,您将获得一个水平滚动条。这仅适用于支持最小宽度CSS属性的现代浏览器。 我认为不可能限制用户的大小调整,也不应该!