ExpressJS Middleware bodyParser имеет очень низкую производительность - PullRequest
0 голосов
/ 19 января 2019

Несколько дней назад мы добавили NewRelic, APM в наш Rest API, который написан на NodeJS и использует EXPRESS JS в качестве среды разработки.

Теперь мы видим, что многие пользователи испытывают плохое время отклика из-заПромежуточное программное обеспечение JSON-анализатора.

Вот один из тех запросов, зарегистрированных в NewRelic: enter image description here

Детализированный отчет: enter image description here

Как вы можете видеть, большую часть времени занимает промежуточное программное обеспечение JSON Parser.

Мы думали, что, возможно, проблема связана с большими полезными нагрузками JSON,который иногда отправляется из API.Но для этого ответа, показанного выше, API возвратил данные с contentLength = 598, который не должен быть слишком большим JSON.

enter image description here

Мы также используем сжатиепромежуточное программное обеспечение, как видно на скриншоте детализации запроса.Что должно уменьшить размер ввода-вывода, отправляемого клиентам назад и вперед.

На данный момент у нас есть сомнения относительно предела параметра, который передается промежуточному программному обеспечению при инициализации.{limit: 50kb} Но при локальном тестировании это не имеет никакого значения.

enter image description here

Мы думали переключиться с protobuf, также подумайте оспособ асинхронного анализа полезных нагрузок JSON.Потому что JSON.parse, который используется промежуточным программным обеспечением, является синхронным процессом и прекращает неблокирующий ввод-вывод.

Но прежде чем приступить к этим изменениям и экспериментам, пожалуйста, если у кого-то возникла такая же проблема, чтобы предложить какое-либо возможное решение.

Сравнительный анализ:

Для сравнительного анализав локальных / сценических средах мы используем JMeter и генерируем нагрузки, чтобы проверить, когда могут произойти такие таймауты, но мы не можем уловить это при тестировании с JMeter.

Спасибо.

...