2015-04-23 27 views
5

Mi chiedevo: sarebbe possibile comprimere il carico utile della risposta in Django REST?Compressione del payload della risposta in Django REST?

Al momento, i payload di risposta sono semplici dati JSON. Tuttavia, ci sono un sacco di dati da rimbalzare avanti e indietro quindi mi chiedevo se la compressione dei dati avrebbe aiutato con i problemi di larghezza di banda.

risposta

7

La compressione della risposta HTTP molto probabilmente non verrà gestita da Django ma dal server HTTP che utilizza gli algoritmi gzip o deflate.

È sufficiente assicurarsi che il server HTTP sia configurato per comprimere le risposte HTTP con l'intestazione Content-Type impostata su application/json.

Come abilitare la compressione gzip per nginx: https://rtcamp.com/tutorials/nginx/enable-gzip/

+0

Assicurarsi di considerare il compromesso delle prestazioni della CPU/latenza aggiuntiva per eseguire la compressione. –

+0

@dwightgunning conosci qualche documento che potrebbe dare indizi su come farlo? – aumo

+0

http://tweaked.io/guide/nginx/ delinea il compromesso. Finché hai headroom della CPU, dovresti stare bene. Basta prendere qualcosa di sano e andare avanti ;-) –

1

Di seguito ha lavorato per me.

In realtà ho attivato gzip a livello di nginx, non in Django o Django Rest Framework.

file di /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; 
    } 

Questo lascia la compressione fino al server nginx e, come la maggior parte dei browser moderni automaticamente sapere come estrarre (decomprimere) compressione gzip, non l'ho fatto è necessario fare qualsiasi cosa sul mio lato client - anche quando si ricevono dati json all'interno di un'app Angular spa.

Il mio carico di lavoro JSON da 1,3 MB è stato trasformato in un carico utile di circa 180 KB.

Un modo piuttosto veloce e veloce per salvare i dati di MB.

0

Se si utilizza il server Web incorporato Django/DRF piuttosto che Apache o nginx, questo utilizza il proprio server WSGI, pertanto tali metodi non funzioneranno.

Tuttavia, Django ha un built-in gzip middleware che si dovrebbe essere in grado di utilizzare, come descritto in queste risposte:

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

Detto questo, per utilizzare la produzione si dovrebbe stare usando un vero web server piuttosto che uno integrato di Django.

Problemi correlati