2015-04-23 9 views
5

Ich frage mich: wäre es möglich, die Antwort-Payload in Django REST zu komprimieren?Komprimieren der Antwort-Payload in Django REST?

Momentan sind die Nutzdaten der Antwort reine JSON-Daten. Da jedoch eine ganze Menge Daten hin- und hergeworfen werden, habe ich mich gefragt, ob die Komprimierung der Daten bei den Bandbreitenproblemen helfen würde.

Antwort

7

Die HTTP-Antwortkomprimierung wird höchstwahrscheinlich nicht von Django verarbeitet, sondern von Ihrem HTTP-Server, der die Algorithmen gzip oder deflate verwendet.

Sie müssen nur sicherstellen, dass Ihr HTTP-Server so konfiguriert ist, dass er HTTP-Antworten mit Content-Type Header auf application/json Header komprimiert.

Wie gzip-Kompression für nginx aktivieren: https://rtcamp.com/tutorials/nginx/enable-gzip/

+0

Stellen Sie sicher, dass der Performance-Kompromiss der zusätzlichen CPU/Latenz für die Komprimierung in Betracht gezogen wird. –

+0

@dwightgunning kennst du irgendein Papier, das Hinweise darauf geben könnte? – aumo

+0

http://tweaked.io/guide/nginx/ umreißt den Kompromiss. Solange Sie CPU-Headroom haben, sollten Sie in Ordnung sein. Wähle einfach etwas vernünftiges und gehe weiter ;-) –

1

Die folgenden für mich gearbeitet.

Ich habe gzip auf der nginx-Ebene aktiviert, nicht in Django oder Django Rest Framework.

/etc/nginx/nginx.conf Datei:

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; 
    } 

Dies lässt die auf dem nginx Server komprimiert und als die meisten modernen Browser automatisch wissen, wie zu extrahieren (Dekomprimieren) gzip-Kompression, habe ich nicht Ich muss alles auf meiner Client-Seite tun - auch wenn ich JSON-Daten in einer Angular Spa App erhalte.

Meine 1,3 MB JSON-Nutzlast verwandelte sich in ungefähr 180 KB Nutzlast.

Eine ziemlich schnelle und schnelle Möglichkeit, MB von Daten zu speichern.

0

Wenn Sie den integrierten Django/DRF-Webserver anstelle von Apache oder nginx verwenden, der seinen eigenen WSGI-Server verwendet, funktionieren diese Methoden nicht für Sie.

Allerdings ist Django haben eine gzip-Middleware-in gebaut, die Sie sollten, verwenden können, wie sie in diesen Antworten beschrieben:

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

aber sagen, dass für die Produktion Sie verwenden sollten, Verwenden Sie einen echten Webserver anstelle von Djangos eingebautem.

Verwandte Themen