火狐浏览器下的Websockets延迟

Websockets delay under Firefox

本文关键字:延迟 Websockets 火狐浏览器      更新时间:2023-09-26

>我创建了一个简单的WebSockets服务器,它每20毫秒发送一个小数据包,仅用于测试目的。然后,我用纯 WebSocket API 编写了一个简单的浏览器客户端,它连接到服务器并在每次收到数据包时打印Date.now()

var ws = new WebSocket('ws://localhost:8080');
ws.onmessage = function(){ console.log(Date.now()); };

当我在谷歌浏览器中启动客户端时,数据包之间的延迟是一致的,总是在 19 到 21 毫秒之间。当我在火狐下启动它时...呃,延迟在 3 到 114 毫秒之间跳跃。火狐有什么问题,有什么解决方法?默认情况下是否启用了某种缓冲?

测试是在Linux下的本地主机上完成的,Firefox版本为38.0.5,数据包大小为4字节,没有运行其他代码,因此垃圾收集器不是问题。我还同时启动了两个浏览器,结果是一样的。

经过大量测试,结果相当有趣 - console.log Firefox 下的实现是万恶之源。频繁调用它会导致浏览器短暂挂起,从而使所有计时器和事件不同步。在 Firefox 下调试定时事件时,目前最好将日志存储在数组中并稍后打印。