Советы по ускорению просмотра Джанго? - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь провести некоторый анализ данных для компании (продажи, акции, годовой прогресс и т. Д.).Тем не менее, я считаю, что время расчета огромно (почти 1 минута для одной страницы с одним линейным графиком).Я уже проверил запросы, и они занимают около 2 секунд (все еще много, но что угодно).Используя django-debug-toolbar, я видел, что рендеринг запросов (который, я полагаю, является просмотром страницы) занимает около 50 секунд.Ребята, вы знаете, как я мог ускорить это?

Это код:

Основная функция для графика:

def get_data_progression(years):
    result = {}

    for year in reversed(years):
        result[year] = {
            "uscite": 0,
            "entrate": 0,
            "magazzino": {
                "val": 0,
                "nbr": 0
            },
            "valorizzazione": 0,
            "months": []
        }
        for i in range(1, 13):
            entrate = 0#get_entrate_month(year, i)
            uscite = 0#get_uscite_month(year, i)
            m_val, m_nb = get_magazzino_month(year, i)
            result[year]["months"].append({
                "entrate": entrate,
                "uscite": uscite,
                "magazzino": m_val,
            })
            result[year]["entrate"] = entrate
            result[year]["uscite"] = uscite
            result[year]["magazzino"]["val"] = m_val
            result[year]["magazzino"]["nbr"] = m_nb
        result[year]["valorizzazione"] = result[year]["magazzino"]["val"] + result[year]["entrate"] - result[year]["uscite"]
    return result

И этофункцию я пытаюсь оптимизировать.Я пропустил несущественные части: вы видите, что загрузка занимает 50 секунд:

def get_magazzino_month(year, month):
    from magazzino.models import ddt_in_item, omaggi_item, inventario_item
    from corrispettivi.models import corrispettivi_item, corrispettivi
    from fatture.models import fatture_item, fatture, fatture_laboratori_item
    from prodotti.models import prodotti
    qt = 0
    val = 0

    products = prodotti.objects.all()

    for prod in products:
        fats = fatture_laboratori_item.objects.order_by("-id_fattura__data").filter(id_prodotti=prod, id_fattura__data__year=year).first()
        prezzo = (fats.costo_acquisto/fats.quantita - ((fats.costo_acquisto/fats.quantita) * fats.sconto / 100)) if fats else prod.costo_acquisto
return val, qt
...