我的问题很简单。给出以下代码段:
// Create WebSocket connection.
const socket = new WebSocket('ws://localhost:8080');
// Listen for messages
socket.addEventListener('message', function (event) {
console.log('Message from server ', event.data);
});
在事件循环上,on'message'回调是否将作为 micro 或 macro 任务执行?
长话
我问的原因是,我们曾经发生过,UI线程和事件循环似乎完全被大量WS消息的处理所占据,而没有执行许多其他回调。
因此,我的结论是WS消息处理程序的回调被安排为微任务。由于它们太多,因此无法及时执行下一个刻度,因此无法及时执行下一组宏任务。
解决方案是将WS处理移至Web Worker,在Web Worker中,我们利用了单独的线程,UI线程又可以自由处理渲染了。