Azure 函数 v2 中的相同 JSON 响应大于 V1
Same JSON response in Azure-function v2 is larger than V1
最近我们尝试将现有的 v1 Azure 应用程序迁移到 v2 和节点版本 10+。当我们这样做时,我们发现 UI 在函数应用程序上调用 APIS 的应用程序运行缓慢,有时它们会杀死浏览器。当我们调查发现新版本功能应用程序的所有响应大小都增加了 2.5 倍。对于小响应,应用程序运行良好,但当它返回 10MB 以上的大负载时,应用程序开始冻结。在某些情况下,它会达到 100MB+。之所以这么大,是因为新函数返回的JSON被格式化成了白色的space和制表符。这促成了额外的 space。尝试使用 context.res.isRaw = true(在文档中为 'Indicates that formatting is skipped for the response.')并将内容类型设置为 JSON 也设置为文本,但没有任何区别。你们知道为什么它会这样以及有什么解决办法吗?
例子:
v1 曾经以这种方式发送 json:
{'key_1':'value_1',......,'key_n':'value_n'}
现在 v2 发回相同的 JSON(点也代表白色 space):
{
....'key_1': 'value_1',
..........,
..........
'key_n': 'value_n'
}
有人遇到过类似的问题吗?
我还注意到它在内容类型的末尾添加了字符集。这有什么区别吗?
V1:内容类型:application/json;
V2:内容类型:application/json;字符集=utf-8
到目前为止我还没有看到任何此类问题。但是,如果您确定大小的增加只是因为在您的 JSON 响应中添加了额外的空格,您可能希望在将其作为响应发送之前将其缩小到 Web 应用程序:Minify indented JSON string in .NET
综上所述,您可以使用下面的 Regex
表达式:
Regex.Replace(myJSON, "(\"(?:[^\"\\]|\\.)*\")|\s+", "")
或
Regex.Replace(myJSON, @"(""(?:[^""\]|\.)*"")|\s+", "")
最近我们尝试将现有的 v1 Azure 应用程序迁移到 v2 和节点版本 10+。当我们这样做时,我们发现 UI 在函数应用程序上调用 APIS 的应用程序运行缓慢,有时它们会杀死浏览器。当我们调查发现新版本功能应用程序的所有响应大小都增加了 2.5 倍。对于小响应,应用程序运行良好,但当它返回 10MB 以上的大负载时,应用程序开始冻结。在某些情况下,它会达到 100MB+。之所以这么大,是因为新函数返回的JSON被格式化成了白色的space和制表符。这促成了额外的 space。尝试使用 context.res.isRaw = true(在文档中为 'Indicates that formatting is skipped for the response.')并将内容类型设置为 JSON 也设置为文本,但没有任何区别。你们知道为什么它会这样以及有什么解决办法吗? 例子: v1 曾经以这种方式发送 json:
{'key_1':'value_1',......,'key_n':'value_n'}
现在 v2 发回相同的 JSON(点也代表白色 space):
{
....'key_1': 'value_1',
..........,
..........
'key_n': 'value_n'
}
有人遇到过类似的问题吗? 我还注意到它在内容类型的末尾添加了字符集。这有什么区别吗? V1:内容类型:application/json; V2:内容类型:application/json;字符集=utf-8
到目前为止我还没有看到任何此类问题。但是,如果您确定大小的增加只是因为在您的 JSON 响应中添加了额外的空格,您可能希望在将其作为响应发送之前将其缩小到 Web 应用程序:Minify indented JSON string in .NET
综上所述,您可以使用下面的 Regex
表达式:
Regex.Replace(myJSON, "(\"(?:[^\"\\]|\\.)*\")|\s+", "")
或
Regex.Replace(myJSON, @"(""(?:[^""\]|\.)*"")|\s+", "")