【问题标题】:Compressing a JSON response from a Rails app压缩来自 Rails 应用程序的 JSON 响应
【发布时间】:2011-01-26 17:33:09
【问题描述】:

我们有一个应用可以查询客户的位置。我们已经到了一些客户可能拥有超过 10,000 个地点的地步。对此的 JSON 响应可能会变得非常大,有时超过 1mb。

我首先想知道压缩它的最佳方式。我们在一个使用 JRuby 在特立尼达运行的 Rails 应用程序前面有 apache。我可以将 mod_deflate 设置为始终压缩应用程序/json 的任何响应吗?我该怎么做呢?

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

【问题讨论】:

    标签: ruby-on-rails json apache2 gzip


    【解决方案1】:

    一般来说,对于较新版本的 Rails,你可以通过添加来做到这一点

    use Rack::Deflater
    

    config.ru 文件中的“运行”行之前。这将与支持 gzip 的浏览器/客户端完美配合。我们在主要网站的生产环境中使用它。

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

    【讨论】:

      【解决方案2】:

      如果浏览器支持 gzip'd/deflated 数据,那么 JSON 会很好地通过它。 AJAX 数据只是代表脚本而不是人类完成的常规 HTTP 请求。在 HTTP 级别,传输一些 HTML 或 JSON 字符串之间的区别绝对为零——它只是数据。

      【讨论】:

        【解决方案3】:

        对于 Google 员工...[我正在运行 Apache 2.2.16,不关心 IE6]

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

         AddOutputFilterByType DEFLATE application/json
        

        您可以使用 Firefox / Firebug / Net 选项卡检查服务器响应标头

        【讨论】:

          【解决方案4】:

          首先,通过运行此命令确保您已安装 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
          

          第一个代码块禁用 gzipping exe、gzs、pdfs..等

          第二个代码块跳过不支持它的浏览器的通缩。

          最后,再次重启apache

          service apache2 restart
          

          设置是从以下链接复制的: http://www.howtoforge.com/apache2_mod_deflate

          【讨论】:

            猜你喜欢
            • 2013-05-21
            • 2011-06-01
            • 2015-07-31
            • 1970-01-01
            • 1970-01-01
            • 2011-03-12
            • 1970-01-01
            • 2013-11-02
            • 2017-11-26
            相关资源
            最近更新 更多