2011-12-20 18 views
7

Django şablon oluşturmayı hızlandırmak için nasıl giderim? Şablonum, işlevi tam olarak istediği her şeyi hesapladıktan sonra, oluşturmak için yaklaşık 1-2 saniye sürer.django: şablon oluşturma performansını hızlandırmak için yönergeler

Zaten şablondaki tüm veritabanı erişimini gerçekleştirmeyi denedim, böylece şablon sadece RAM'e değil, DB motoruna ulaşıyor.

Çok fazla include s var - orada bir sorun olabilir mi?

cevap

14

Django şablon kodumu optimize ederek çok zaman harcadım. Aşağıda, benim için çalışan optimizasyon yönergeleri verilmiştir, ancak kurulumunuza bağlı olarak, bir hızlandırma kadar önemli olmayabilir.

  • Besleme değil şablonu Motor unicode, str: Django unicode tüm değişkenleri coerces. Bu işlemin yapılması çok uzun sürmez, ancak şablonlarınızdaki birçok yerde str değişken kullanılıyorsa, fark edilebilir bir gecikmeye dönüşebilir. Bu, bir Django işleyicisine metin verileri gönderdiğinizde düzeltmenin çok kolaydır, unicode olduğundan emin olun.
  • İşaret Değişkenleri safe olarak işaretleyin: Django'nun otomatik güvenlik önlemleri gerçekten çok güzel, ancak küçük bir performansla geliyorlar. Şablonunuzda birçok değişken kullanıyorsanız ve bunun güvenli olduğunu biliyorsanız, bu şekilde işaretlediğinizden emin olun.
  • Önbellek Derlenmiş Şablonlar: render_template_from_string numaralı telefonu aradığınızda, django şablonu çeker, derler ve sonra oluşturur. Django, bu sürecin ilk iki bölümünü önbelleğe almayı ve bellekte saklamayı kolaylaştırır. Tek yapmanız gereken, TEMPLATE_LOADERS numaranıza cached.Loader eklemek için settings.py dosyanızda küçük bir değişiklik yapmaktır. Daha fazla in the Django documentation açıklanmıştır.
  • Düzeltme Kullanım Talimatları - endless pagination: endless pagination eklentisinin işleri yavaşlattığını buldum. Bunun nedeni, her bir sayfa numarası için yeni bir şablon yüklemek zorunda olmasıdır. İstediğimi yapana kadar içeri girdim ve hackledim, ama bunu yapmadan önce, onu kaldırmayı ve elde edeceğiniz performans iyileştirme türünü görmeyi deneyin.
  • Süspansiyon Özelliklerini Kullanmayın: Devralma, iç içe geçmiş bloklar, döngüler ve kapsamlar büyüktür, ancak bir performans maliyeti ile birlikte gelirler. Onları kullanırken çok dikkatli olun ve birden fazla kalıtım seviyesine girmemeye çalışın. Döngüler için istemci tarafı oluşturma ile daha iyi ele alınabilir.
  • İstemci Tarafı Oluşturma: Sunucu tarafı oluşturmayı hızlandırmak için kolay bir numara, yalnızca istemcide yapmaktır. Bir strateji, django şablonuna bir json yapısı yerleştirmek ve daha sonra javascript HTML'yi oluşturmaktır. Bu açıkça django sunucu tarafı oluşturma amacını bozar, ancak bir hızlanma ile sonuçlanacaktır. Bu özellikle, katmanın altında içerik oluşturmanız gerekiyorsa (yani, sayfa yüklendiğinde kullanıcının onu hemen görmesi gerekmez) özellikle kullanışlıdır.

Yukarıdaki işlem, GAE örneğinde karmaşık bir sayfanın oluşturma zamanımı yaklaşık 1.0S'den 250ms'ye düşürdü, ancak yine de kilometre durumunuz değişebilir.

+1

+1. Döngüleri için içeride kullandım. Bunların kaldırılması, görüntü oluşturma süresinin çok yüksek olmasına neden oldu (2 kata kadar daha hızlı) – dimyG

+0

Django'nun geçerli sürümünde (bu yazıdan itibaren 1.10), DEBUG Yanlış olduğunda önbelleğe alınan .Loader otomatik olarak etkinleştirilecektir. – hayavuk

+0

Sonsuz sayfalandırmanın nasıl düzeltileceği hakkında daha fazla bilginiz var mı (bir sorun ya da sebep gibi) – SebCorbin

4

Django Hata Ayıklama Araç Çubuğunuza Django Toolbar Template Timings adlı ek bir panel ekleyerek Adım 0 olarak öneririm. Her şablonda ne kadar zaman harcandığını (blok, vb) ve bu sürenin SQL'de ne kadar olduğunu söyledi. Ayrıca bu sorunun sizin için ekstra bir onaylama.

enter image description here

İşte ayıklama araç çubuğuna bir panel eklemek için nasıl. İçerikleri kaldırmak için

İlgili konular