【问题标题】:Chrome versus Edge Javascript differencesChrome 与 Edge Javascript 的区别
【发布时间】:2022-01-10 12:47:45
【问题描述】:
我有时会收到在 chrome 或 edge 中崩溃的 Javascript 文件(使用 Adobe Animate 创建)。在某些情况下,这些文件仅在 chrome 中崩溃,在某些情况下,它们仅在边缘崩溃。它总是RangeError: "Maximum call stack size exceeded"。
这种行为的重现性非常好,不会随机发生。
我通过“chrome://version/”检查了 v8 版本,两个浏览器的版本相同(V8 9.7.106.18)
我想知道这是怎么回事?
【问题讨论】:
标签:
google-chrome
microsoft-edge
v8
difference
javascript-engine
【解决方案1】:
(这里是 V8 开发人员。)
如果不了解这些应用在做什么,就很难确定。有几个因素在起作用:
- 堆栈的最大大小(以字节为单位)。操作系统为此设置了一个上限,超过这个上限就会终止进程。为了避免这种情况,V8 将自己的限制设置为略低于它估计的操作系统限制。当 V8 版本相同时,我不希望在这方面有任何差异。但是我不知道 Edge 是否会以不同的限制覆盖默认值。
- 每个堆栈帧的大小。这也应该是一样的,只要 V8 版本是一样的。它可能会受到优化决策的影响(给定函数的优化代码比同一函数的未优化代码使用更多或更少的堆栈空间),但如果 Edge 不符合优化策略,我会感到惊讶。
- 被调用的函数,以及发生的任何递归调用的深度。在最简单的情况下,生成的 JS 可以检测到它在哪个浏览器中运行并表现不同。也可以想象,窗口的大小会起作用,例如如果代码遍历动态大小的画布的每个像素;或已存储在配置文件中的内容(
LocalStorage 等)。如果您安装了任何浏览器扩展来改变页面正在做的事情,那也可能会影响事情。如果不进一步了解应用正在/正在做什么,就不可能排除任何可能。