首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在运行长javascript代码时处理用户输入事件?

如何在运行长javascript代码时处理用户输入事件?
EN

Stack Overflow用户
提问于 2013-03-08 00:41:41
回答 1查看 792关注 0票数 3

我有一个长时间运行的javascript代码,它处理某种呈现(webgl)。这是一种“自适应渲染”,随着时间的推移,我计算一个曲面越来越精确(这意味着场景的“分辨率”变得越来越精确)。

我希望它运行,只要用户不按一个键,或移动鼠标。正如所述的这里,我可以使用setTimeout或setInterval,给javascript一些时间来处理其他事件。

我在这个setTimeout上测试了setInterval和jsFiddle的延迟,并观察到了以下结果:

代码语言:javascript
复制
setTimeout delay: 15-20 ms
setInterval delay: 2-4 ms

它很快,但在我的情况下仍然很难使用。我需要能够作出反应,完成一些计算和渲染在16毫秒给用户的印象运行在60 fps

下面是一个问题:

( 1)是否有其他(更聪明)的方法来检查是否有要处理的传入用户输入事件?

2)还有什么可以用来让“长时间运行的代码被用户打断”的吗?(也许是网络工作者?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-08 00:54:44

您必须将代码分解为小块,并在计时器滴答时运行每个块。在每个计时器滴答之间,可以处理用户事件,如果希望停止执行长时间运行的计时器驱动进程,则可以设置一个标志。

没有其他方法来处理事件或检查挂起的事件。您必须返回到主事件循环,这意味着您的javascript执行线程需要完成。然后,在返回事件循环之后,执行更多代码的唯一方法是响应事件或使用计时器。这正是编写和架构javascript的方式。

您唯一的其他选择是使用web工作者,但他们不能接触DOM,不能在旧浏览器中工作,只能通过消息传递与主事件循环通信。适合做计算,但不适合做动画。

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

https://stackoverflow.com/questions/15284726

复制
相关文章

相似问题

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