首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript阻塞等待

Javascript阻塞等待
EN

Stack Overflow用户
提问于 2012-05-14 04:29:59
回答 2查看 1.8K关注 0票数 2

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

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

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

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

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

请注意,将脚本更改为使用回调逻辑,就像在浏览器中进行编程时通常所做的那样(除非您正在谈论在通用程序上执行完整的CPS transform,而我不想谈到这一点)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-20 16:15:23

没有可移植(跨浏览器)的方法来防止浏览器在认为执行占用太多时间时终止脚本,并且不可能像在GUI库中通常所做的那样启动嵌套事件循环来实现阻塞操作。

适用于Chrome的解决方案是使用以下选项启动浏览器

代码语言:javascript
复制
--disable-hang-monitor
票数 0
EN

Stack Overflow用户

发布于 2012-05-14 04:36:20

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

像你现在这样使用活动等待阻塞是一个非常糟糕的主意,因为它会消耗大量的CPU资源,并且阻塞整个浏览器的(至少在火狐中是这样)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10574979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档