我的网站使用web套接字连接到实时数据流。数据流只是一系列JSON消息。在websocket处理程序中,当我收到消息时,我解析JSON并向图中添加一些数据点。
我的问题是:它是有意义的移动websocket到它自己的工作线程?
起初我认为我可以在自己的线程上解析JSON,并将反序列化的对象发送给UI线程,这可能会节省一些时间。不幸的是,看起来postMessage需要我发送字符串。因此,在自己的线程上解析JSON没有任何好处。
在它自己的线程上接收web套接字数据似乎也没有任何好处——我想象浏览器已经在它自己的线程上接收数据并在适当的时候传递我的javascript回调。
所以,考虑到在实时数据接收上没有任何后处理正在完成的事实-它主要是直接到UI -在web worker上放置一个websocket连接有意义吗?
谢谢!安德鲁。
是的,当我需要在敏感时期避免浏览器线程中断时,我需要将websocket处理放入Web -worker的一个实例(当使用Web audio API从我的自定义nodejs服务器馈送渲染流音频时)。每次浏览器端websocket接收到音频数据的消息时,它都会在渲染音频时用声音来打断浏览器的处理,如果你的应用程序没有这样的扩展敏感时间段,这是很好的。通过将websocket管理放入webworker中,我避免了中断Web Audio API事件循环。webworker将处理websocket传入的数据,并将这些数据放入webworker端循环队列中。浏览器端的Web Audio API事件循环将在它自己的事件循环停机时间部分使用这个webworker管理的队列,从而避免任何中断到Web Audio API事件循环。
参见对应的repo https://github.com/scottstensland/websockets-streaming-audio
我在2015年做了这项工作,但看起来Web Audio API最近获得了新的工具来处理这个krackle问题https://developers.google.com/web/updates/2017/12/audio-worklet