如何在 Django 中压缩 JSON 请求?
Posted
技术标签:
【中文标题】如何在 Django 中压缩 JSON 请求?【英文标题】:How to compress JSON requests in Django? 【发布时间】:2011-07-01 21:18:44 【问题描述】:我正在向 jQuery 发送大量 JSON 信息(大约 40KB),如果不对每个对象重复描述符,那么这些信息可能会小很多。 (例如 'name': , 'title': 'image': ...)
通常我会这样发送 JSON 数据:
reply = json.dumps('items':itemsArray)
return HttpResponse(reply, 'mimetype/javascript')
有没有一种方法可以让我为客户端(如果可用)压缩它,或者使用第三方实用程序在服务器和客户端之间的对象属性名称的缩短版本之间进行转换,使用 jQuery map()
函数?
【问题讨论】:
***.com/questions/395505/… 【参考方案1】:此答案已过时,不应遵循。使用 GZip 中间件已被证明会危及加密。我将保留旧答案,但请勿遵循此建议。
您需要 GZip 中间件: django.middleware.gzip.GZipMiddleware。当然,也完全可以让您的网络服务器处理压缩。一个例子是:mod_deflate
【讨论】:
此链接现已损坏【参考方案2】:GZipping 由网络服务器和浏览器处理。所以你应该检查你的 webserver 和 webservers 配置,它会压缩响应。
为了缩小:JSON 已经是一个非常小的协议。对于仍然缩短它及其索引,您可能找不到任何东西,因为您还必须在两侧映射它,php 中的服务器和 JavaScript 中的客户端。调整现有的缩小器也需要注意,因为它必须保持一致和映射,而不仅仅是缩小,因为你必须在另一边再次对其进行解码。
【讨论】:
【参考方案3】:我得到了以下工作:
只需让 nginx 进行压缩工作就更顺畅了。
我对 /etc/nginx/nginx.conf 文件进行了以下更改以“打开”gzip 压缩,仅此而已。大多数现代浏览器会自动提取(解压缩)gzip 数据,因此客户端无需执行任何操作。
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;
【讨论】:
【参考方案4】:我有一个类似的场景,我从 django 返回 70k 点到传单。 geojson 序列化程序花费了太多时间。对我来说,当我将 lat、lng 和 id 作为 JsonResponse 返回,然后在传单中的客户端创建几何图形时,它会有所帮助。
【讨论】:
以上是关于如何在 Django 中压缩 JSON 请求?的主要内容,如果未能解决你的问题,请参考以下文章
在没有数据持久性的情况下,如何最好地在 Django 中压缩表单:最 Djangonic 的方法是啥? [关闭]
如何在 Django 中压缩多个上传的文件,然后再将其保存到数据库?