एकल पृष्ठ वेब अनुप्रयोग के निर्माण के फायदे और नुकसान [बंद]


52

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

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

लाभ

  • सभी डेटा को किसी प्रकार के एपीआई के माध्यम से उपलब्ध होना चाहिए - यह मेरे उपयोग के मामले के लिए एक बड़ा लाभ है क्योंकि मैं अपने आवेदन के लिए वैसे भी एपीआई करना चाहता हूं। डेटा प्राप्त / अद्यतन करने के लिए अभी मेरे लगभग 60-70% कॉल REST API के माध्यम से किए जाते हैं। एक पृष्ठ का आवेदन करने से मुझे अपने REST API का बेहतर परीक्षण करने की अनुमति मिलेगी क्योंकि एप्लिकेशन स्वयं इसका उपयोग करेगा। इसका यह भी अर्थ है कि जैसे-जैसे एप्लिकेशन बढ़ता है, एपीआई स्वयं बढ़ेगा, क्योंकि एप्लिकेशन का उपयोग करता है; एप्लिकेशन में ऐड-ऑन के रूप में एपीआई को बनाए रखने की कोई आवश्यकता नहीं है।

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

नुकसान

  • कोड का दोहराव - उदाहरण के लिए, मॉडल कोड। मैं सर्वर साइड (इस मामले में PHP) और जावास्क्रिप्ट में क्लाइंट साइड दोनों पर मॉडल बनाने जा रहा हूं।
  • जावास्क्रिप्ट में व्यावसायिक तर्क - मैं इस बारे में कोई ठोस उदाहरण नहीं दे सकता कि यह क्यों खराब होगा लेकिन यह सिर्फ मुझे जावास्क्रिप्ट में व्यावसायिक तर्क होने के लिए सही नहीं लगता है जिसे कोई भी पढ़ सकता है।
  • जावास्क्रिप्ट मेमोरी लीक - चूंकि पेज कभी भी लोड नहीं होता है, जावास्क्रिप्ट मेमोरी लीक हो सकता है, और मुझे यह भी नहीं पता होगा कि उन्हें कहां से डिबग करना है।

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

सिंगल पेज वेब एप्लिकेशन के कुछ फायदे और नुकसान क्या हैं जिन्हें मुझे यह ध्यान में रखना चाहिए कि मुझे अपने प्रोजेक्ट के लिए किस रास्ते पर जाना चाहिए?


बेसकैंप , बेसकैमफक का नया संस्करण सिंगल पेज सेटअप आईएमओ के साथ बहुत अच्छा काम कर रहा है।
हकन डेरिल

आप क्रोम के ढेर इंस्पेक्टर के साथ मेमोरी लीक्स पा सकते हैं: gent.ilcore.com/2011/08/finding-memory-leaks.html
जोएरी सेब्रचट्स

अनिवार्य xkcd.com/1309
Pieter B

जवाबों:


17

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

जहां तक ​​कोड को डुप्लिकेट करने या क्लाइंट पर बिजनेस लॉजिक लगाने की बात है - मुझे यकीन नहीं है कि आपको कितना करना है। यदि क्लाइंट पर मॉडल एक व्यू-मॉडल है (एक मॉडल जो दुनिया के साथ मेल खाता है जैसे कि यूआई इसे देखता है, न कि एक बिजनेस मॉडल) तो लॉजिकमॉडल के बिजनेस मॉडल तक मेल खाने वाले तर्क क्लाइंट पर रहते हैं, सर्वर, या दोनों का एक सा। यह इस बात पर निर्भर करता है कि आप अपने एपीआई के बारे में कैसा महसूस करते हैं जिसमें क्लाइंट-विशिष्ट मुखौटा होता है।

तुम भी पीटकर देखना चाहते हो सकता है। Js। मैं यह नहीं कह सकता कि यह बैकबोन से बेहतर है लेकिन यह आपके प्रोजेक्ट को बेहतर बना सकता है।


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

7

नुकसान मैं अक्सर सिंगल पेज वेब एप्लिकेशन के साथ देखता हूं:

  • साइट के एक विशिष्ट भाग से लिंक करने में असमर्थता, अक्सर केवल 1 प्रविष्टि बिंदु होता है।
  • अव्यवस्थित बैक और फॉरवर्ड बटन।
  • टैब का उपयोग सीमित या गैर-मौजूद है।

(विशेषकर मोबाइल :)

  • लोड करने के लिए बहुत लंबा है।
  • कार्य बिल्कुल न करें।
  • पृष्ठ को फिर से लोड नहीं किया जा सकता है, नेटवर्क का अचानक नुकसान आपको साइट की शुरुआत में वापस ले जाता है।

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


9
1,2 और 6 मूल रूप से एक ही समस्या के सिम्फोम हैं। कि रचनाकार इतिहास API / हैश लिंकिंग का उपयोग नहीं करता है।
मार्टिन हैनसेन

11
यह उत्तर पुराना है, अधिकांश सिंगल पेज एप्लीकेशन फ्रेमवर्क में उपरोक्त मुद्दों से निपटने का एक तरीका है
लुइस

@ जबकि तकनीक है, तब भी अक्सर इसका उपयोग नहीं किया जाता है।
पीटर बी

5

एक सभी महत्वपूर्ण ग्राहक है जो कभी भी जावास्क्रिप्ट नहीं चलाता है: Google क्रॉलर (2012 तक) । (बिंग जेएस भी नहीं चला, मुझे लगता है)

आपको प्रत्येक पृष्ठ का एक उचित गैर-AJAX संस्करण प्रदान करना होगा जिसे अनुक्रमित करने की आवश्यकता है, या एक पृष्ठ के लिंक को अनुक्रमित करने की आवश्यकता है।

यदि आपकी साइट छोटी है, तो आप बॉटम इंडेक्सिंग बॉट के लिए कुछ पेजों के बहुत ही मूल संस्करण प्रदान कर सकते हैं।

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

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


4
Googlebot अभी कुछ जावास्क्रिप्ट को पढ़ता है और निष्पादित भी करता है। देखें googlewebmastercentral.blogspot.com/2011/11/...
jfrankcarr

2
इस विशेष प्रश्न के लिए, यह एक परियोजना प्रबंधन ऐप है। शायद एक एसईओ योग्य साइट नहीं है।
जॉर्डन

SEO अधिकांश पेज के लिए बहुत बड़ी चिंता का विषय नहीं है, हालांकि यह व्यक्तिगत मुद्दों को एसईओ करने में सक्षम होना अच्छा होगा क्योंकि यह इसे अनाम एक्सेस की अनुमति देने के लिए कॉन्फ़िगर करने योग्य होगा (ताकि यदि कोई उपयोगकर्ता उत्पाद के साथ होने वाली समस्या को हल करता है, तो वे कर सकते हैं ट्रैकर में इससे संबंधित समस्या का पता लगाएं)।
रैनज़ेक

1
2015 अपडेट: Google ने JS
rinogo

3

कोड का डुप्लीकेशन - उदाहरण के लिए, मॉडल कोड। मैं सर्वर साइड (मामले में PHP) और जावास्क्रिप्ट में सर्वर साइड दोनों पर मॉडल बनाने जा रहा हूं।

आप PHP दुनिया में हैं, लेकिन स्वचालित रूप से जावास्क्रिप्ट WCF परदे के पीछे बनाने के लिए .NET दुनिया में कोड-पीढ़ी की रणनीतियाँ हैं। यहाँ देखें

मुझे नहीं पता कि PHP एप्लिकेशन में जावास्क्रिप्ट में अपने रिमोट ऑब्जेक्ट बनाने के लिए क्या विकल्प उपलब्ध नहीं हो सकते हैं, लेकिन यह .NET में सिंगल पेज एप्लिकेशन लिखने वालों के लिए एक विकल्प है।


0

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

संक्षेप में:

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

1
JWt एक जावा टूलकिट है। सवाल PHP के बारे में है।
जोएरी सेब्रचेट्स 10
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.