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