2014-08-29 26 views
16

Burada benzer bir soruRuby on Rails'de sıkıştırma nasıl etkinleştirilir?

Serving Compressed Assets in Heroku with Rack-Zippy

yayınlanmıştır ama çalışmak için alamadım çünkü o hizmet vazgeçmek karar verdi.

Web sitemin hızını belirlemek için sitemde PageSpeed ​​Insights'ı çalıştırdım.

Aldığım en önemli öneri Sıkıştırmayı Etkinleştirmekti.

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). 

Bu web

https://developers.google.com/speed/docs/insights/EnableCompression

talimatları takip ettik ve onu sıkıştırmayı etkinleştirmek için nasıl web sunucusunun belgelerine başvurun diyor:

ben kullandım Bu web sitesini ziyaret et web sitemizi ziyaret edin

http://browserspy.dk/webserver.php

Web sunucumun WEBrick olduğunu görüyoruz.

Sayfa Hızı Analizleri Sayfa yalnızca aşağıdaki 3 sunucularını

Apache: Use mod_deflate 
Nginx: Use ngx_http_gzip_module 
IIS: Configure HTTP Compression 

Ben WEBrick sunucular için gzip sıkıştırma belgelerine aramalara ancak bir şey bulamadı listeler.

Rails sıkıştırmayı nasıl etkinleştireceğinizi araştırdım ve hiçbir şey bulamadım. Bu yüzden buradayım.

Raf Zippy'yi kullanmayı denedim ama pes etmedim.

Şu an nerede başlayacağımı bile bilmiyorum. İlk adımım ne yapmam gerektiğini öğreniyor.

Düzenleme

ben :: deflatöründeki sırt kullanılması ait Ahmed'in öneriyi takip

ben

rake middleware 
=> use Rack::Deflator 

ve maalesef daha sonra

git add . 
git commit -m '-' 
git push heroku master 

çalıştırarak vardı doğruladı PageSpeed ​​hala ihtiyacı olduğunu söylüyor sıkıştırılacak. Geliştirici Araçları < < Ağ Ayarları'na gidip sayfayı yenileyerek bunu doğruladım. Boyut ve içerik, dosyaların sıkıştırılmadığı anlamına gelen her kaynak için hemen hemen aynıydı.

Dosyalarımdan birinde bir sorun var mı?

Yardımlarınız için teşekkür ederiz.

İşte tüm yapılandırma/uygulama.rb dosyası

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 

Sorun varsa, kaynak büyük olasılıkla oradadır, değil mi?

Deflatör gemisini yüklemem gerekir mi?

cevap

29

için config/application.rb ekleyin sıkıştırmaya

etkinleştirme:

module YourApp 
    class Application < Rails::Application 
    config.middleware.use Rack::Deflater 
    end 
end 

Kaynak: Eğer insert_before kullanırsanız http://robots.thoughtbot.com/content-compression-with-rack-deflater

+3

yeniden Sayfa Hızı çalıştırdıktan sonra, ben hala sıkıştırmayı etkinleştirmek için gereken aynı iletiyi alırsınız. Ayrıca, PageSpeed ​​ve Network kullanarak, boyutum ve içeriklerim neredeyse aynıdır. Cevabı takdir ediyorum ve bunun için oyumu aldınız. Zamanınız için teşekkür ederiz. – Darkmouse

+10

Deneyebileceğiniz bir mücevher var: https://github.com/romanbsd/heroku-deflater – Ahmed

+0

Ben durduran o kahramanca-deflater gem problemimi çözdüğünü söylemek üzereydim. Lütfen önceki gönderimi dikkate almayın. Yardım ettiğin için teşekkür ederim. – Darkmouse

11

Rack::Deflater (yerine "kullanım") çalışması gerekir, yere Bir yanıt gönderebilecek başka herhangi bir ara yazılımdan önce, ara katman yığınının üst kısmına yakındır. .use, yığını yığınının altına yerleştirir. Makinemde en üstteki ara yazılım Rack::Sendfile. Bu yüzden kullanmak:

config.middleware.insert_before(Rack::Sendfile, Rack::Deflater) 

komut satırından rake middleware yaparak yükleme sırasına göre katman listesini alabilirsiniz.

Not: A good link for insert_before vs Use in middleware rack

+0

Ara katman yığınının üstüne yerleştirmek için insert_before ("use" yerine) kullanmakla ilgili bulduğum bir bağlantı ekledim. ** Umarım iyisindir ** –