Недавно мы попытались перенести наши существующие приложения 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
Есть ли встроенный механизм для сжатия ответа функции app. Или нам нужно использовать внешний инструмент?
Я не видел такой проблемы до сих пор. Но если вы уверены, что это увеличение размера связано только с добавлением дополнительных пробелов в ваш ответ JSON, вам следует минимизировать его перед отправкой в качестве ответа веб-приложению: Сократите строку JSON с отступом в .NET.
Таким образом, вы можете использовать приведенное ниже выражение Regex
:
Regex.Replace(myJSON, "(\"(?:[^\"\\\\]|\\\\.)*\")|\\s+", "$1")
ИЛИ
Regex.Replace(myJSON, @"(""(?:[^""\\]|\\.)*"")|\s+", "$1")
Это близкое решение, которое я пробовал. Я использовал модуль npm serialize-javascript, который делает то же самое. Удаляет пробелы, уменьшает размер json. Будет принимать этот ответ. Но было бы лучше, если бы сама функция Azure предоставила возможность сделать это вместо использования внешней библиотеки.
Сожмите ответ вашего API.