JavaScript 的广播频道是否仅限于每秒接收一条消息?



我可能已经为自己回答了这个问题,但我需要检查理智...

我有一个选项卡每 500 毫秒通过广播频道广播到另一个选项卡。第二个选项卡设置为接收广播并将其打印到控制台日志中。

发送选项卡:

const crossTraffic = new BroadcastChannel('crossTraffic');
const queueInterval = setInterval(function(){
crossTraffic.postMessage({action: 'keepalive', cTime: Date.now()});
console.log(`cTime sent ${Date.now()}`);
}
},500);

接收选项卡:

const crossTraffic = new BroadcastChannel('crossTraffic');
crossTraffic.onmessage = function(e){
if (e.data.action === 'keepalive'){
console.log(`ctime received ${e.data.cTime}`);
}
}

我观察到以下情况:无论我为什么设置队列间隔时间,接收选项卡都不会每 1,000 毫秒接收一次以上的广播。

这是广播频道的正常行为,还是可以以小于 1,000 毫秒的间隔接收消息?

这是一个与我想象的不同问题......

事实证明,不是焦点的标签页(至少在 Chrome 中(仅限于每秒更新一次。如果我打开单独的窗口并将一个广播到另一个窗口,则每条消息都会以我选择的任何间隔到达(在 100 毫秒时测试(。

这是我用于在发送窗口/选项卡上进行测试的修改代码:

const crossTraffic = new BroadcastChannel('crossTraffic');
var queueInterval;
var count = 0;
queueInterval = setInterval(function(){
count++
if (count >= 100){
clearInterval(queueInterval);
}
crossTraffic.postMessage({action: 'keepalive', cTime: Date.now(), count: count});
console.log(`cTime sent ${Date.now()}`);
}
},100);

和修改后的接收器:

const crossTraffic = new BroadcastChannel('crossTraffic');
crossTraffic.onmessage = function(e){
if (e.data.action === 'keepalive'){
console.log(`ctime received ${e.data.cTime}, #${e.data.count}`);
}
}

您将观察到,如果发送方和接收方都是同一窗口中的选项卡,则接收方每秒只会记录一次,但所有 100 条消息都将被发送和接收。

然后,将其中一个选项卡拉到它自己的窗口中,并将它们并排放置,观察它们的日志:消息将以 100 毫秒的间隔发送和接收。

总的来说,好消息,因为我担心广播频道有一些我不知道的严格限制。

现在要确定如何强制后台选项卡每秒更新多次...

相关内容

最新更新