Сжатие ответа JSON из приложения Rails - PullRequest
3 голосов
/ 26 января 2011

У нас есть приложение, которое запрашивает местоположение для клиента. Мы приближаемся к тому моменту, когда у некоторых клиентов может быть более 10000 мест. Ответ JSON для этого может быть довольно большим, иногда более 1 МБ.

Мне интересно, прежде всего, лучший способ сжать это. У нас есть apache перед приложением Rails, работающим в Тринидаде с JRuby. Могу ли я просто установить mod_deflate, чтобы всегда сжимать любые ответы, которые являются application / json? Как мне это сделать?

Далее, что поддерживает браузер для gzip'd json? Когда я gzip образец ответа 200 КБ, он падает до 30 КБ. Это значительная экономия. Мы действительно хотели бы иметь возможность минимизировать размер этого ответа без необходимости минимизировать количество возвращаемых местоположений.

Ответы [ 4 ]

11 голосов
/ 28 августа 2012

Как правило, для более новых версий Rails вы можете сделать это, добавив

use Rack::Deflater

перед строкой "run" в файле config.ru .Это будет прекрасно работать с браузерами / клиентами, которые поддерживают gzip.Мы используем его в работе на крупных веб-сайтах.

Примечание для пользователей JRuby: это предполагает, что ваше приложение Rails запускается через Rack, что часто не для JRuby.Вам нужна последняя версия JRuby-Rack и настроить ее в Warbler для работы в режиме 'rack' вместо режима 'rails'.

5 голосов
/ 26 января 2011

Если браузер поддерживает gzip'd / deflated данные, то JSON пройдет через это очень хорошо. Данные AJAX - это просто обычный HTTP-запрос, который выполнялся от имени сценария, а не человека. На уровне HTTP разница между передачей некоторого HTML или строки JSON абсолютно нулевая - это просто данные.

1 голос
/ 03 августа 2012

Для гуглеров ... [Я использую Apache 2.2.16 и меня не волнует IE6]

Ответы JSON с Content-Encoding = gzip не происходили, пока я не отредактировал mod_deflate.conf длявключите это:

 AddOutputFilterByType DEFLATE application/json

Вы можете проверить заголовки ответа сервера с помощью вкладки Firefox / Firebug / Net

0 голосов
/ 31 октября 2011

Сначала убедитесь, что у вас установлен 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 exes, gzs, pdfs и т. д.

Второй блок кода пропускает дефляцию из браузеров, которые его не поддерживают.

Наконец, снова перезапустите apache

service apache2 restart

Настройки были скопированы по ссылке ниже: http://www.howtoforge.com/apache2_mod_deflate

...