JavaScript WebSocket.bufferedAmount — скільки байтів чекає надсилання
Властивість bufferedAmount показує, скільки байтів уже поставлено в чергу на надсилання, але ще не пішло в мережу.
Загальний опис
send() не чекає — він кладе дані в буфер і одразу повертає керування. Якщо слати швидше, ніж дозволяє мережа, буфер росте нескінченно — і застосунок з'їдає пам'ять.
Це реальна проблема для потокових даних: котирувань, координат курсора, телеметрії.
Рецепт один: перед надсиланням перевіряти bufferedAmount і пропускати кадр, якщо черга завелика. Краще втратити проміжне значення, ніж утопити браузер.
- Порада
-
Шлеш часті оновлення (координати, котирування) — перевіряй
автор: NagarDbufferedAmount. Це єдиний спосіб не переповнити буфер на повільній мережі.
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| bufferedAmount | 16+ | 11+ | 7+ | 12.1+ | 12+ | 10+ |
| Переглядач | ||||
|---|---|---|---|---|
| bufferedAmount | 4.4+ | yes | yes | 6+ |
Приклади
+ запропонувати свій приклад у пісочниці
Не сипати в мережу швидше, ніж вона встигає.
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, 'байтів чекає');
Коментарі
Коментарів ще немає — будьте першим!