JavaScript WebSocket.bufferedAmount — скільки байтів чекає надсилання
Властивість bufferedAmount показує, скільки байтів уже поставлено в чергу на надсилання, але ще не пішло в мережу.
Загальний опис
send() не чекає — він кладе дані в буфер і одразу повертає керування. Якщо слати швидше, ніж дозволяє мережа, буфер росте нескінченно — і застосунок з'їдає пам'ять.
Це реальна проблема для потокових даних: котирувань, координат курсора, телеметрії.
Рецепт один: перед надсиланням перевіряти bufferedAmount і пропускати кадр, якщо черга завелика. Краще втратити проміжне значення, ніж утопити браузер.
- Порада
-
Шлеш часті оновлення (координати, котирування) — перевіряй
автор: NagarDbufferedAmount. Це єдиний спосіб не переповнити буфер на повільній мережі.
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| 5 | 7 | 5 | 12.1 | 12 | 10 |
| Переглядач | ||||
|---|---|---|---|---|
| 4.4 | 18 | 7 | 4.2 |
| Переглядач | ||
|---|---|---|
| 22.0.0 | 1.4 |
Приклади
+ запропонувати свій приклад у пісочниці
Не сипати в мережу швидше, ніж вона встигає.
const socket = {
bufferedAmount: 'значення',
send: 'значення'
};
const MAX_BUFFER = 64 * 1024; // 64 КБ
function sendPosition(x, y) {
// мережа не встигає — пропускаємо кадр
if (socket.bufferedAmount > MAX_BUFFER) {
console.warn('Буфер переповнений, пропускаємо');
return;
}
socket.send(JSON.stringify({ x, y }));
}
console.log(socket.bufferedAmount, 'байтів чекає');
Коментарі
Коментарів ще немає — будьте першим!