2015-05-17 18 views
8

Google, artık bu kadar mobil uyumlu olmama nedeniyle cezalandırılıyor. Böylece işleri daha iyi hale getirmek için, Javascript’imin çoğunu Gzip veya Deflate’le sıkıştırmamı tavsiye ederim. Yığın taşmasıyla ilgili bazı eski öneriler gördüm, ancak kutudan başka bir şey yok ve eklentileri aramayı denedim, ancak henüz hile yapacak bir şey yok gibi görünüyor. Sıkıştırmak veya gzip etkinleştirme en az acı ve sağlam nedir?Python kullanarak Heroku'da sıkıştırmayı etkinleştirme

gzip ile sıkıştırma Sıkıştırma kaynaklarını etkinleştirme veya ağ üzerinden gönderilen bayt sayısını azaltabilir deflate: Burada

tarihinde yapmam anlaşılacağı budur. Aktarım boyutlarını 420 KB azaltmak için (% 74 azalma) aşağıdaki kaynaklarda sıkıştırmayı etkinleştirin.

Django kullanıyorum, bu daha kolay.

cevap

9

Bottom Line Up Front - Uygulamanızın ayrıntılarına bağlı olacak ... Flask? Django? uWSGI? whitenoise ve gunicorn, Heroku'daki "git" çerçeveleri gibi görünüyor, bu yüzden aşağıdaki örnekte kullandım. Diğer çerçevelere tercüme etmeli.

Açıklama - Google önerisinin özü, sunucudan fiziksel olarak aktarılan bayt sayısını en aza indirmektir. Bunu yapmanın birkaç yolu vardır, ancak en yüksek özel bir sırada etkisiyle, arasında -

  • küçültme JavaScript ve CSS
  • birlikte
  • bu dosyaları birleştirme işleyin önbellek davranış
  • HTTP yanıt gövdesini sıkıştır

Alınan öneri son bit ile ilgilidir ve yanıt kütlesinin sıkıştırılmasının HTTP spesifikasyonundaki "içerik anlaşmasının" bir parçası olduğunu anlamak önemlidir - b rowser sadece URL aracılığıyla belirli bir kaynağı sormaz; Ayrıca, söz konusu kaynağın tercih edilen temsili hakkında ipuçları sağlar, örneğin, hangi içerik türünün, nasıl kodlandığı, birden fazla "parçada" gönderilebileceği gibi, vb.

Bu nedenle, ideal olarak, HTTP'yi işleyen uygulamanın katmanı Bu özel görevi yerine getirmeli. Tipik bir uygulama yığınında, web sunucusunun web çerçevenize özel, dinamik yollar için istekleri proxy edeceği ve "statik" içeriği doğrudan işleyeceği Apache veya nginx gibi bir web sunucusu anlamına gelir.

Heroku'da, HTTP katmanı platformun kendisi ile uygulamanız arasında bölünür - "yönlendirme ağı", temel HTTP ve HTTPS'leri ele alan ve üstbilgilerle proxy bilgileri ekleyerek istekleri artıran ters proxy görevi görür. örnek; her şey uygulamanıza bağlı. Bununla birlikte, "app" iniz oldukça kısıtlıdır, çünkü nginx, vb. Yüklemek için serbest zamanınız yoktur.

Çoğu web çerçevesi (Django, Flask, Rails, Play! Vb.) Çok genelleştirilmiştir. ve harici bir web sunucusu ile birlikte çalışabilir (üretim için önerilir) veya kendi başına, genellikle hafif web sunucularını (geliştirme için önerilir) sağlayarak bağımsız olarak çalışabilirler. Çerçeveler, uygulama için hem çalışma ortamı hem de HTTP katmanında (uWSGI, Gunicorn, Rack, vb.) Ağır kaldırmayı sağlayan "kapsayıcılar" ile de eşleşir.

Bu seçenek, Heroku.UWSGI ile en çok deneyime sahip olmakla birlikte, aşağıdaki örnek Flask + Gunicorn + WhiteNoise (Python'da Heroku'da statik dosyaları sunmak için tercih edilen kütüphane) içindir. WhiteNoise'ın Django ile de çalıştığını unutmayın, bu yüzden Django'nun seçim çerçeveniz olması gerektiğine göre, bu uyarlamanın önemsiz olması gerekir. Yani, iki oldukça basit adımda tüm bu fuar sonuçları Başlamak için:

  • sizin requirements.txt
  • WhitENoise olması WSGI uygulamayı değiştir "sargı" uygulamanıza whitenoise ekleyin. başlığını Örneğin

: istemci "gzip Accept-Kodlama" gönderirse

from flask import Flask 
from whitenoise import WhiteNoise 

flapp = Flask(__name__) 
#use a subdirectory for root, otherwise, the actual .py files can be served... 
app = WhiteNoise(flap, root='./static/') 

#define your routes: 
@flapp.route('/') 
def home_page(): 
    #etc. etc. 

Bu, gzip'd içeriği alacak. Çekmek ve çimdiklemek için birçok başka kol ve düğme vardır, ancak bu bir başlangıç ​​noktasıdır. Sonunda, CPU yükü konusunda endişelenecek ve dosyaları önceden sıkıştırmak isteyeceksiniz; Ya da yükleme statik dosyalarının gitmenin yolu olduğuna karar verebilirsiniz. -i bayrak size istek sunulduğu dair ayrıntıları gösterecek başlıklarını, yazdırmalısınız

curl -i -H "Accept-Encoding: gzip" http://yourapp.herokuapp.com/path/to/static 

: doğrulamak için

, statik dosyayı kapmak için cURL gibi bir araç kullanın. `Içerik kodlaması bu yardımcı olur

HTTP/1.1 200 OK 
Connection: keep-alive 
Server: gunicorn/19.3.0 
Date: Wed, 20 May 2015 15:33:35 GMT 
Last-Modified: Wed, 20 May 2015 15:26:06 GMT 
Content-Type: text/html; charset="utf-8" 
Cache-Control: public, max-age=60 
Access-Control-Allow-Origin: * 
Vary: Accept-Encoding 
Content-Encoding: gzip 
Content-Length: 662 
Via: 1.1 vegur 

Umut ...

+0

Büyük cevabı unutmayın. WhiteNoise harika bir fikir gibi gözüküyor - elinizin dışında olabileceği konfigürasyona veya (benim durumumda) deneyim alanınızın dışında kalmadan en iyi uygulamayı sağlayın. – bsa