2013-05-29 13 views
5

Ich habe gelesen, dass das Zippen Ihrer Vermögenswerte mit Gzip die Leistung einer Website erhöhen wird. Es scheint viele Möglichkeiten zu geben, dies in einer Sinatra-Anwendung zu tun, also habe ich versucht, die effektivste und einfachste Art zu verstehen zu bestätigen.Gzip Assets in Sinatra App

Ich habe über

kommen
use Rack::Deflater 

die in meiner config.ru-Datei abgelegt werden sollte, bevor die App ausgeführt wird, so in meinem Fall

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

, dass es? ist es so einfach, nur um hinzuzufügen, ich weiß, das wird alle meine statischen Vermögenswerte zippen, einschließlich meiner Bilder, aber diese werden von einem CDN bedient, also würde das einen Unterschied machen?

Ant Hilfe geschätzt mit diesem

Dank

+0

Wenn Ihre Assets nicht von Ihrer Sinatra-App geliefert werden, erhalten sie keine gzip –

+0

ja ich dachte ja, es ist die CSS und JS ich möchte Gzip , ich bin nicht besorgt über die Bilder – Richlewis

+0

und nicht vergessen, nicht gzip für Binärdaten und Bild verwenden https://developers.google.com/speed/docs/best-practices/payload#GzipCompression –

Antwort

5

Es ist so einfach (nicht so schön :), aber wenn Sie überprüfen möchten, dann schauen Sie auf den Content-Encoding Response-Header und es sollte gzip sagen . In einem Webkit-Browser ist es in den Entwickler-Tools unter "Netzwerk", dann wählen Sie die Ressource, wie app.min.css und die Registerkarte "Header".

Ein Weg, dies zu testen, in der folgenden Blog-Post gegeben:

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

ich die Spezifikationen in shared examples geändert, so kann ich sich hinzufügen in dem ich wirklich überprüfen will:

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 

Meine Haupt spec verwendet es wie folgt aus:

describe "Public pages" do 

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

Die it_behaves_like "Compressed pages" wird das gemeinsame Beispiel ausführen und überprüfen, ob es die richtige Kopfzeile usw. hat.

+0

danke für die Klarstellung und Auch danke für die zusätzlichen Informationen in Bezug auf Tests :) mit etwas anderes als Schienen macht Sie erkennen, wie viel es für Sie tut, aber es ist auch gut, diese Dinge zu tun, um mehr zu verstehen – Richlewis

+0

@Richlewis es ist wahr, Schienen tut viel, aber Sinatra ist so leicht und flexibel, dass Sie Rails nicht vermissen werden, sobald Sie einmal reinschauen :) – iain

+0

gute Ressourcen für die Verwendung von Modellen und Modulen in Sinatra? Ich muss wirklich auf dem Laufenden sein mit dieser – Richlewis