दिलचस्प पोस्ट
नोडजेएस – वास्तव में क्या मतलब है "सॉकेट लटका"? पायथन से जीडीबी को इकट्ठा और नियंत्रित करें पायथन में एन-ग्राम, टीएफ- आईडीएफ और कोसाइन समानता का सरल कार्यान्वयन रूबी में एसएसएल पर HTTP POST विधि को कैसे खोलें? नेट पर कोई अच्छा UIScrollView ट्यूटोरियल हैं? जीआईटी संस्करण नियंत्रण प्रणाली का प्रयोग करके बाइनरी फ़ाइलों को लॉक करना चयन के साथ सम्मिलित करें पीआईएल थंबनेल मेरी छवि घूम रहा है? रूबी में कोई वेतन वृद्धि ऑपरेटर (++) नहीं है? फ़ंक्शन को हर 60 सेकंड कॉल करना अपवाद फेंकने के लिए कब? क्या मैं यूआरएल में अल्पविराम का उपयोग कर सकता हूं? Google शीट में आप गतिशील / निर्भर ड्रॉप डाउन कैसे करते हैं? IntelliJ की क्लासपाथ में गुण फ़ाइल जोड़ें .NET: इसकी स्थिर विधि में "इस" वर्ग का प्रकार निर्धारित करें

JSON की बजाए जेनरेट किए गए HTML को लौटाने का यह एक बुरा अभ्यास क्यों है? या यह है?

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

लेकिन सभी किताबें, सभी विशेषज्ञ मुझे जेएसएएन के बजाय जेनरेट किए गए HTML का इस्तेमाल करने की कोशिश कर रहे हैं। यह एचटीएमएल से ज्यादा बेहतर है?

क्या यह बहुत तेज़ है?
क्या इसका सर्वर पर बहुत कम भार है?

दूसरी ओर मेरे पास जनरेटेड HTML का उपयोग करने के कुछ कारण हैं I

  1. यह सरल मार्कअप है, और अक्सर कॉम्पैक्ट या वास्तव में JSON से अधिक कॉम्पैक्ट।
  2. यह कम त्रुटि प्रवण कारण है कि आप सभी को मार्कअप है, और कोई कोड नहीं है।
  3. अधिकांश मामलों में यह प्रोग्राम के लिए तेज़ हो जाएगा, क्योंकि आपको ग्राहक अंत के लिए कोड को अलग से लिखना नहीं होगा।

आप किन पक्ष पर हैं और क्यों?

Solutions Collecting From Web of "JSON की बजाए जेनरेट किए गए HTML को लौटाने का यह एक बुरा अभ्यास क्यों है? या यह है?"

मैं वास्तव में दोनों पक्षों पर थोड़ा सा हूं:

  • जब मुझे जावास्क्रिप्ट की तरफ की जरूरत है तो डेटा है , मैं JSON का उपयोग करता हूं
  • जब मुझे जावास्क्रिप्ट की तरफ की आवश्यकता होती है तो प्रस्तुति है जिस पर मैं कोई गणना नहीं करता, मैं आमतौर पर HTML का उपयोग करता हूं

HTML का उपयोग करने का मुख्य लाभ यह है कि जब आप अपने पृष्ठ के पूरे हिस्से को अजाक्स अनुरोध से वापस आना चाहते हैं, तो उसे बदलना चाहते हैं:

  • जेएस में पृष्ठ का एक हिस्सा फिर से बनाना मुश्किल है
  • आप शायद पहले से ही सर्वर साइड पर कुछ टेम्पलेटिंग इंजन हैं, जिसका उपयोग पृष्ठ को पहली जगह में करने के लिए किया गया था … क्यों इसका पुन: उपयोग नहीं करें?

मैं आमतौर पर वास्तव में चीजों के "प्रदर्शन" पक्ष को ध्यान में नहीं मानता, कम से कम सर्वर पर:

  • सर्वर पर, एचटीएमएल या कुछ जेएसओएन के एक हिस्से को उत्पन्न करना संभवतः उस फर्क से ज्यादा नहीं होगा
  • नेटवर्क के माध्यम से चलाए जा रहे सामान के आकार के बारे में: ठीक है, आप संभवत: डेटा / html के सैकड़ों KB का उपयोग नहीं करते … जो भी आप स्थानांतरित कर रहे हैं, gzip का उपयोग करना सबसे बड़ा अंतर (एचटीएमएल और JSON)
  • एक बात जो ध्यान में रखी जा सकती है, हालांकि, यह है कि जेएसएएन डेटा से एचटीएमएल (या डीओएम संरचना) को पुनः बनाने के लिए आपको कौन से संसाधनों की आवश्यकता होगी … तुलना करें कि पृष्ठ में एचटीएमएल के एक हिस्से को खिसकाने के लिए; -)

अंत में, एक बात जो निश्चित रूप से महत्वपूर्ण होती है:

  • आपको एक नई प्रणाली विकसित करने में कितना समय लगेगा जो डेटा को JSON + code के रूप में भेज देगा जो इसे पृष्ठ में HTML के रूप में इंजेक्ट करना आवश्यक है?
  • केवल HTML लौटने के लिए कितना समय लगेगा? और कब तक आप अपने पहले से मौजूद सर्वर-साइड कोड में से कुछ का पुन: उपयोग कर सकते हैं?

और एक और जवाब का जवाब देने के लिए: यदि आपको पेज के एक से अधिक हिस्से को अपडेट करने की आवश्यकता है, तो फिर भी समाधान / एक बड़े स्ट्रिंग के अंदर उन सभी भागों को भेजने का है जो कई HTML भागों को समूह में भेजता है, और जेएस में प्रासंगिक भागों को निकालता है।

उदाहरण के लिए, आप कुछ स्ट्रिंग लौटा सकते हैं जो इस तरह दिखता है:

<!-- MARKER_BEGIN_PART1 --> here goes the html code for part 1 <!-- MARKER_END_PART1 --> <!-- MARKER_BEGIN_PART2 --> here goes the html code for part 2 <!-- MARKER_END_PART2 --> <!-- MARKER_BEGIN_PART3 --> here goes the json data that will be used to build part 3 from the JS code <!-- MARKER_END_PART3 --> 

यह वास्तव में अच्छा नहीं दिखता है, लेकिन यह निश्चित रूप से उपयोगी है (मैंने इसे कई बार उपयोग किया है, अधिकतर जब HTML डेटा JSON में समझाए जाने के लिए बहुत बड़ा था) : आप उस पृष्ठ के भागों के लिए HTML भेज रहे हैं प्रस्तुति की आवश्यकता है, और आप जो भी डेटा की ज़रूरत है उसके लिए JSON भेज रहे हैं …

… और उन लोगों को निकालने के लिए, जेएस substring विधि चाल करेंगे, मुझे लगता है 😉

मैं मुख्य रूप से यहां बताए गए राय से सहमत हूं। मैं उन्हें इन्हें संक्षेप में प्रस्तुत करना चाहता था:

  • अगर आप इसे क्लाइंट-पक्ष को पार्स करने के लिए खत्म करते हैं, तो HTML भेजना बुरा व्यवहार है।

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

कुंआ,

मैं उन दुर्लभ व्यक्तियों में से एक हूं जो इस तरह से अलग बातें पसंद करता है: – सर्वर डेटा (मॉडल) देने के लिए जिम्मेदार है; – ग्राहक (देखें) दिखाने और डेटा (मॉडल) में हेरफेर करने के लिए जिम्मेदार है;

इसलिए, सर्वर को मॉडल वितरित करने पर ध्यान देना चाहिए (इस मामले में JSON बेहतर है)। इस तरह आप एक लचीली दृष्टिकोण प्राप्त करें यदि आप अपने मॉडल के दृश्य को बदलना चाहते हैं, तो आप सर्वर को उसी डेटा को भेजते हैं और सिर्फ क्लाइंट, जावास्क्रिप्ट घटकों को बदलते हैं, जो डेटा को एक दृश्य में बदलते हैं। कल्पना कीजिए, आपके पास मोबाइल डिवाइसेज़ के साथ-साथ डेस्कटॉप ऐप के लिए डेटा वितरित करने वाला सर्वर है।

साथ ही, इस दृष्टिकोण से उत्पादकता बढ़ जाती है, क्योंकि सर्वर और क्लाइंट कोड को एक ही समय में बनाया जा सकता है, फोकस कभी नहीं खोया जाता है, जो कि जब आप जेएस से पीएचपी / जावा / इत्यादि पर स्विच करते रहते हैं तो क्या होता है।

आम तौर पर, मुझे लगता है कि अधिकांश लोग सर्वर पक्ष पर जितना संभव हो उतना करना पसंद करते हैं क्योंकि वे जेएस मास्टर नहीं करते हैं, इसलिए वे इसे यथासंभव अधिक से बचने का प्रयास करते हैं।

असल में, मुझे उन लोगों के रूप में एक ही राय है जो कांगारू पर काम कर रहे हैं मेरी राय में यह वेब ऐप्स का भविष्य है

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

इसकी जांच – पड़ताल करें:

 public JsonResult MyJsonObject(string someData) { return Json(new { SomeData = someData, PartialView = RenderPartialViewToString("JsonPartialView", null) }, JsonRequestBehavior.AllowGet); } 

RenderPartialViewToString () क्या आप पूछ सकते हैं? यहां इस शीतलन के इस छोटे से डंडे हैं:

 protected string RenderPartialViewToString(string viewName, object model) { ViewData.Model = model; using (StringWriter sw = new StringWriter()) { ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName); ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw); viewResult.View.Render(viewContext, sw); return sw.GetStringBuilder().ToString(); } } 

मैंने इस पर कोई निष्पादन परीक्षण नहीं किया है इसलिए मुझे यकीन नहीं है कि यह जेएसन रिसेशल्ट के लिए एक ऐक्शन मेथिस और एक पाश्चात्य ViewResult के लिए एक कॉल करने से अधिक या कम ओवरहेड होता है, लेकिन मैं अभी भी सोचा था कि यह बहुत अच्छा था। यह सिर्फ एक आंशिक दृश्य को एक स्ट्रिंग में सीरियल कर देता है और इसे जेएसन के साथ एक पैरामीटर के रूप में भेजता है तब मैं उस पैरामीटर को लेने के लिए और इसे उपयुक्त DOM नोड में थप्पड़ करने के लिए JQuery का उपयोग करता हूं 🙂

मुझे पता है तुम मेरे संकर के बारे में क्या सोचते हो!

यदि प्रतिक्रिया को आगे क्लाइंट-साइड प्रसंस्करण की आवश्यकता नहीं है, तो HTML मेरी राय में ठीक है JSON भेजना आपको केवल उस ग्राहक-पक्ष प्रसंस्करण के लिए मजबूर कर देगा

दूसरी ओर, जब मैं एक बार में सभी प्रतिक्रिया डेटा का उपयोग नहीं करना चाहता हूं, तो मैं JSON का उपयोग करता हूं। उदाहरण के लिए, मेरे पास तीन संगीन चयनों की एक श्रृंखला है, जहां एक का मान चयनित करता है कि कौन-से मूल्य दूसरे को पॉपुलेट करने के लिए इस्तेमाल किया जा रहा है, और इसी तरह।

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

JSON बहुत बहुमुखी और हल्के प्रारूप है मैंने इसकी सुंदरता की खोज की है जब मैंने इसे क्लाइंट साइड टेम्पलेट पार्सर डेटा के रूप में उपयोग करना शुरू कर दिया है। मुझे समझाने दो, जब तक मैं चालाकी का उपयोग कर रहा था और सर्वर साइड (उच्च सर्वर लोड पैदा करने के लिए) पर विचार कर रहा था, अब मैं कुछ कस्टम jquery फ़ंक्शंस का उपयोग करता हूं और सभी डेटा क्लाइंट साइड पर प्रस्तुत किया जाता है, क्लाइंट ब्राउज़र का उपयोग करके टेम्पलेट पार्सर के रूप में। यह सर्वर रिसोर्स बचाता है और दूसरे हाथ पर ब्राउज़ किए जाते हैं, हर दिन अपने एसएस इंजन को सुधारते हैं। इसलिए क्लाइंट पार्सिंग की गति अभी एक महत्वपूर्ण मुद्दा नहीं है, और इससे भी ज्यादा, जेएसएएन ऑब्जेक्ट्स आम तौर पर बहुत कम हैं इसलिए वे बहुत से क्लाइंट साइड रिसोर्स का उपभोग नहीं करते हैं मैं धीमे ब्राउज़र वाले कुछ उपयोगकर्ताओं के लिए धीमी साइट को बहुत धीमा साइट के बजाय बहुत लोड सर्वर की वजह से पसंद करता हूं।

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

बस मेरे 2 सेंट

यदि आप एक साफ decoupled ग्राहक चाहते हैं, जो मेरी राय में सर्वोत्तम अभ्यास है, तो यह जावास्क्रिप्ट द्वारा बनाई गई डोम का 100% होना समझ में आता है। यदि आप किसी एमवीसी आधारित क्लाइंट का निर्माण करते हैं जिसमें सभी जानते हैं कि यूआई बनाने के लिए आपके उपयोगकर्ता एक बार जावास्क्रिप्ट फ़ाइल डाउनलोड करते हैं और क्लाइंट पर कैश की जाती है प्रारंभिक लोड के बाद सभी अनुरोध अजाक्स आधारित होते हैं और केवल डेटा वापस करते हैं इस दृष्टिकोण को मैंने पाया है और प्रस्तुति के एक स्वच्छ स्वतंत्र encapsulation के लिए प्रदान करता है साफ है।

सर्वर साइड तब सिर्फ डेटा वितरित करने पर केंद्रित है।

तो कल जब उत्पाद आपको एक पृष्ठ के डिजाइन को बदलने के लिए कहता है, तो आप जो भी बदलाव करते हैं वह स्रोत जेएस है जो DOM बनाता है, लेकिन संभवतः आपके पहले से मौजूद ईवेंट हैंडलर्स का पुन: उपयोग करने की संभावना है और सर्वर अनजान है क्योंकि यह प्रस्तुति से 100% कम है

आपके UI पर निर्भर करते हुए, आपको अपने DOM में दो (या अधिक) विभिन्न तत्वों को अपडेट करने की आवश्यकता हो सकती है। यदि आपकी प्रतिक्रिया एचटीएमएल में है, तो क्या आप इसे समझने के लिए जा रहे हैं कि कहां जाता है? या आप सिर्फ एक JSON हैश का उपयोग कर सकते हैं

आप इसे जोड़ सकते हैं, एक JSON w / html डेटा वापस कर सकते हैं 🙂

 { 'dom_ele_1' : '<p>My HTML part 1</p>', 'dome_ele_2' : '<div>Your payment has been received</div>' } 

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

सामान्य रूप से जेसन भेजा जा रहा है जब आपके पास एक जावास्क्रिप्ट विजेट है जो सर्वर से जानकारी का अनुरोध करता है, जैसे कि सूची या किसी पेड़ के दृश्य या एक स्वत: पूर्ण यह तब होता है जब मैं JSON भेजूंगा क्योंकि यह डेटा है जो पार्स किया जाएगा और कच्चा उपयोग करेगा। हालांकि यदि आपका एचटीएमएल दिखाने वाला है तो इसके लिए सर्वर का निर्माण करने के लिए बहुत कम काम है और इसे ब्राउज़र पर दिखाएं। ब्राउज़र एचटीएमएल को सीधे आंतरिक में डालने के लिए ऑप्टिमाइज़ किया जाता है innerHTML = "" ताकि आप उसमें गलत न हो।

मुझे लगता है कि यह डिजाइन की संरचना पर निर्भर करता है, यह HTML के अलावा JSON का उपयोग करने के लिए अधिक सेक्सी है, लेकिन सवाल यह है कि यह कैसे संभाल सकता है ताकि इसे आसानी से बनाए रख सकें

उदाहरण के लिए, मेरे पास सूची पृष्ठ है जो संपूर्ण साइट का एक ही HTML / शैली का उपयोग करता है, मैं उन कार्यों को HTML स्वरूप के स्वरूप में लिखने के लिए वैश्विक फ़ंक्शन लिखूंगा और मुझे जो भी करना है, वह JSON ऑब्जेक्ट फ़ंक्शन में गुजर रहा है।

अधिकांश मामलों में HTML प्रतिक्रिया पर्याप्त नहीं है, जब तक आपको क्लाइंट पक्ष में कुछ गणना करने की आवश्यकता नहीं है।