我想知道:是否有可能在Django REST中壓縮響應負載?壓縮Django REST中的響應負載?
此刻,響應有效載荷是純JSON數據。然而,有相當多的數據來回反彈,所以我想知道壓縮數據是否有助於解決帶寬問題。
我想知道:是否有可能在Django REST中壓縮響應負載?壓縮Django REST中的響應負載?
此刻,響應有效載荷是純JSON數據。然而,有相當多的數據來回反彈,所以我想知道壓縮數據是否有助於解決帶寬問題。
HTTP響應壓縮很可能不會由Django處理,而是由您的HTTP服務器使用gzip或deflate算法處理。
您只需確保您的HTTP服務器配置爲壓縮HTTP響應Content-Type
標頭設置爲application/json
。
如何啓用gzip壓縮的nginx:https://rtcamp.com/tutorials/nginx/enable-gzip/
的,我下面的工作。
我實際上在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 spa應用程序中接收json數據。
我的1.3 MB JSON負載變成了大約180 KB的負載。
一種非常快捷的方式來保存MB的數據。
如果您使用的是Django/DRF內置Web服務器而不是Apache或nginx,它使用自己的WSGI服務器,所以這些方法不適用於您。
然而,Django的確實有一個內置的gzip中間件,你應該能夠使用,因爲在這些答案中描述:
https://stackoverflow.com/a/1864377/2540707
https://stackoverflow.com/a/14821684/2540707
話雖這麼說,對於生產中使用,你應該使用真正的Web服務器而不是Django的內置服務器。
確保考慮執行壓縮的額外CPU /延遲的性能權衡。 –
@dwightgunning你知道任何會提供線索的論文嗎? – aumo
http://tweaked.io/guide/nginx/概述權衡。只要你有CPU空間,你應該沒問題。只要選擇一些理智的,並繼續前進;-) –