Рубрики
Без рубрики

Как json.stringify убил мой экспресс -сервер

Получение до 300% больше производительности с Express Server с простой фотографией изменения M … с меткой JavaScript, ExpressJS, Node.

Получение до 300% больше производительности от Express Server с простым изменением

фото Макс Чен на Неспособный

Express является одной из наиболее используемых фреймворков Node.js, когда вам нужно создавать сервер.

Вот пример простого Express Server с одной конечной точкой, возвращая небольшой статический ответ JSON.

Запуск кода выше и сравнивает его, используя AutoCannon Для нескольких раз показывает сервер, работая на MacBook Pro 2018 года, обрабатывает примерно 190 тыс. Запросы за 11 секунд RPS

➜ autocannon [http://localhost:3000/not\_cached](http://localhost:3000/not_cached)

Мы можем сделать лучше!

Поскольку в этом примере так мало кода, есть только одно место, где мы можем искать лучшую производительность – экспресс -исходный код, определение функции JSON на объекте ответа (полный код, найденный по адресу: https://github .com/express/express/blob/master/lib/response.js )

Самая важная часть происходит в строке 22, строго – Для каждого Res.Json, который мы используем, возвращаемое значение строкано быть отправленным в качестве ответа HTTP. После строки данных установлен тип контента и отправляется ответ.

JSON.Stringify – это операция, связанная с процессором, а не лучший друг узла, поэтому давайте попробуем сделать это только один раз.

Мы можем осудить результат и сохранить его с переменной, и для каждого входящего запроса мы можем установить тип контента в приложение/JSON и использовать метод End, чтобы записать строку непосредственно в сокет:

Запуск AutoCannon снова дает нам около 350 тыс. Запрос за 11 секунд RP. Улучшение 80%.

Но подождите, вы пообещали мне на 300% улучшения !! И ты был бы прав!

Разница в производительности в значительной степени зависит от возвращаемого объекта. Я хотел показать, что даже небольшое изменение на небольшом объекте может быть значительным.

Попробуйте сделать то же самое с большим объектом JSON (например, 500–600 КБ), вы получите повышение производительности. На самом деле, использование res.json может фактически привести к тому, что ваш сервер сбой в ограниченной среде, такой как контейнер, работающий на Kubernetes.

Выводы

При использовании Express, если ваш сервер работает с плохой RPS, попробуйте кэшировать любой общий ответ и напишите строку непосредственно в потоку ответов вместо использования res.json, который использует json.stringify каждый раз.

Оригинал: “https://dev.to/efishtain/how-json-stringify-killed-my-express-server-3lke”