javascript - 在不牺牲 CPU 资源的情况下在 JavaScript web worker 中休眠

标签 javascript web-applications resources sleep web-worker

概述: 我们公司需要一个可以访问本地资源(RS232/串行设备)的网络应用程序。经过一些研究和 POC,我们放弃了 ActiveX、Java Applets 等选项,并决定创建本地应用程序(用 C# 编写,稍后将转换为服务并分发给客户)读取串行数据并通过 HTTP 协议(protocol)为它们提供服务(简单的 TCP 服务器回答必要的 header + 普通串行数据)。然后 Web 应用程序对“http://localhost:8080”执行 AJAX 读取这些数据。

所有这些都是在 web worker 中完成的,在一个 while 循环中将消息发布到主线程,并将其填充到表单的输入元素中。通过提供静态内容,我可以获得不错的性能。在 Windows 上的 Chrome 13 中,较旧的 Intel 双核(不是 Core 2 Duo)1.6GHz CPU 每秒迭代 300-350 次,网络工作线程占用 5-9% 的 CPU。

问:我现在想要实现的是通过在每个 ajax 请求之后插入某种 sleep() 函数来限制 web worker 中的轮询间隔,例如开始时尝试 100ms。

在不牺牲线程中的 CPU 资源的情况下,最佳解决方案是什么?

注意:作为最后的手段,我可​​以在 TCP 服务器代码中插入一些延迟。

编辑:

我需要睡在 worker 里面。示例(为清楚起见过度简化):

AJAX = new XMLHttpRequest();
while (true) {
  AJAX.open("GET", "http://127.0.0.1:8080", false);
  AJAX.send(null);
  var ean = AJAX.responseText;
  if (ean != '') { postMessage(ean); }
  /* NEED TO SLEEP HERE WHETHER THE RESPONSE WAS SENT OR NOT */
}

最佳答案

我认为最好的解决方案是 WebSocket API .因此,您可以在 Web 应用程序中附加一个事件监听器,并在每次需要执行某些操作时从 C# 中触发它。

关于javascript - 在不牺牲 CPU 资源的情况下在 JavaScript web worker 中休眠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6423567/

相关文章:

javascript - 带有空括号的 Node.js REPL 语法

javascript - jQuery Submit 函数不会发布值

Php mysql 自定义 ecomm - 产品搜索,包括类别名称?

html - 编写脱机工作的应用程序(Web 应用程序)

javascript - 检查连接 JavaScript

javascript - 更改元素的 HTML 后,CSS 悬停状态保留在 Safari 中

web-applications - 可以从不受信任的来源安全地执行 TeX 代码吗?

javascript - AngularJS 资源未解析

java - 如何获取 src/main/resources 文件夹中文件的路径?

C++ 编译型资源所有者断言