May 12, 2012

Оптимизация Django


Иногда есть смысл оптимизировать код,работающий лишь несколько миллисекунд:

  • Middleware
  • Context processors
  • Template tags в базовом шаблоне
Если среднее время ответа 100мс, а время работы middleware – 11мс, то снизив его до 1мс мы сможем обслуживать на 10% больше запросов.

Делайте их ленивыми

Вы не знаете наверняка, пригодится ли где-нибудь то, что вы насчитали в своем context processor’е. Поэтому middleware и context processors должны быть ленивыми!
from django.utils.functional import lazy
class LocationMiddleware(object): 
    def process_request(self, request): 
        request.location = lazy(get_location, dict)(request)

def get_location(request): 
    g = GeoIP() 
    remote_ip = request.META.get(REMOTE_ADDR) 
    return g.city(remote_ip)
http://www.slideshare.net/MoscowDjango/django-12897658 слайды 33 и 34
http://stackoverflow.com/questions/8563812/lazy-load-of-data-from-a-context-processor/8564778#8564778

No comments: