将WebSocket放在WebWorker上是否有意义?

时间:2015-09-05 15:24:37

标签: javascript html5 multithreading websocket web-worker

我的网站使用网络套接字连接到实时数据流。数据流只是一系列JSON消息。在websocket处理程序中,当我收到消息时,我解析JSON并将一些数据点添加到图形中。

我的问题是:将websocket移动到它自己的工作线程上是否有意义?

起初我以为我可以在自己的线程上解析JSON并向UI线程发送反序列化的对象,这可能会节省一些时间。不幸的是,看起来postMessage要求我发送字符串。因此,在自己的线程上解析JSON没有任何好处。

在它自己的线程上接收Web套接字数据似乎没有任何好处 - 我已成像浏览器已经在其自己的线程上接收数据并传递我的javascript回调在适当的时候。

因此,考虑到实时数据接收没有进行任何后处理 - 它主要是直接用于UI - 将webocket连接放在Web工作者上是否有意义?

谢谢! 安德鲁

1 个答案:

答案 0 :(得分:3)

是的,我需要将websocket处理放入Web工作者的实例是我需要在敏感时段避免浏览器线程中断(当使用从我的自定义nodejs服务器提供的Web Audio API呈现流式音频时)。每次浏览器侧websocket接收到音频数据消息时,它都会中断浏览器处理,如果您的应用程序没有这样的扩展敏感时间段,这很好。通过将websocket管理放入webworker,我避免中断Web Audio API事件循环。 webworker将处理websocket传入的数据,并将其放入webworker侧循环队列中。浏览器端Web Audio API事件循环将在其自己的事件循环停止时间部分中访问此webworker管理的队列,从而避免对事件循环的任何中断。

请参阅相应的回购https://github.com/scottstensland/websockets-streaming-audio