2011-12-20 15 views
7

मैं Django टेम्पलेट प्रतिपादन को तेज़ करने के बारे में कैसे जाउंगा? मेरे टेम्पलेट को प्रस्तुत करने के लिए लगभग 1-2 सेकंड या उससे अधिक समय लगता है, दृश्य फ़ंक्शन पूरी तरह से गणना करता है जो इसे चाहिए।django: टेम्पलेट प्रतिपादन प्रदर्शन को तेज करने के लिए दिशानिर्देश

मैंने पहले ही दृश्य में सभी डेटाबेस पहुंच करने का प्रयास किया है, जैसे कि टेम्पलेट केवल रैम को हिट करता है और डीबी इंजन नहीं।

मेरे पास include एस है - क्या कोई समस्या हो सकती है?

उत्तर

14

मैंने अपने django templating कोड को अनुकूलित करने में काफी समय बिताया। नीचे ऑप्टिमाइज़ेशन दिशानिर्देश हैं जो मेरे लिए काम करते हैं, लेकिन आपके सेटअप के आधार पर, आपको एक स्पीडअप के रूप में महत्वपूर्ण नहीं मिल सकता है।

  • फ़ीड templating इंजन unicode, नहीं str: Django यूनिकोड को सभी चर coerces। ऐसा करने में बहुत लंबा समय नहीं लगता है, लेकिन यदि आपके टेम्पलेट्स में कई स्थानों पर str चर का उपयोग किया जा रहा है, तो यह एक उल्लेखनीय देरी में बदल सकता है। यह ठीक करना बहुत आसान है, जब भी आप Django रेंडरर को टेक्स्ट डेटा भेज रहे हों, सुनिश्चित करें कि यह यूनिकोड है।
  • मार्क वैरिएबल safe: Django के स्वचालित सुरक्षा उपायों वास्तव में अच्छे हैं, लेकिन वे एक छोटे से प्रदर्शन हिट के साथ आते हैं। यदि आप अपने टेम्पलेट में कई चर का उपयोग कर रहे हैं, और आप जानते हैं कि यह सुरक्षित है, तो इसे इस तरह चिह्नित करना सुनिश्चित करें।
  • कैश संकलित टेम्पलेट्स: जब आप render_template_from_string पर कॉल करते हैं, django टेम्पलेट खींचता है, इसे संकलित करता है, और फिर इसे प्रस्तुत करता है। Django इस प्रक्रिया के पहले दो हिस्सों को कैश करना आसान बनाता है और उन्हें स्मृति में संग्रहीत करता है। आपको केवल को अपने TEMPLATE_LOADERS में जोड़ने के लिए अपनी settings.py फ़ाइल में एक छोटा बदलाव करना है। अधिक in the Django documentation समझाया गया है।
  • endless pagination का उपयोग न करें या नहीं उपयोग करें: मैंने पाया कि endless pagination प्लगइन ने चीजों को बेहद धीमा कर दिया। ऐसा इसलिए है क्योंकि इसे प्रत्येक पृष्ठ संख्या के लिए एक नया टेम्पलेट लोड करना होगा। मैं अंदर गया और उस पर हैक किया जब तक कि मैं इसे वही कर रहा था जो मुझे चाहिए था, लेकिन ऐसा करने से पहले, इसे हटाने का प्रयास करें और देखें कि आपको किस प्रकार का प्रदर्शन सुधार मिलता है।
  • फैंसी टेम्पलेटिंग सुविधाओं का उपयोग न करें: विरासत, नेस्टेड ब्लॉक, लूप के लिए, और इसमें शामिल हैं, लेकिन वे प्रदर्शन लागत के साथ आते हैं। उनका उपयोग करते समय बहुत सावधान रहें और विरासत के कई स्तर न करने का प्रयास करें। लूप के लिए क्लाइंट साइड प्रतिपादन के साथ बेहतर तरीके से संभाला जा सकता है।
  • क्लाइंट साइड रेंडरिंग: सर्वर साइड प्रतिपादन को गति देने के लिए एक आसान चाल यह क्लाइंट पर ही करना है। एक रणनीति django टेम्पलेट में एक जेसन संरचना को एम्बेड करना है, और उसके बाद जावास्क्रिप्ट HTML बनाते हैं। यह स्पष्ट रूप से django सर्वर साइड प्रतिपादन के उद्देश्य को हरा देता है, लेकिन इसके परिणामस्वरूप एक गति होगी। यह विशेष रूप से उपयोगी होता है यदि आपको गुना के नीचे सामग्री प्रस्तुत करना है (यानी, पृष्ठ लोड होने पर उपयोगकर्ता को तुरंत इसे देखने की आवश्यकता नहीं है)।

उपर्युक्त करना जीएई उदाहरण पर एक जटिल पृष्ठ के मेरे प्रतिपादन समय को लगभग 1.0 एस से 250 मिमी तक काट रहा है, लेकिन फिर से, आपका माइलेज भिन्न हो सकता है।

+1

+1 हटाने के लिए +1 शामिल हैं। मैंने लूप के अंदर अंदर शामिल किया था। उन्हें हटाने के परिणामस्वरूप प्रतिपादन समय (2 गुना तेज) – dimyG

+0

Django (1.10 इस लेखन के रूप में) के वर्तमान संस्करण में, cached.Loader स्वचालित रूप से सक्षम हो जाएगा जब DEBUG गलत है। – hayavuk

+0

क्या आपके पास अंतहीन पेजिनेशन (किसी समस्या या कारण की तरह) को ठीक करने के बारे में अधिक जानकारी है – SebCorbin

4

मैं आपके डीजेगो डीबग टूलबार में चरण 0 के रूप में Django Toolbar Template Timings नामक अतिरिक्त पैनल के रूप में अनुशंसा करता हूं। यह मुझे बताया कि प्रत्येक टेम्पलेट (ब्लॉक, आदि) में कितना समय व्यतीत किया जा रहा था, और उस समय का कितना समय एसक्यूएल में है। यह भी अतिरिक्त मान्यता है कि यह आपकी समस्या है।

enter image description here

यहाँ डीबग उपकरण पट्टी में एक पैनल कैसे जोड़ा जाता है। http://django-debug-toolbar.readthedocs.org/en/latest/configuration.html#debug-toolbar-panels

संबंधित मुद्दे