Урок: измерить размер JSON до отправки
Число символов в поле не равно размеру готового JSON-тела. В этом уроке вы измерите сериализованную строку в байтах UTF-8, включая имена ключей, кавычки и экранирование.
Назначение
Число символов в поле не равно размеру готового JSON-тела. В этом уроке вы измерите сериализованную строку в байтах UTF-8, включая имена ключей, кавычки и экранирование.
Как это работает
Сначала выполните JSON.stringify, затем кодирование TextEncoder. Пример не отправляет данные. Используются только учебные значения, чтобы не раскрывать персональную информацию в консоли.
Пример
const payload = {title:"Урок", note:"Строка 1" + String.fromCharCode(10) + "Строка 2"};
const body = JSON.stringify(payload);
const bytes = new TextEncoder().encode(body);
console.log({body, codeUnits:body.length, utf8Bytes:bytes.byteLength});
Что должно получиться
Размер учитывает весь сериализованный документ. Перевод строки представлен JSON-экранированием, а кириллица занимает несколько байтов UTF-8. Значения length и byteLength поэтому могут отличаться.
Граница применения и частая ошибка
Результат не включает HTTP-заголовки, сетевые накладные расходы и возможное сжатие. Лимит сервера может относиться к другой стадии обработки. Не заменяйте такой оценкой серверное ограничение размера и не логируйте рабочие токены вместе с телом.
Самостоятельная проверка
Сравните короткое латинское название, кириллицу и эмодзи. Добавьте вложенный массив и посмотрите рост тела. Уточните, ограничивает ваш сервер байты запроса, распакованный размер или конкретные поля.