2015-08-17 27 views
16

Ben django ile bir uygulama yapıyorum, hangi en çok oy alan eşyaların bir harita görüntüleniyor.django üzerinde folium kullanırken en iyi uygulama

Deneyimli bir web geliştirilmedim ve nerede, nerede ve ne zaman harita oluşturmaları gerektiğini merak ediyorum. (Örneğin bu hat ->)

map_osm.create_map(path='osm.html') 

Şu anda benim views.py yerleştirilir ve bir kullanıcı görüntülemek haritayı her defasında inşa ediyor, soru - çok fazla masraflı olmaz sunucu için hesaplama?

Her x oyu güncelleyerek veya bunu yönetecek bir model tutmayı düşündüm.

Bu tür durumlarda en iyi uygulama hangisidir?

cevap

8

Amit. Kullanıcı için folium ve bina haritaları için olduğu gibi, bir çok kullanıcı hesaplamak istediğinde, sunucu için çok çalışabilir. çözeltiler bunun için vardır: REDIS veya Memcached (Django bunun için pil vardır) ile

  1. Caching. Bu noktada, koordinatlar aynı ise, önbellek kullanım ömrünü birkaç saat ila birkaç saniyeye ayarlayabilirsiniz. Django, görüntüleme önbelleği, şablon önbelleği veya başka özellikler sunar.
  2. Eşleme sonucunu db'ye kaydedin, böylece kullanıcı dün olduğu gibi aynı koordinatları hesaplarsa - Django, db sonucunu alır ve daha hızlı şekilde şablona gösterir.
  3. Hiçbir şey gereksinimlerinizi geçmezse - django'yu daha hızlı hale getirin, kullanılmayan orta programları kapatın, çalıştırmak ve dağıtmak için gunicorn \ uwsgi'yi kullanın. Web sunucusuna daha fazla RAM ve CPU çekirdeği bulun (dağıtımda).
  4. Projenizde profil oluşturmayı deneyebilirsiniz, böylece projenizde en bilgi işlem bölümünün nerede olduğunu bulabilirsiniz. Bulduğun zaman - daha hızlı yap.
0

Önbelleğe almak en iyi yoldur, ancak deneyimli bir geliştirici olmadığınız için size alternatif bir çözüm sunacağım.

Bir kullanıcı web sitenizin bu bölümünü ziyaret ettiğinde haritayı yeniden hesaplıyorsunuz gibi görünüyor. Bir çözüm, html dosyasına doğrudan bağlantı kurmak ve dosyayı her 30 dakikada bir (veya ihtiyacınız ne olursa olsun) bir CRON görevi veya bir Python zamanlayıcısı ile güncellemek. Bu sayede tüm kullanıcılarınız için sadece yarım saatte bir hesaplayacaksınız.