Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 从Rails应用压缩JSON响应_Ruby On Rails_Json_Apache2_Gzip - Fatal编程技术网

Ruby on rails 从Rails应用压缩JSON响应

Ruby on rails 从Rails应用压缩JSON响应,ruby-on-rails,json,apache2,gzip,Ruby On Rails,Json,Apache2,Gzip,我们有一个为客户查询位置的应用程序。我们已经到了这样的地步,一些客户可能拥有超过10000个地点。对此的JSON响应可能非常大,有时超过1mb 首先我想知道最好的压缩方法。我们在特立尼达和JRuby运行的Rails应用程序前面安装了apache。我是否可以将mod_deflate设置为始终压缩任何属于application/json的响应?我该怎么做呢 接下来,浏览器对gzip'dJSON的支持是什么?当我gzip一个200k的样本响应时,它会下降到30k。这是一笔可观的节省。我们真的希望能够最

我们有一个为客户查询位置的应用程序。我们已经到了这样的地步,一些客户可能拥有超过10000个地点。对此的JSON响应可能非常大,有时超过1mb

首先我想知道最好的压缩方法。我们在特立尼达和JRuby运行的Rails应用程序前面安装了apache。我是否可以将mod_deflate设置为始终压缩任何属于application/json的响应?我该怎么做呢


接下来,浏览器对gzip'dJSON的支持是什么?当我gzip一个200k的样本响应时,它会下降到30k。这是一笔可观的节省。我们真的希望能够最小化响应的大小,而不必最小化返回的位置数。

如果浏览器支持gzip'd/deflated数据,那么JSON将很好地处理它。AJAX数据只是代表脚本而不是人执行的常规HTTP请求。在HTTP级别上,传输一些HTML或JSON字符串之间完全没有区别——它们只是数据。

首先,通过运行此命令确保安装了apache的mod_deflate

a2enmod deflate
如果此命令安装了它,请重新启动apache。如果不是,你现在就好了

service apache2 restart
apache2.conf
中,通常位于
/etc/apache2
中,将此行附加到文件末尾。这将包括一个我们将在稍后创建的文件

Include mod_deflate.conf
接下来,我们将使用以下选项编辑mod_deflate.conf:

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
第一段代码禁用gzip EXE、gzs、PDF。。等

第二块代码跳过不支持它的浏览器

最后,再次重新启动apache

service apache2 restart
这些设置是从以下链接复制的:
对于谷歌人来说。。。[我正在运行Apache2.2.16,不关心IE6]

在编辑mod_deflate.conf以包含以下内容之前,Content Encoding=gzip的JSON响应不会发生:

 AddOutputFilterByType DEFLATE application/json

您可以使用Firefox/Firebug/Net选项卡检查服务器响应标题。一般来说,对于较新版本的Rails,您可以通过添加

use Rack::Deflater
config.ru文件中的“run”行之前。这将与支持gzip的浏览器/客户端完美配合。我们在主要网站的制作中使用它

注意对于JRuby用户:这假设您的Rails应用程序是通过Rack启动的,而JRuby通常不是这样。您需要JRuby Rack的最新版本,并在Warbler中将其配置为以“Rack”模式而不是“rails”模式运行