2011-12-17 10 views
6

पर टेम्पलेट प्रस्तुत करें मैं सोच रहा था कि वेब एप्लिकेशन में आंशिक दृश्य प्रस्तुत करने के लिए एक अच्छा दृष्टिकोण (या अनुशंसित दृष्टिकोण) क्या होगा।सर्वर पर आंशिक दृश्य प्रस्तुत करें या जेसन डेटा भेजें और क्लाइंट

मुझे एक आवश्यकता है जहां मुझे AJAX का उपयोग कर पहले से ही प्रस्तुत पृष्ठ में डेटा लोड करने की आवश्यकता है, की तरह "अधिक लोड करें ..." पृष्ठ के अंत में लिंक जो सर्वर से अधिक जानकारी प्राप्त करता है और इसे पृष्ठ के नीचे प्रस्तुत करता है।

दो विकल्प मैं AJAX प्रतिक्रिया के लिए समय के साथ खेल रहा हूँ

  1. डेटा की एक JSON प्रतिनिधित्व कर रहे हैं वापसी, और, (उदाहरण के लिए jQuery टेम्पलेट्स) या सिर्फ सादा जावास्क्रिप्ट एक ग्राहक के पक्ष टेम्पलेट लायब्रेरी का उपयोग जेएसओएन को एचटीएमएल में बदलने के लिए और पेज
  2. सर्वर पर आंशिक दृश्य प्रस्तुत करें (मेरे मामले में grails 'render template:'tmplt_name' का उपयोग करके) और इसे तार में भेज दें और परिणाम को पृष्ठ के नीचे भेजें

क्या ऐसा करने के अन्य तरीके हैं? यदि नहीं, तो उपर्युक्त विकल्प दिए गए हैं जो रखरखाव, प्रदर्शन और परीक्षण योग्यता के मामले में बेहतर होंगे? एक बात यह है कि मैं निश्चित हूं कि जेएसओएन मार्ग (ज्यादातर मामलों में) तार में एचटीएमएल भेजने की तुलना में कम बैंडविड्थ का उपयोग करेगा।

+0

मुझे संदेह होगा कि आप पृष्ठ के साथ उपयोगकर्ता के पहले संपर्क पर पहले से ही समान सामग्री प्रस्तुत कर रहे हैं, जैसा कि आप "अधिक लोड लोड" के साथ करना चाहते हैं। क्या वैसे ही "लोड लोड" पर क्लिक करने के बाद लोड होने वाले लोड को लोड करने का अर्थ नहीं होगा और उस कोड का पुन: उपयोग करें जिसे आपने पहले ही लिखा है? आपका प्रश्न दिलचस्प है और मैं देखना चाहता हूं कि विषय पर आपके विचार और दूसरों के क्या हैं – jcage

+0

हां, पहली बातचीत पर मैं एक ही टेम्पलेट (बिंदु 2 में) का उपयोग कर रहा हूं ताकि पूरा पृष्ठ प्रस्तुत किया जा सके (दूसरे के साथ) पृष्ठ के स्थिर खंड)। दोनों विकल्प मेरे लिए काम करते हैं, और मैंने उन्हें बिखरे हुए मामले में दोनों का उपयोग किया है। मैं इस पर दूसरों के विचारों को भी देखना चाहता हूं। – omarello

उत्तर

2

यह वास्तव में एक वास्तव में दिलचस्प सवाल है, क्योंकि यह कुछ रोचक डिजाइन निर्णयों का खुलासा करता है।

मैं आंशिक टेम्पलेट्स को प्रस्तुत करना पसंद करता हूं क्योंकि यह मेरे अनुप्रयोगों को समय के साथ बदलने की क्षमता देता है। यदि मुझे चार्ट के साथ <table> से <div> में बदलने की आवश्यकता है, तो टेम्पलेट में इसे समाहित करना आसान है। इसे ध्यान में रखते हुए, मैं लगभग हर पृष्ठ को कई छोटे टेम्पलेट्स के कुल के रूप में देखता हूं, जो बदल सकता है। Grails 2.0 डिफ़ॉल्ट मचान इस प्रकार के दृष्टिकोण की ओर बढ़ गया है, और यह एक अच्छा विचार है।

सवाल यह है कि क्या वे क्लाइंट-साइड टेम्पलेट्स या सर्वर-साइड होना चाहिए इस मुद्दे का क्रूक्स है।

सर्वर साइड टेम्पलेट्स प्रारंभिक पृष्ठ लोड पर अपना मार्कअप क्लीनर रखें।यहां तक ​​कि यदि आप के Mustache जैसे कुछ का उपयोग करते हैं, तो आप थोड़े क्रम में पृष्ठ में एक खाली तत्व (अपने टेम्पलेट के साथ कुछ) रखने की आवश्यकता है, इसे उचित तरीके से शैली दें, और जावास्क्रिप्ट में इसके साथ काम करने के लिए अपनी जानकारी अपडेट करने के लिए इसके साथ काम करें।

कमियां

  • "बातूनी" तार के पार अनुप्रयोगों
  • बड़ा लिफाफे
  • धीमी यूआई प्रतिक्रिया समय (प्रतिक्रियाएं एचटीएमएल, जो स्थिर माना जा सकता है शामिल हैं)

लाभ

  • अच्छा के लिए बहुत सारे सर्वर साइड भाषा अनुभव वाले लोग
  • सर्वर-साइड वातावरण में हस्तक्षेप या संशोधित करना आसान हो सकता है (उदा।) एक पेज से अधिक टेम्पलेट, जो प्रोग्राम के रूप में लोड किए गए हैं और शामिल साथ एम्बेडेड
  • आवेदन सामग्री "एक ही स्थान पर"

क्लाइंट-साइड टेम्पलेट्स वास्तव में सर्वर लोड कम कर सकते हैं के सबसे रखता वापसी, लेकिन। वे एक अनुप्रयोग "कम-चट्टी" बनाते हैं, उस संभावित रूप से आप जेएसओएन बैक के बड़े संग्रह (बाइट्स की एक ही संख्या में, या कम, जो HTML द्वारा लिया जाएगा, में सर्वर पर वापस कॉल की संख्या को कम कर सकता है एक सर्वर-साइड टेम्पलेट योजना)। वे यूआई अनुभव को उपयोगकर्ताओं के लिए वास्तव में तेज़ बनाते हैं, क्योंकि "अपडेट" लिंक पर क्लिक करने से एजेक्स राउंड ट्रिप नहीं करना पड़ता है। कुछ ने कहा है:

एंथोनी ईडन @aeden 10 दिसंबर किये गये पसंदीदा · खुला वेब ऐप्स का भविष्य: अनुरोध कार्यों के द्वारा नियंत्रित किया जाता है, तर्क हमेशा अतुल्यकालिक है, और HTML सर्वर पर उत्पन्न नहीं होती।

कमियां

  • नहीं महान एसईओ के लिए (अन-अर्थ पर प्रारंभिक पृष्ठ लोड बाहरी UI तत्व)
  • आवश्यक है कुछ जावास्क्रिप्ट foo (तत्वों में हेरफेर करने के)

लाभ - उत्तरदायी - छोटे लिफाफे

रुझान लगता है कि क्लाइंट साइड टेम्पलेट्स की तरफ बढ़ रहा है, खासकर एचटीएमएल 5 जोड़ों (जैसे <canvas>) द्वारा उजागर की गई शक्ति के साथ ... लेकिन यदि उन्हें लीवरेज करने की आवश्यकता है तो आपको उन तकनीकों पर भरोसा करना होगा जिनके बारे में आप बेहद परिचित नहीं हैं, और आप Grails के साथ अधिक सहज महसूस करते हैं आंशिक, उन लोगों के साथ शुरू करना और बाद में प्रदर्शन और अन्य चिंताओं के आधार पर क्लाइंट साइड टेम्प्लेट की ओर रिफैक्टरिंग की जांच करना फायदेमंद हो सकता है।

0
मेरे विचार में

दूसरा विकल्प प्रतिपादन क्योंकि अगर आप एक json डेटा प्राप्त तुम सिर्फ तुम के बाद, सेट शैली है जैसे कि यह हेरफेर जरूरत के अनुसार तत्वों, सेट मूल्यों और समान बात बनाने के लिए की अपेक्षा की जाती आंशिक बेहतर है जावास्क्रिप्ट में AJAX प्रतिक्रिया प्राप्त करें, लेकिन यदि आप आंशिक प्रस्तुत करते हैं, तो आप पहले से उस आंशिक रूप में अपना दृश्य डिज़ाइन कर सकते हैं और तैयार रह सकते हैं और केवल AJAX कॉल का उपयोग करके आयात कर सकते हैं, इसलिए प्रतिक्रिया डेटा को संभालने की कोई ज़िम्मेदारी नहीं है।

0

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

+0

कुछ पानी उपचार नमूने के लिए डेटा अधिकतर सामान्य पाठ मूल्य है। भार मूल रूप से कुछ पूरक ऐतिहासिक डेटा को पकड़ता है जो उपयोगकर्ता को इसकी आवश्यकता होने तक पहले इंटरैक्शन पर लोड करने के लिए बहुत प्रासंगिक नहीं है। सर्वर से लोड करने के लिए wrt, मुझे लगता है कि आंशिक टेम्पलेट के उचित कैशिंग के साथ यह कोई मुद्दा नहीं होना चाहिए? – omarello

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