2013-05-29 88 views
5

我一直在閱讀,使用gzip壓縮資產會增加網站的性能。在Sinatra應用程序中似乎有很多方法可以做到這一點,所以我一直在尋找確認最有效和最容易理解的方法。Sinatra的gzip資產應用程序

我所遇到

use Rack::Deflater 

應在我的情況下被放置在我config.ru文件上運行應用程序之前,所以

require './david' 
use Rack::Deflater 
run Sinatra::Application 

是這樣嗎?這是簡單的,只需要添加我知道這將壓縮我的所有靜態資產,包括我的圖像,但這些都是從CDN提供,所以這會有所作爲?

與這一個

感謝感謝螞蟻幫助

+0

如果您的資產沒有從您的sinatra應用程序提供服務,他們將無法獲得gzip –

+0

是的,我認爲是這樣,它的CSS和JS我想gzip ,即時通訊不擔心圖像 – Richlewis

+0

,不要忘記不要使用gzip二進制數據和圖片的https://developers.google.com/speed/docs/best-practices/payload#GzipCompression –

回答

5

它是那麼容易(是不是很好:),但如果你要檢查,然後看Content-Encoding響應頭,它應該說gzip 。在webkit瀏覽器中,它位於「網絡」下的開發者工具中,然後選擇資源,如app.min.css和「標題」選項卡。

來測試這種被賦予在以下博客文章的一種方式:

http://artsy.github.io/blog/2012/02/24/10x-rack-and-rails-output-compression-with-rack-deflater/

我修改了規格爲shared examples,所以我可以將它們添加在我真要查:

shared_examples "Compressed pages" do 
    subject { last_response.headers } 
    its(["Content-Encoding"]) { should be_nil } 
    context "After compression" do 
    before do 
     get page 
     @etag = last_response.headers["Etag"] 
     @content_length = last_response.headers["Content-Length"] 
     get page, {}, { "HTTP_ACCEPT_ENCODING" => "gzip" } 
    end 
    its(["Etag"]) { should == @etag } 
    its(["Content-Length"]) { should_not == @content_length } 
    its(["Content-Encoding"]) { should == "gzip"} 
    end 
end 

我主要的規範使用它是這樣的:

describe "Public pages" do 

    describe "Home page", :type => :request do 
     let(:page) { "/" } 
     it_behaves_like "Compressed pages" 

it_behaves_like "Compressed pages"將運行該共享示例,並檢查它是否有正確的標題等。

+0

感謝澄清和也感謝關於測試的額外信息:)使用非Rails的東西讓你意識到它爲你做了多少事情,但它也很好地去做這些事情來了解更多 – Richlewis

+0

@Richlewis這是真的,Rails做了很多,但Sinatra是如此輕巧靈活,一旦你進入它,你將不會錯過Rails太多:) – iain

+0

在Sinatra內使用模型和模塊的任何好資源?我真的需要趕上那個 – Richlewis