JavaScript 阻塞等待

标签 javascript blocking synchronous

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

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

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

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

有没有办法等待命令而不让浏览器终止脚本?超时可以更改吗?

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

最佳答案

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

像您目前所做的那样通过主动等待进行阻塞是一个非常糟糕的主意,因为它会消耗大量的 CPU 功率并阻塞整个浏览器(至少在 Firefox 中)。

关于JavaScript 阻塞等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10574979/

相关文章:

javascript - 使用 JQuery 更改多个图像

javascript - 如果更改路线, meteor 将停止订阅

php - 是否可以阻止使用 Javascript 或 PHP 设置 cookie?

javascript - 如何阻止执行直到执行异步调用?

java - (Java) 为什么非同步的HashSet允许同步使用?

sockets - 我可以使用 Boost.Asio 在多线程 I/O 服务超时的情况下同步读取套接字吗?

javascript - 如何计算数组中低于/高于给定数字的元素数量(javascript)

javascript 代码未获取第一条记录的 code_description 值

c# - Process.Start 在某些客户端上随机阻塞/挂起

asynchronous - Javamail 是异步的还是同步的?