WARNING!!! Пост больше не имеет смысла. Гипотеза со слов «похоже на то» оказалось бредом окаянным. Оставим для истории.
Когда вкладка неактивна или окно браузера свёрнуто, вкладка переходит в режим лени и тунеядства. Троттлинг. Вставляет много sleep() в поток выполнения JS кода (FPS падает до 7 с 60).
Но эффект странный получается. Вот кусок моего быдлокода.
Вначале где-то на старте скрипта создаётся и долго живёт вебсокетный сокет «sock». Далее в коде периодически дёргается send_packet_x()
для отправки 4-байтового WebSocket пакета бинарного. Обычно всё это работает.
Но когда вкладка свёрнута, начинается пока не совсем изведанное странное. Похоже на то, что вместо посылки 1 пакета с 4 байтами, присылаются 2 пакета - в одном 1 байт, в другом оставшиеся 3. Я так понимаю, вебсокет имеет право бить поток вебсокет-дейтаграммы как ему вздумается, даже если они мелкие?
//
// WebSocket socket.
//
var sock = new WebSocket(some_address);
sock.binaryType = 'arraybuffer';
...
function send_packet_x() {
var b = new ArrayBuffer( 1 + 2 + 1);
var dv = new DataView(b);
var off = 0;
dv.setUint8(off, 11, true); off += 1;
dv.setUint16(off, 2222, true); off += 2;
dv.setUint8(off, 11, true); off += 1;
//
// SEND
//
sock.send(b);
}
UPDATE Я тупое животнае, ошибка была в сервере, а JS отправляет всё нормально.