2015-04-23 4 views
5

Zastanawiam się: czy możliwe byłoby skompresowanie ładunku odpowiedzi w usłudze Django REST?Kompresowanie ładunku odpowiedzi w produkcie Django REST?

W tej chwili, ładunki odpowiedzi są zwykłymi danymi JSON. Jednak istnieje sporo danych do odbicia w przód iw tył, więc zastanawiałem się, czy kompresja danych pomoże rozwiązać problemy z przepustowością.

Odpowiedz

7

Kompresja odpowiedzi HTTP najprawdopodobniej nie będzie obsługiwana przez Django, ale przez serwer HTTP przy użyciu algorytmów gzip lub deflate.

Musisz tylko upewnić się, że twój serwer HTTP jest skonfigurowany do kompresowania odpowiedzi HTTP z Content-Type nagłówkiem ustawionym na application/json.

Jak włączyć kompresję gzip dla nginx: https://rtcamp.com/tutorials/nginx/enable-gzip/

+0

Pamiętaj, aby uwzględnić kompresję wydajności dodatkowego procesora/opóźnienia w celu przeprowadzenia kompresji. –

+0

@dwightgunning Czy znasz jakiś dokument, który dałby wskazówki na ten temat? – aumo

+0

http://tweaked.io/guide/nginx/ określa kompromis. Dopóki masz zapas CPU, powinieneś być w porządku. Wybierz coś rozsądnego i ruszaj się ;-) –

1

Następujące pracował dla mnie.

Rzeczywiście włączono gzip na poziomie nginx, a nie w Django lub Django Rest Framework.

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

To pozostawia kompresji do serwera nginx i jak większość nowoczesnych przeglądarek automatycznie wiedzieć jak wydobyć (dekompresji) kompresję gzip, ja nie Potrzebuję zrobić wszystko po mojej stronie klienta - nawet gdy otrzymuję dane json w aplikacji Angular Spa.

Moje 1,3 MB ładunku JSON zostało przekształcone na ładunek o wielkości około 180 KB.

Bardzo szybki i szybki sposób na zapisanie danych MB.

0

Jeśli korzystasz z wbudowanego serwera WWW Django/DRF zamiast Apache lub nginx, który używa własnego serwera WSGI, więc te metody nie będą działać.

Jednak Django ma wbudowany gzip middleware, który powinien być w stanie wykorzystać, jak opisano w tych odpowiedziach:

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

Mając na uwadze powyższe, do stosowania do produkcji zalecana używać prawdziwego serwera WWW zamiast wbudowanego Django.