2010-11-19 8 views
13

मैं एक Django वेब एप्लिकेशन बना रहा हूं जिसमें एजेक्स अनुरोधों से फ्लाई पर बहुत सी एचटीएमएल उत्पन्न हुई है। अभी मैं एचटीएमएल बनाने के लिए Django की templating भाषा का उपयोग करता हूं और फिर JSON ऑब्जेक्ट में एक स्ट्रिंग के रूप में इस नए HTML को पास करता हूं जिसे बाद में jQuery के साथ पृष्ठ में इंजेक्शन दिया जाता है।जावास्क्रिप्ट या Django के साथ टेम्पलेटिंग?

यह काफी अच्छी तरह से काम करता है, लेकिन जावास्क्रिप्ट आधुनिक ब्राउज़रों में और इतने सारे जावास्क्रिप्ट टेम्पलेट पुस्तकालयों के साथ इतनी तेजी से होने के साथ करता है, तो मैं सब कुछ clientside पुश करना चाहिए मैं सोच रहा हूँ बनाया जा रहा है।

तो मेरा सवाल यह है कि: मेरे औसत "पृष्ठ" को इसके सभी अनुरोधों के साथ ~ 300 टेम्पलेट्स (लगभग 5 या तो 5 या उससे अधिक प्रतिस्थापन वाली लाइनों में से प्रत्येक को एचटीएमएल में संकलित करना है) को देखते हुए ब्राउज़र में templating करने के लिए जीवन भर महत्वपूर्ण प्रदर्शन लाभ है?

इसके अलावा किसी को भी एक 'तेज' जावास्क्रिप्ट templating पुस्तकालय की सिफारिश कर सकते हैं? मैंने underscore.js, mustache.js और jQuery टेम्पलेट के बारे में अच्छी बातें सुनी हैं।

+0

बंद टेम्पलेट्स तेज़ हैं, क्योंकि वे Google कंपाइलर – Evgeny

+0

द्वारा संकलित हैं, मुझे यह समस्या भी मिली है, लेकिन HTML को वापस भेजना डेटा की मात्रा (यह कई प्रविष्टियों के साथ एक छवि गैलरी के लिए) के कारण अनुचित है। मैंने इसे क्लाइंट और सर्वर साइड मूंछ के साथ हल किया - मुझे मूंछ पसंद है। –

उत्तर

4

(बड़े पैमाने पर) Django टेम्पलेट के साथ चिपके हुए का लाभ यह है कि आप केवल एक templating भाषा है, जो एक ही क्षमताओं पेज आप उत्पन्न करने के लिए इच्छा की परवाह किए बिना बरकरार रखती उपयोग करने की आवश्यकता है। यदि आपको लगता है कि आपके पास प्रदर्शन समस्याएं हैं तो आपको caching template fragments पर विचार करना चाहिए।

+0

एस/Django/Jinja2/g इसे और भी बड़ा बनाता है;) – Evgeny

+0

बेशक, अगर आप उद्धरण के साथ सावधान हैं, तो कुछ भी नहीं कह रहा है कि आपके Django टेम्पलेट JSON उत्पन्न नहीं कर सकते ... एम्बेडेड HTML के साथ ... –

0

आप HTML को JSON के रूप में क्यों पास करते हैं? बस HTML को वापस भेजें और <div> या जो भी हो, उसे jQuery के $.html() फ़ंक्शन का उपयोग करें।

जावास्क्रिप्ट में templating का सवाल है, वहाँ Pure है। यदि आप jQuery का उपयोग कर रहे हैं (मैं इसकी अनुशंसा करता हूं), it already has a template engine

+0

मेरा प्रतिक्रिया ऑब्जेक्ट्स में अन्य जानकारी होती है (जहां डोम और यूड्स में तत्व संलग्न करना है), मैं $ .html फ़ंक्शन का उपयोग करता हूं लेकिन मैं इसे केवल जेएसओएन डिक्शनरी की कुंजी को नया HTML युक्त करता हूं। –

0

दोहरे उद्देश्य के टेम्पलेट्स बनाना संभव हो सकता है - ताकि उन्हें जेएस द्वारा प्रतिस्थापन के लिए प्लेसहोल्डर्स में प्रस्तुत किया जा सके और साथ ही उन्हें सर्वर आउटपुट के लिए सामान्य रूप से प्रस्तुत किया जा सके। केवल कुछ टेम्पलेट्स को दोहरी उद्देश्य होने की आवश्यकता होगी - उन टुकड़ों को जिन्हें जेएस द्वारा प्रतिस्थापित किया जाना है।

मैं इग्नासिओ से सहमत हूं, प्रत्येक टेम्पलेट की सिर्फ एक प्रति रखना बहुत बेहतर है, ताकि आपको जावास्क्रिप्ट के लिए एक अलग लिखना पड़े, हालांकि दृष्टिकोण से सुधार के लिए निश्चित रूप से निश्चित रूप से कमरा है। ऊपर उल्लिखित है।

आदर्श रूप में आप सर्वर से उत्पादन के लिए सादे स्ट्रिंग के रूप में रूप में अच्छी तरह मजबूत जावास्क्रिप्ट समारोह कोड में संकलित टेम्पलेट्स कर सकते हैं।

Closure templates सोया कहा जाता है, समस्या को अच्छी तरह से हल करें लेकिन पाइथन के साथ काम नहीं करते (शायद अभी तक) नहीं, लेकिन वे जावा और जावास्क्रिप्ट के साथ काम करते हैं। उम्मीद है कि इसके लिए एक दिन पाइथन समर्थन होगा।

लेकिन यदि ऐसा होता है, तो भी templating भाषा शायद अधिक प्रतिबंधित हो जाएगी क्योंकि .get_absolute_url(), फ़िल्टर, आदि जैसे चीजों को पाइथन और जावास्क्रिप्ट दोनों में काम करना मुश्किल होगा - सभी स्वचालित रूप से।

3

मुझे नहीं लगता कि एक हाइब्रिड क्लाइंट और सर्वर टेम्पलेटिंग आर्किटेक्चर खराब है। जब तक आप केवल पर्यावरण में से किसी एक टेम्पलेट को कोड करते हैं।

हर बार जब आप एक पृष्ठ सर्वर साइड उत्पन्न, प्रसंस्करण समय की राशि और कुछ नेटवर्क बैंडविड्थ सेवन किया जाता है। यदि आप होस्ट किए गए सर्वर का उपयोग करते हैं तो यह वही है जो आप भुगतान करते हैं।
जबकि उपयोगकर्ता का ब्राउज़र प्रतिक्रिया के लिए आम तौर पर निष्क्रिय कंप्यूटर पर निष्क्रिय होने का इंतजार कर रहा है।

यदि आप क्लाइंट (एचटीएमएल + जेएस) पर टेम्पलेट भेजते हैं, तो सत्र या दिन के लिए, यदि उपयोगकर्ता उन्हें हटा नहीं देता है तो उन्हें कैश किया जा सकता है।
यह एक ही सामग्री को कई बार वितरित करने के लिए नेटवर्क यातायात को कम करता है। चूंकि डेटा आम तौर पर उनके समकक्ष एचटीएमएल से छोटे होते हैं।

जैसा कि आप आज के जावास्क्रिप्ट इंजन को वास्तव में तेज़ करते हैं, साथ ही साथ कंप्यूटर भी इसे चलाते हैं। प्रत्येक बार जब आप क्लाइंट को प्रतिपादन कार्य भेजते हैं, तो आप अपने सर्वर के लिए कुछ प्रोसेसिंग समय बचाते हैं और डेटा तेज़ी से वितरित करते हैं।

हम दूसरे चरम पर हैं, क्योंकि हम सभी क्लाइंट पर चलते हैं और इसीलिए हमने अल्ट्रा-फास्ट क्लाइंट प्रतिपादन के लिए PURE बनाया है। इस विकेन्द्रीकरण के परिणामस्वरूप हमारा ऐप बहुत तेज दिखता है।

+0

सलाह के लिए धन्यवाद, मैं शुद्ध जांच करूँगा। –

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