Тот же ответ JSON в функции Azure версии 2 больше, чем ответ версии 1

Недавно мы попытались перенести наши существующие приложения Azure версии 1 на версии 2 и Node 10+. Когда мы это сделали, мы обнаружили, что приложение пользовательского интерфейса, которое вызывает APIS в приложении-функции, работало медленно, иногда убивая браузер. Когда мы исследовали, выяснилось, что все размеры ответов от новой версии функционального приложения были увеличены примерно в 2,5 раза. Для небольших ответов приложение работало нормально, но когда оно возвращало большую полезную нагрузку, например 10 МБ+, приложение начинало зависать. В некоторых случаях он доходил до 100 МБ+. Причина, по которой он был таким большим, заключалась в том, что JSON, возвращаемый новой функцией, был отформатирован с пробелами и вкладками. И это способствовало дополнительному пространству. Пробовал использовать context.res.isRaw = true (что «указывает, что форматирование пропущено для ответа» в документации) и установить тип содержимого в JSON также для текста, но это не имело никакого значения. Ребята, вы знаете, почему он ведет себя таким образом, и какое-либо решение? Пример: v1 используется для отправки json следующим образом:

{'key_1':'value_1',......,'key_n':'value_n'}

Теперь версия 2 возвращает тот же JSON (точки также обозначают пробелы):

{
....'key_1': 'value_1',
..........,
..........
'key_n': 'value_n'
}

Кто-нибудь сталкивался с подобной проблемой? Я также заметил, что он добавляет кодировку в конце типа контента. Это имеет значение? V1: Тип контента: application/json; V2: Тип контента: application/json; кодировка = utf-8

Сожмите ответ вашего API.

Ian Kemp 10.12.2020 22:53

Есть ли встроенный механизм для сжатия ответа функции app. Или нам нужно использовать внешний инструмент?

Taher Ghulam Mohammed 10.12.2020 23:07
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
148
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не видел такой проблемы до сих пор. Но если вы уверены, что это увеличение размера связано только с добавлением дополнительных пробелов в ваш ответ JSON, вам следует минимизировать его перед отправкой в ​​качестве ответа веб-приложению: Сократите строку JSON с отступом в .NET.

Таким образом, вы можете использовать приведенное ниже выражение Regex:

Regex.Replace(myJSON, "(\"(?:[^\"\\\\]|\\\\.)*\")|\\s+", "$1")

ИЛИ

Regex.Replace(myJSON, @"(""(?:[^""\\]|\\.)*"")|\s+", "$1")

Это близкое решение, которое я пробовал. Я использовал модуль npm serialize-javascript, который делает то же самое. Удаляет пробелы, уменьшает размер json. Будет принимать этот ответ. Но было бы лучше, если бы сама функция Azure предоставила возможность сделать это вместо использования внешней библиотеки.

Taher Ghulam Mohammed 11.12.2020 19:13

Другие вопросы по теме