【问题标题】:how to reduce RestFull Api response size?如何减少 RestFul Api 响应大小?
【发布时间】:2017-05-11 10:12:31
【问题描述】:

我有一个网站女巫使用 Angularjs 连接到一个用 php 编写的 api 来获取数据并执行操作,然后这个 api 发送一个 json 结果。在检查网站性能时,我发现我的服务器响应比从网上下载响应要慢!!! 如何通过较短的别名更改 json 属性名称?例如:

 {
     "name": "test", 
     "family": "testi" 
 }

必须转换为:

 {
     "n": "test", 
     "f": "testi"
 }

如果我的响应包含一个对象数组,那么第二种形式的响应内容长度确实要短得多。

对于这个问题,客户端和服务器端有什么技术吗?还是有其他解决方案?

【问题讨论】:

  • 除非您可以控制 API 的两个端点,否则无法减小响应的大小(除了压缩连接,这只会将负载转移到 CPU 而不是网络)。如果您确实有控制权,那么仅重写您的 api 应该没有问题吗?这不可能简单地在“幕后”自动化。
  • 另外:现在CPU / RAM /带宽等资源非常丰富,写一个干净的api比节省一些带宽字节要好得多。 (您的示例在 8 个字节上有所不同,我知道它只是为了显示......但即使它是 800 个字节,即使您每天对该资源有一百万个请求,它也只会总计约 770mb...... ,到那时可能会被认为是微不足道的)
  • 我的问题是“时间”。我的网站花费 11 秒从网络下载此响应,用户必须等到此操作完成。我想减少这段时间以获得最佳的用户体验。
  • 我想知道是否有任何技术或最佳实践可以实现这一目标?
  • 根据您的网络服务器和您对其配置文件的控制,您可以尝试启用压缩(例如,对 apache 使用 mod_gzip 或 mod_deflate)。

标签: php angularjs json


【解决方案1】:

我们可以通过 GZIP 压缩我们的响应。还有一些高性能的序列化协议,如 Protobuff 或 Thrift,它们既快速又安全,但我认为它们是服务器到服务器的解决方案,在前端区域使用它们并不是一个非常有效的解决方案。此外,我们可以创建一些映射,将后端 DTO 中的最小化属性名称映射到前端数据模型。

它们是在我的探索和经验中建立的解决方案。欢迎任何新的建议;

【讨论】:

    猜你喜欢
    • 2012-04-08
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 2020-10-05
    • 2021-05-02
    • 1970-01-01
    相关资源
    最近更新 更多