• В поисках Лучших Практик. Как грамотно ускорить и измерить Django?

    @zeroplay
    Как делать это без боли, без втыкания профилирующих строчек в код, без знания структуры фреймворка на уровне контрибьютера?
    без втыкания врят ли получится, даже из написанного выше понятно, что некоторая доля погружения обязательна (time - самое примитивное и надежное средство)
    хотя некоторые считают, что таймлайна браузера вполне достаточно для выяснения узких мест))
    Ответ написан
    Комментировать
  • В поисках Лучших Практик. Как грамотно ускорить и измерить Django?

    @IvanOne
    Возможно не совсем ориентируюсь в данной теме, но понадобится профилировщик, https://github.com/rkern/line_profiler
    habrahabr.ru/sandbox/54557
    Ответ написан
    Комментировать
  • В поисках Лучших Практик. Как грамотно ускорить и измерить Django?

    un1t
    @un1t
    Во первых не надо ничего кешировать и оптимизировать пока не выяснишь, что тормозит.

    В дебуг тулбаре смотри нет ли из этих 150 кучи одинаковых запросов. Большая вероятность, что с помощью select_related и prefetch_related можно сократить количество запросов многократно.

    Самый примитивный способ с помощью функции time() змерить сколько выполняются те или иные участки.

    Вот такой декоратор (см. ниже), оберни им код любой функции и видно будет, что тормозит.
    Единственно, хочу отметить, что если ты передаешь в шаблоны queryset, не преобразовав его в список, то фактически выполнение запроса будет происходить в шаблоне и такой код покажет, что тормозита render, хотя тормозят запросы.

    from decorator import decorator
    from line_profiler import LineProfiler
    
    @decorator
    def profile_each_line(func, *args, **kwargs):
        profiler = LineProfiler()
        profiled_func = profiler(func)
        try:
            return profiled_func(*args, **kwargs)
        finally:
            profiler.print_stats()
    Ответ написан
    3 комментария