मुझे एक प्रीफैच क्वेरीसेट चुड़ैल के साथ एक django टेम्पलेट को प्रस्तुत करते समय एक प्रदर्शन समस्या है, वास्तव में बड़ा नहीं है (उत्पादन वातावरण में ~ 1000 वस्तुओं/~ 200 वस्तुओं को विकास पर्यावरण में) लेकिन इसमें घोंसले के कई स्तर हैं।Django टेम्पलेट प्रतिपादन गति
stories = Story.objects.select_related(
'commande',
'commande__societe',
'commande__plateforme',
'client',).prefetch_related(
Prefetch('crm_message_related',
queryset=Message.objects.select_related(
'societe',
'plateforme',
'type_message').order_by('-date_received')),
Prefetch('commande__crm_feedback_related'),
Prefetch('commande__crm_guarantee_related'),
Prefetch('commande__soyouz_item_related',
queryset=Item.objects.select_related(
'etat', 'produit', 'produit__produit_enhanced',)),
Prefetch('commande__tagged_items__tag'),
Prefetch('commande__soyouz_item_related__tagged_items__tag'),
Prefetch('commande__soyouz_item_related__soyouz_annulationclient_related'),
Prefetch('commande__soyouz_item_related__soyouz_achat_related'),
Prefetch('commande__soyouz_item_related__soyouz_achat_related__soyouz_receptionachat_related'),
Prefetch('commande__soyouz_item_related__soyouz_achat_related__soyouz_annulationachat_related'),
Prefetch('soyouz_action_related'),
Prefetch('soyouz_action_related__receptionmessage__message',
to_attr='receptionmessages',
queryset=Message.objects.order_by(
'-date_received').select_related(
'societe', 'type_message', 'plateforme'))
).order_by(
'-commande__date_commande',
'-date_created'
).all().distinct()
एसक्यूएल सुचारू रूप से चलाने, thats मुद्दा नहीं:
यहाँ प्रीफ़ेच है।
मुद्दा है जब मैं रेंडर करने के लिए मेरे टेम्पलेट डायन मूल रूप से
{% for story in stories %}
{% with items=story.commande.soyouz_item_related.all %}
{% for item in items %}
{% for tag in item.tagged_items.all %}
<button>{{ tag.tag }}</button>
{% endfor %}
{{ item.titre|safe|truncatechars:50 }}
{% endfor %}
{% endfor %}
है यह उत्पादन वातावरण में पृष्ठ प्रदर्शित करने के बारे में 10 सेकंड लेता है की कोशिश करो।
name Times Tot Time Queries Queries Time
stories.html 1 2814,1 ms 0 0 ms
3 200 डेटा के साथ 3 छोरों के लिए सेकंड (विकास के वातावरण में):
मैं Django-टेम्पलेट समय (https://github.com/orf/django-debug-toolbar-template-timings) और वास्तव में के साथ अपने विकास के वातावरण में यह प्रोफाइल? यह बहुत कुछ लगता है।
टेम्पलेट प्रतिपादन की गति में सुधार करने के लिए कोई विचार?
बहुत बहुत धन्यवाद!
क्या आपने 'DEBUG = False' के साथ प्रयास किया है? Django की टेम्पलेट भाषा इसकी गति के लिए ज्ञात नहीं है, लेकिन यह अत्यधिक लगता है, और मुझे विश्वास नहीं है कि loops विशेष रूप से धीमी हैं।बस यह सुनिश्चित करने के लिए: क्या आप 200 कहानियों, टैग, कुल वस्तुओं के बारे में बात कर रहे हैं? – knbk
देव में: 200 कहानियां - 1 आइटम प्रति कहानी - 0 टैग प्रति आइटम प्रोड में: 1000 कहानियां - 1 या 2 आइटम प्रति कहानी - 1 आइटम प्रति आइटम – Tigrou
DEBUG = गलत पहले से ही उत्पादन वातावरण में सेट है – Tigrou