如何检测和停止用户提供的 JavaScript 代码中的无限循环?
How to detect and stop an infinite loop in user-provided JavaScript code?
我正在为游戏编写浏览器内代码编辑器。编辑器将允许用户编写自己的 JavaScript 文件,然后将这些文件加载到编辑器 运行 所在的同一 DOM 中。这将允许他们在代码旁边的 canvas 元素中看到游戏,并在每次保存时更新它。
编辑器针对JavaSript的新手,很容易不小心陷入死循环。如果可能的话,我想设置我的编辑器,如果循环执行次数太多或太快,循环就会中断,并弹出一条消息提醒用户他们有一个无限循环。
这对于新手来说是理想的选择,因为如果整个编辑器突然崩溃,他们可能不会意识到自己的错误,并认为这是我的编辑器的问题。
如何在我的编辑器中实现自动停止无限循环的故障保险?
处理用户提交的代码中潜在的无限循环的最佳方法是预编译代码以在代码中插入监控函数。这被称为 instrumenting,并且是 explained in detail by Codepen。
例如,来自用户的以下代码...:
for (var i = 0;; i++) {
console.log("hello for loop.");
}
console.log("We'll never reach this line of code");
...将像这样进行检测:
for (var i = 0;; i++) {
if (window.CP.shouldStopExecution(1)) {
break;
}
console.log('hello for loop.');
}
console.log('finished because we broke out of the loop');
我正在为游戏编写浏览器内代码编辑器。编辑器将允许用户编写自己的 JavaScript 文件,然后将这些文件加载到编辑器 运行 所在的同一 DOM 中。这将允许他们在代码旁边的 canvas 元素中看到游戏,并在每次保存时更新它。
编辑器针对JavaSript的新手,很容易不小心陷入死循环。如果可能的话,我想设置我的编辑器,如果循环执行次数太多或太快,循环就会中断,并弹出一条消息提醒用户他们有一个无限循环。
这对于新手来说是理想的选择,因为如果整个编辑器突然崩溃,他们可能不会意识到自己的错误,并认为这是我的编辑器的问题。
如何在我的编辑器中实现自动停止无限循环的故障保险?
处理用户提交的代码中潜在的无限循环的最佳方法是预编译代码以在代码中插入监控函数。这被称为 instrumenting,并且是 explained in detail by Codepen。
例如,来自用户的以下代码...:
for (var i = 0;; i++) {
console.log("hello for loop.");
}
console.log("We'll never reach this line of code");
...将像这样进行检测:
for (var i = 0;; i++) {
if (window.CP.shouldStopExecution(1)) {
break;
}
console.log('hello for loop.');
}
console.log('finished because we broke out of the loop');