【问题标题】:Same JSON response in Azure-function v2 is larger than V1Azure-function v2 中的相同 JSON 响应大于 V1
【发布时间】:2023-03-08 11:54:01
【问题描述】:

最近我们尝试将现有的 v1 azure 应用程序迁移到 v2 和节点版本 10+。当我们这样做时,我们发现在函数应用程序上调用 APIS 的 UI 应用程序运行缓慢,有时它们会杀死浏览器。当我们调查发现新版本功能应用程序的所有响应大小都增加了 2.5 倍。对于小的响应,应用程序运行良好,但是当它返回一个像 10MB+ 这样的大负载时,应用程序开始冻结。在某些情况下,它达到了 100MB+。之所以这么大,是因为从新函数返回的 JSON 是用空格和制表符格式化的。这促成了额外的空间。尝试使用 context.res.isRaw = true (在文档中“表示响应的格式被跳过。”)并将内容类型设置为 JSON 也设置为文本,但它没有任何区别。你们知道为什么它会以这种方式表现以及任何解决方案吗? 例子: v1 曾经以这种方式发送 json:

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

现在 v2 发回相同的 JSON(点也代表空白):

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

有人遇到过类似的问题吗? 我还注意到它在内容类型的末尾添加了字符集。这有什么区别吗? V1:内容类型:application/json; V2:内容类型:application/json;字符集=utf-8

【问题讨论】:

  • 压缩 API 的响应。
  • 是否有内置机制来压缩函数应用的响应。还是我们需要使用外部工具?

标签: javascript node.js azure-functions azure-functions-core-tools


【解决方案1】:

到目前为止,我还没有看到任何此类问题。但是,如果您确定大小的增加仅仅是因为在您的 JSON 响应中添加了额外的空格,您可能希望在将其作为响应发送到 Web 应用程序之前将其缩小:@987654321 @

综上所述,你可以使用下面的Regex表达式:

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

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

【讨论】:

  • 这是我尝试过的接近解决方案。我使用了一个 npm 模块 serialize-javascript ,它做同样的事情。删除空格会缩小 json 大小。将接受这个答案。但是如果 Azure - 函数本身提供了一个选项而不是使用外部库,那就更好了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-15
  • 2020-04-09
  • 2019-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多