Javascript阻塞等待

时间:2012-05-13 20:29:59

标签: javascript blocking synchronous

我正在为在浏览器中运行的代码实现一个交互式调试工具。当我到达“断点”时,我需要调用调试器并等待所需的操作,当然可能包括“继续”命令以进一步执行脚本。

为此,我编写了一个小型node.js网络服务器,使用长轮询技术处理这些“调试”请求。调试器接口在另一个浏览器窗口中运行并与node.js webserver通信,因此命令可以有效地发送到正在从其他浏览器调试的脚本。

正在调试的脚本中的“暂停”是使用同步请求实现的,该请求在for(;;)循环中最多需要N秒,当收到命令"cont"时可以退出。如果程序员没有在限制内使用调试器接口发送命令,则服务器会自动发送“等待更多”的答案,并且脚本仍处于无限循环中。

一切都运行良好,除了浏览器(在这种情况下是Chrome)一段时间后弹出一个对话框,告诉被调试的脚本被卡住并提供杀死它的选项。无论N的值是多少,都会发生这种情况。

有没有办法在没有浏览器杀死脚本的情况下等待命令?可以更改超时吗?

请注意,更改脚本以使用回调逻辑,就像在浏览器中编程时通常所做的那样(除非你在谈论在通用程序上执行完整的CPS transform,我不想要去那里)。

2 个答案:

答案 0 :(得分:3)

如果不使用浏览器扩展(如firebug)使用的JS调试接口,则无法正常暂停脚本。

当前正在阻止主动等待是一个非常糟糕的主意,因为它会消耗大量的CPU能力并阻止整个浏览器(至少在Firefox中)。

答案 1 :(得分:0)

没有可移植的(跨浏览器)方法来阻止浏览器在认为执行占用太多时杀死脚本并且无法启动嵌套事件循环来实现阻塞操作,就像在GUI中正常完成一样库。

适用于Chrome的解决方案是使用选项

启动浏览器
--disable-hang-monitor