Как включить сжатие в Ruby on Rails?
Я разместил аналогичный вопрос здесь
Обслуживание сжатых активов в Heroku с помощью Rack-Zippy
но решил отказаться от этой службы, так как я не мог заставить ее работать.
Я проверил страницу PageSpeed Insights на своем веб-сайте, чтобы определить скорость моего веб-сайта.
Самое важное предложение, которое я получил, это включить компрессию.
Compressing resources with gzip or deflate can reduce the number of bytes sent over the network.
Enable compression for the following resources to reduce their transfer size by 191.2KiB
(74% reduction).
Я следил за инструкциями на этом веб-сайте
https://developers.google.com/speed/docs/insights/EnableCompression
и он говорит, чтобы проконсультироваться с документацией для вашего веб-сервера о том, как включить сжатие:
Я использовал этот сайт, чтобы узнать свой веб-сервер
http://browserspy.dk/webserver.php
Оказывается, мой веб-сервер WEBrick.
Страница СтраницаSpeed Insights содержит только следующие 3 сервера
Apache: Use mod_deflate
Nginx: Use ngx_http_gzip_module
IIS: Configure HTTP Compression
Я искал документацию по сжатию gzip для серверов WEBrick, но ничего не нашел.
Я искал способ включения сжатия в Rails и ничего не нашел. Вот почему я спрашиваю здесь.
Я попытался использовать Rack Zippy, но отказался от него.
Прямо сейчас я даже не знаю, с чего начать. Мой первый шаг - выяснить, что я должен делать.
Edit
Я последовал за предложением Ахмеда использовать Rack:: Deflator
Я подтвердил, что у меня это было, запустив
rake middleware
=> use Rack::Deflator
а затем
git add .
git commit -m '-'
git push heroku master
К сожалению, PageSpeed все еще говорит, что его нужно сжимать. Я подтвердил, что, перейдя в Инструменты разработчика < Настройки сети и обновление страницы. Размер и содержание были практически одинаковыми для каждого ресурса, что означает, что файлы не сжимаются.
Что-то не так с одним из моих файлов?
Благодарим вас за помощь.
Вот мой полный файл config/application.rb
require File.expand_path('../boot', __FILE__)
require 'rails/all'
Bundler.require(*Rails.groups)
module AppName
class Application < Rails::Application
config.middleware.use Rack::Deflater
config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif)
config.exceptions_app = self.routes
config.cache_store = :memory_store
end
end
Если есть проблема, источник, вероятно, там, верно?
Нужно ли устанавливать драгоценный камень дефлятора?
Ответы
Ответ 1
Включить сжатие
Добавьте его в config/application.rb:
module YourApp
class Application < Rails::Application
config.middleware.use Rack::Deflater
end
end
Источник: http://robots.thoughtbot.com/content-compression-with-rack-deflater
Ответ 2
Rack::Deflater
должен работать, если вы используете insert_before
(вместо "use" ), чтобы разместить его ближе к началу стека промежуточного программного обеспечения до любого другого промежуточного программного обеспечения, которое могло бы отправить ответ. .use
помещает его в нижнюю часть стека. На моей машине самое высокое промежуточное ПО - Rack::Sendfile
. Поэтому я бы использовал:
config.middleware.insert_before(Rack::Sendfile, Rack::Deflater).
Вы можете получить список промежуточного программного обеспечения в порядке загрузки, выполнив rake middleware
из командной строки.
Примечание: Хорошая ссылка для insert_before vs Использование в стойке промежуточного программного обеспечения