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

And*_*rew 6 javascript html5 multithreading web-worker websocket

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

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

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

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

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

谢谢!安德鲁

Sco*_*and 5

是的,我需要将 websocket 处理放入 web-worker 的一个实例是,当我需要避免在敏感时期浏览器线程中断时(使用从我的自定义 nodejs 服务器馈送的 Web Audio API 呈现流音频时)。每次浏览器端 websocket 收到一条音频数据消息时,它都会在渲染音频时以可听见的喀哒声中断浏览器处理,如果您的应用程序没有这样延长的敏感时间段,这很好。通过将 websocket 管理置于 webworker 中,我避免了中断 Web Audio API 事件循环。webworker 将处理它放入 webworker 端循环队列的 websocket 传入数据。浏览器端 Web 音频 API 事件循环将在其自己的事件循环停机时间部分接入这个 webworker 管理的队列,

查看相应的 repo https://github.com/scottstensland/websockets-streaming-audio

我在 2015 年完成了这项工作,但从外观上看,Web Audio API 最近获得了新工具来处理这个 krackle 问题https://developers.google.com/web/updates/2017/12/audio-worklet