我们有一个应用程序可以查询客户的位置。我们已经达到了一些客户可能拥有超过10,000个位置的程度。对此的JSON响应可能会非常大,有时会超过1mb。
我首先想知道压缩这个的最佳方法。我们在使用JRuby在trinidad中运行的Rails应用程序前面有apache。我可以设置mod_deflate以始终压缩application / json的任何响应吗?我该怎么做呢?
接下来,对gzip的json有什么浏览器支持?当我gzip一个200k的样本响应时,它下降到30k。这是一笔可观的节省。我们真的希望能够最小化响应的大小,而不必最小化返回的位置数。
答案 0 :(得分:11)
通常,对于较新版本的Rails,您可以通过添加
来实现use Rack::Deflater
在 config.ru 文件中的“运行”行之前。这将与支持gzip的浏览器/客户端完美配合。我们在主要网站上使用它。
JRuby用户的注意:这假设您的Rails应用程序是通过Rack启动的,它通常不适用于JRuby。您需要最新版本的JRuby-Rack并在Warbler中配置它以“机架”模式而不是“轨道”模式运行。
答案 1 :(得分:5)
如果浏览器支持gzip / deflated数据,那么JSON会很好地完成它。 AJAX数据只是代表脚本而不是人类的常规HTTP请求。在HTTP级别,传输一些HTML或JSON字符串之间绝对没有区别 - 它只是数据。
答案 2 :(得分:1)
对于Google员工...... [我正在运行Apache 2.2.16并且不关心IE6]
使用Content-Encoding = gzip的JSON响应在我编辑mod_deflate.conf以包含此内容之前没有发生:
AddOutputFilterByType DEFLATE application/json
您可以使用Firefox / Firebug / Net选项卡检查服务器响应标头
答案 3 :(得分:0)
首先,确保通过运行此命令安装了apache的mod_deflate。
a2enmod deflate
如果安装了此命令,请重启apache。如果没有,你现在很好。
service apache2 restart
通常位于apache2.conf
的{{1}}将此行附加到文件末尾。这将包括我们稍后将创建的文件。
/etc/apache2
接下来,我们将使用以下选项编辑mod_deflate.conf:
Include mod_deflate.conf
第一个代码块禁用gzipping exes,gzs,pdfs ..等等
第二个代码块会从不支持它的浏览器中跳过通缩。
最后,再次重启apache
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \
\.(?:exe|t?gz|zip|bz2|sit|rar)$ \
no-gzip dont-vary
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary
#Skip browsers with known problems
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
设置是从以下链接复制的: http://www.howtoforge.com/apache2_mod_deflate