2015-04-23 4 views
5

मैं सोच रहा था: क्या Django REST में प्रतिक्रिया पेलोड को संपीड़ित करना संभव होगा?Django REST में प्रतिक्रिया पेलोड को संपीड़ित करना?

फिलहाल, प्रतिक्रिया पेलोड सादे JSON डेटा हैं। हालांकि, आगे और पीछे उछालने के लिए बहुत सारे डेटा हैं इसलिए मैं सोच रहा था कि डेटा को संपीड़ित करने से बैंडविड्थ के मुद्दों में मदद मिलेगी।

उत्तर

7

HTTP प्रतिक्रिया संपीड़न संभवतः Django द्वारा संभाला नहीं जाएगा, लेकिन आपके HTTP सर्वर द्वारा gzip या डिफ्लेट एल्गोरिदम का उपयोग करके किया जाएगा।

आपको बस यह सुनिश्चित करने की आवश्यकता है कि आपका HTTP सर्वर Content-Type हेडर सेट application/json पर HTTP प्रतिक्रियाओं को संपीड़ित करने के लिए कॉन्फ़िगर किया गया है।

कैसे nginx के लिए gzip संपीड़न सक्षम करने के लिए: https://rtcamp.com/tutorials/nginx/enable-gzip/

+0

संपीड़न करने के लिए अतिरिक्त CPU/विलंबता के प्रदर्शन व्यापार पर विचार करें। –

+0

@dwightgunning क्या आप किसी भी पेपर को जानते हैं जो ऐसा करने पर सुराग देगा? – aumo

+0

http://tweaked.io/guide/nginx/ ट्रेडऑफ को रेखांकित करता है। जब तक आपके पास सीपीयू हेडरूम है तो आपको ठीक होना चाहिए। बस कुछ साईं चुनें और आगे बढ़ें ;-) –

1

मेरे लिए काम किया गया था।

मैं वास्तव में Djgin या Django Rest Framework के भीतर नहीं, nginx स्तर पर gzip चालू कर दिया।

/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 सर्वर अप करने के लिए संपीड़ित करने और सबसे आधुनिक ब्राउज़र स्वत: कैसे (uncompress) gzip संपीड़न निकालने के लिए जानते हैं छोड़ देता है, मैंने नहीं किया मेरे क्लाइंट-साइड पर कुछ भी करने की ज़रूरत है - यहां तक ​​कि एक कोणीय स्पा ऐप के अंदर जेसन डेटा प्राप्त करते समय भी।

मेरा 1.3 एमबी जेएसओएन पेलोड लगभग 180 केबी पेलोड में बदल गया।

एमबी के डेटा को बचाने के लिए एक बहुत तेज़ और तेज़ तरीका।

0

यदि आप अपाचे या nginx के बजाय Django/DRF अंतर्निर्मित वेब सर्वर का उपयोग कर रहे हैं, जो अपने स्वयं के WSGI सर्वर का उपयोग करता है, तो वे विधियां आपके लिए काम नहीं करेंगी।

हालांकि, Django है एक अंतर्निहित gzip मिडलवेयर जो आप, इन उत्तरों में वर्णित के रूप में उपयोग करने के लिए सक्षम होना चाहिए:

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

इसका अर्थ है कि उत्पादन का उपयोग के लिए आपको चाहिए Django के अंतर्निहित एक के बजाय वास्तविक वेब सर्वर का उपयोग कर रहे हैं।