【问题标题】:Compressing the response payload in Django REST?在 Django REST 中压缩响应负载?
【发布时间】:2015-07-01 15:17:40
【问题描述】:

我想知道:是否可以在 Django REST 中压缩响应负载?

目前,响应负载是纯 JSON 数据。但是,有很多数据要来回反弹,所以我想知道压缩数据是否有助于解决带宽问题。

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    HTTP 响应压缩很可能不是由 Django 处理,而是由您的 HTTP 服务器使用 gzip 或 deflate 算法处理。

    您只需要确保您的 HTTP 服务器配置为压缩 HTTP 响应并将 Content-Type 标头设置为 application/json

    如何为 nginx 启用 gzip 压缩:https://rtcamp.com/tutorials/nginx/enable-gzip/

    【讨论】:

    • 一定要考虑额外 CPU/延迟的性能权衡来执行压缩。
    • @dwightgunning 你知道有什么论文可以提供这样做的线索吗?
    • tweaked.io/guide/nginx 概述了权衡。只要你有 CPU 空间,你应该没问题。只需选择一些理智的东西并继续前进;-)
    • @dwightgunning 谢谢!
    【解决方案2】:

    以下内容对我有用。

    我实际上是在 nginx 级别打开 gzip,而不是在 Django 或 Django Rest Framework 中。

    /etc/nginx/nginx.conf 文件:

        http {
    
            #... other settings ...#
    
            ##
            # Gzip Settings
            ##
    
            gzip on;
            gzip_disable "msie6";
    
            gzip_vary on;
            gzip_proxied any;
            gzip_comp_level 6;
            gzip_buffers 16 8k;
            gzip_http_version 1.1;
            gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
        }
    

    这将压缩留给 nginx 服务器,并且由于大多数现代浏览器自动知道如何提取(解压缩)gzip 压缩,因此我不需要在客户端执行任何操作 - 即使在 Angular 中接收 json 数据时也是如此水疗应用程序。

    我的 1.3 MB JSON 负载变成了大约 180 KB 的负载。

    一种非常快速且快速的方式来保存 MB 的数据。

    【讨论】:

      【解决方案3】:

      如果您使用的是 Django / DRF 内置 Web 服务器而不是 Apache 或 nginx,它使用自己的 WSGI 服务器,那么这些方法对您不起作用。

      但是,Django 确实有一个内置的 gzip 中间件,您应该可以使用它,如这些答案中所述:

      https://stackoverflow.com/a/1864377/2540707
      https://stackoverflow.com/a/14821684/2540707

      话虽如此,对于生产用途,您应该使用真正的 Web 服务器,而不是 Django 的内置服务器。

      【讨论】:

        猜你喜欢
        • 2014-02-20
        • 1970-01-01
        • 2015-07-17
        • 2019-03-04
        • 1970-01-01
        • 1970-01-01
        • 2012-02-12
        • 2013-12-02
        • 2023-04-09
        相关资源
        最近更新 更多