2012-12-05 16 views
7

मैं वर्तमान में यह लिख रहा हूं कि एक बहुत बड़ा एकल पृष्ठ वेब/जावास्क्रिप्ट एप्लिकेशन क्या होगा।बहुत बड़ी एकल पृष्ठ एप्लिकेशन डिज़ाइन समस्याएं

मैं जिन तकनीकों का उपयोग कर रहा हूं वे एएसपी.नेट एमवीसी 4, jquery, knockout.js और amplify.js हैं।

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

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

उदाहरण:

App.loadModule = function(path, callback){ 

    App.mainContentContainer.load(App.siteRoot + path, callback); 

}; 

सब कुछ ठीक चल रहा था जब तक मैं वास्तव में नव लोड पर विभिन्न प्रपत्र तत्वों के साथ बातचीत शुरू करने के लिए की जरूरत:

function handleLoginClick(){ 

    App.mainContentContainer.delegate('#btnLogin', 'click', function() { 

     App.loadModule('Home/ProductionControlMenu', App.MainMenuView.render()); 

    }); 

} 

यहाँ App.loadModule समारोह के लिए कोड है स्क्रीन। jquery सीधे उन पर एक संभाल नहीं लग रहा है। मैं .live() या .delegate() का उपयोग नहीं कर सकता क्योंकि वे ईवेंट नहीं हैं, वे टेक्स्टबॉक्स और बटन हैं और कभी-कभी मुझे अपने सीएसएस कक्षाओं को बदलने की आवश्यकता होती है।

App.mainContentContainer.find('#btnLogin').addClass('disabled'); 
:

वे एक ही तरीका है मैंने पाया बाहरी कवच ​​से एक तत्व तो जैसे और उपयोग jQuery के .find() विधि (कुछ है कि .load() के माध्यम से लोड नहीं किया गया था) पर एक संभाल पाने के लिए है

स्पष्ट रूप से मैं इस तरह कुछ ऐसा नहीं करना चाहता हूं जब भी मुझे किसी तत्व तत्व से बातचीत करने या यहां तक ​​कि पुनर्प्राप्त करने की आवश्यकता हो।

क्या किसी के पास कोई विचार है कि मैं संभावित रूप से सैकड़ों .html फ़ाइलों के साथ एक बनाए रखने योग्य बहुत बड़े एकल पृष्ठ एप्लिकेशन को कैसे बना सकता हूं, बिना किसी फ़ाइल में स्थित सभी HTML कोड के बिना और अभी भी इसके आसपास हो .load () मुद्दा मैं कर रहा हूँ?

किसी भी विचार की सराहना की जाएगी। :-)

वी/आर

क्रिस

अद्यतन

मैंने सोचा कि मैं एक अपडेट पोस्ट होता है और कैसे चीजें चला गया और क्या काम किया है के रूप में। बहुत से शोध के बाद मैंने Google के AngularJS जावास्क्रिप्ट ढांचे के साथ जाने का फैसला किया। यह क्षैतिज रूप से कठिन साबित हुआ और मैं निश्चित रूप से उन सभी को सलाह दूंगा जो इसे देखने के लिए एक बड़ा एसपीए बनाने की सोच रहे हैं।

लिंक:

मुख्य साइट कोणीय पर http://angularjs.org/

बहुत बढ़िया मुक्त लघु वीडियो: http://www.egghead.io/

+3

कोणीय ने आपकी समस्या को किस तरह हल किया? – Greg

+0

क्या आप इस समस्या को हल करने के लिए कोणीय का उपयोग करने का एक छोटा सा उदाहरण दे सकते हैं? या आप दूसरी एचटीएमएल फाइल कैसे लोड कर सकते हैं और टेम्पलेटिंग इत्यादि कैसे लागू कर सकते हैं? –

उत्तर

12

इस रूप में यह वास्तव में अपने वास्तुकला के डिजाइन करने के लिए नीचे हो जाता है वास्तव में एक बहुत ही जटिल सवाल है।

बड़े पैमाने पर सिंगल-पेज अनुप्रयोगों के लिए, backbone.js जैसे कुछ प्रकार के फ्रंट-एंड एमवी * स्टाइल फ्रेमवर्क का उपयोग करना सबसे अच्छा है, जो jQuery में काफी उपयोगी रूप से जुड़ता है। आपको अपनी स्क्रिप्ट और निर्भरताओं को अतुल्यकालिक रूप से लोड करने के लिए require.js जैसे कुछ प्रकार के निर्भरता प्रबंधन ढांचे का उपयोग करने के बारे में भी सोचना चाहिए - और अपने आर्किटेक्चर मॉड्यूलर और प्रबंधित करने में आसान बनाने के लिए अपने एप्लिकेशन डिज़ाइन में एएमडी पैटर्न का उपयोग करें।

जहाँ तक यह कैसे अपने MVC4 परियोजना से संबंधित है के रूप में, आप कुछ विकल्प हैं:

  1. आपके सामने अनुमति देता है, आप एक तरह के "सेवा परत", कि बस JSON ऑब्जेक्ट के रिटर्न के रूप में MVC उपयोग करना चाहते हैं मार्कअप/टेम्पलेट निर्माण (handlebars.js) सोचें, या
  2. क्या आप चाहते हैं कि आपकी एमवीसी प्रोजेक्ट आंशिक विचार (एचटीएमएल) को प्रतिक्रिया के रूप में लौटाएं, जहां आप रेजर टेम्पलेटिंग सिस्टम का लाभ उठाते हैं और बस प्रदर्शित करने के लिए फ्रंट एंड का उपयोग करते हैं सर्वर से वापस क्या आता है?

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

मुझे आशा है कि मैं थोड़ा मदद की है, मैं जानता हूँ कि मैं पूरी तरह से सवाल का जवाब नहीं कर रहा हूँ, लेकिन इस सवाल का जवाब बहुत लंबा हो सकता है!

+1

योजना बी, आपकी मदद आदमी के लिए धन्यवाद। मुझे लगता है कि मैं आंशिक प्रतिपादन के साथ जा सकता हूं और फिर वेब एपीआई से वापस आने वाले जेसन डेटा को प्रस्तुत करने के लिए आंशिक रूप से jquery टेम्पलेट्स या किसी अन्य प्रकार का उपयोग कर सकता हूं। मैं जावास्क्रिप्ट के लिए Requ.js और Knockout का उपयोग करूंगा। वह आवाज कैसी है? – cpeele00

+0

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

+1

@ cpeele00 यदि आप आंशिक मार्ग प्रस्तुत करते हैं तो मैं केवल [** PJAX **] (https://github.com/defunkt/jquery-pjax) या DJAX का उपयोग करता हूं, फिर आप बस अपना ऐप वेब 1.0 विकसित करते हैं। मेरा [उत्तर] देखें (http://stackoverflow.com/a/13750279/318174)। –

0

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

+0

मार्को, आपके इनपुट मैन के लिए धन्यवाद :-) – cpeele00

0

जिस तरह से मैंने इसे टेम्पलेट से संबंधित टेम्पलेट से संबंधित जावास्क्रिप्ट कोड को शामिल करना था। और फिर AJAX का उपयोग कर पूरे टेम्पलेट + स्क्रिप्ट चीज़ लोड करें। यदि आप इसे आजमा देना चाहते हैं तो चेतावनी दी जानी चाहिए कि अधिकांश ब्राउज़र पृष्ठ में इंजेक्शन वाले <script> टैग निष्पादित नहीं करते हैं। विशेष रूप से अगर innerHTML का उपयोग कर किया जाता है। इस प्रकार आपको eval स्क्रिप्ट टैग स्वयं करना चाहिए (वैकल्पिक रूप से आप स्क्रिप्ट को इंजेक्ट करने के लिए document.createElement का उपयोग कर सकते हैं लेकिन यह eval की तुलना में कोई अतिरिक्त लाभ प्रदान नहीं करता है क्योंकि ब्राउजर अंधेरे से स्क्रिप्ट निष्पादित करेगा)।

मेरे मामले में, टेम्पलेट के एचटीएमएल और स्क्रिप्ट भागों को पकड़ना आसान बनाने के लिए मैं अपने टेम्पलेट्स को पुराने पुराने HTML के बजाय एक्सएमएल फाइलों में संग्रहीत करता हूं। इस तरह मैं टेम्पलेट को पार्स करने के लिए AJAX अनुरोध के .responseXML का उपयोग कर सकता हूं।

<template options...> 
    <title>Optional</title> 
    <html><![CDATA[ 

     Template body 

    ]]></html> 
    <init><![CDATA[ 

     // code that only needs to execute once 

    ]]></init> 
    <script><![CDATA[ 

     // code that needs to run every time 
     // the template loads 

    ]]></script> 
</template> 

तुम भी आप टेम्पलेट्स के लिए सही सामग्री प्रकार के साथ जवाब देने के लिए अपने सर्वर को याद करने की जरूरत है: मेरे टेम्पलेट निम्न बुनियादी संरचना है। अन्यथा resultXML काम नहीं करेगा। इस प्रणाली को लागू करने का यह एकमात्र तरीका नहीं है। आप बस अपने टेम्पलेट को एचटीएमएल के रूप में सहेज सकते हैं और फिर एचटीएमएल को निष्पादित करने के लिए स्क्रिप्ट निकालने के लिए पार्स कर सकते हैं।

आपके कोड, फ़ंक्शंस, कंस्ट्रक्टर, ऑब्जेक्ट आदि का मुख्य थोक एक जेएस फ़ाइल में शामिल किया जा सकता है। टेम्पलेट स्क्रिप्ट को केवल उन कार्यों को कॉल करने की आवश्यकता है ताकि शेष पृष्ठ को टेम्पलेट के साथ कैसे काम करना है।

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

वैसे भी, मैंने पिछली बार ऐसा किया था। यह फेसबुक उपयोगकर्ताओं की सेवा के लिए पर्याप्त रूप से स्केल किया गया (वेब ​​ऐप एक फेसबुक ऐप था)। बस मेरा अनुभव साझा करना। आशा करता हूँ की ये काम करेगा।

+0

स्लीबेटमैन, जो बहुत अच्छा और रोचक लगता है। धन्यवाद! – cpeele00

7

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

यह कुछ उचित की तरह लगता है: - एंबर

  • एक एमवी * फ्रेमवर्क (बैकबोन, http://singlepageappbook.com/

    आपको कम से कम चाहते हैं

    • मॉड्यूल प्रणाली के कुछ प्रकार (http://requirejs.org मैं एएमडी सलाह देते हैं)। जेएस इत्यादि)
    • डोम/AJAX फ्रेमवर्क (jQuery, Mootools आदि)।कुछ व्यवस्थाएं इस और इसके बाद के संस्करण (डोजो, YUI, Sencha)
    • निर्माण समाधान के सभी की पेशकश (में विकास/उत्पादन अलग वातावरण है करने के लिए)

    अच्छा लिंक के युगल:

    1. http://nerds.airbnb.com/slides-and-video-from-spike-brehms-tech-talk
    2. http://video.copenhagenjs.dk/video/3413395/simon-hjberg-swipely-building
    3. http://backstage.soundcloud.com/2012/06/building-the-next-soundcloud/
    4. http://www.youtube.com/watch?v=vXjVFPosQHw
  • +0

    जानकारी के लिए धन्यवाद। वे सभी चीजें हैं जिनकी मैं योजना बनाने की योजना बना रहा हूं, हालांकि मेरी प्रारंभिक समस्या एक जैसी नहीं है: एक पृष्ठ पर रखने के लिए टेम्पलेट्स में सामान रखने के लिए बस बहुत अधिक HTML। पृष्ठ का आकार बड़ा होगा। मैं जेएस के लिए एएमडी, requ.js का उपयोग करने के बारे में समझता हूं लेकिन मुझे बहुत सारे टेम्पलेट्स के माध्यम से एचटीएमएल के बहुत से हैंडलिंग के साथ समस्या को हल करने की जरूरत है। जब तक मैं कुछ याद नहीं कर रहा हूँ? – cpeele00

    +0

    आप अपने टेक्स्ट प्लगइन के माध्यम से requjs के साथ टेम्पलेट लोड कर सकते हैं। हालांकि, अधिकांश टेम्पलेट्स, जब पूर्व-संकलित होते हैं, वास्तव में जेएस फाइलें हैं (यदि आप सरल HTML आंशिक पर उचित और तेज़ तकनीक का उपयोग कर रहे हैं तो डीओएम एपीआई के माध्यम से संशोधित)। –

    +0

    बहुत सरल: यदि आपका टेम्पलेट '

  • {{username}}
  • ' है तो इसे संकलित करने के बाद यह 'फ़ंक्शन (उपयोगकर्ता नाम) {वापसी "
  • " + उपयोगकर्ता नाम + "
  • " बन जाएगा; } '। अब जब आप अपने टेम्पलेट के इंजन 'रेंडर' विधि को कॉल करते हैं, तो यह इस जेएस फ़ंक्शन को ले जाएगा और उचित पैरामीटर के साथ कॉल करेगा। टेम्पलेट्स के रूप में HTML का उपयोग करने से यह तेज़ और अधिक लचीला है। –

    0

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

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

    मैंने लॉगिन फ़ॉर्म के लिए एक साधारण विजेट परिभाषा शामिल की है।

    यह HTML टेम्पलेट है।

    /* mine/forms/Login.html */ 
    <div> 
        ${form_name} 
        <label>Username</label> 
        <input data-dojo-type="dijit.form.TextBox" 
          data-dojo-attach-point="_usrfld" /> 
        <br /> 
        <label>Password</label> 
        <input data-dojo-type="dijit.form.TextBox" 
          data-dojo-props="type: 'password'" 
          data-dojo-attach-point="_pwdfld" /> 
        <br /> 
        <input data-dojo-type="dijit.form.Button" 
          data-dojo-props="label: 'Login'" 
          data-dojo-attach-event="onClick:_handleLogin" /> 
    </div> 
    

    यह विजेट के लिए जावास्क्रिप्ट भाग है। जब जरूरत

  • आप विजेट के अंतर्गत विगेट्स हो सकता है

    1. HTML टेम्पलेट आप के लिए लोड किया जाएगा:

      /* mine/forms/Login.js */ 
      define([ 
          "dojo/_base/declare", 
          "dijit/_Widget", 
          "dijit/_Templated", 
          "dijit/_WidgetsInTemplateMixin", 
          "dijit/form/Button", 
          "dijit/form/TextBox", 
          "dojo/text!./Login.html" 
      ], function(
          declare, 
          _Widget, 
          _Templated, 
          _WidgetsInTemplateMixin, 
          Button, 
          TextBox, 
          template 
      ) { 
      
      return declare("mine.forms.Login", [_Widget, _Templated, _WidgetsInTemplateMixin], { 
          // assign the template 
          templateString: template, 
      
          // signal that we will have widgets within our template and the parser should 
          // locate them and instantiate them 
          widgetsInTemplate: true, 
      
          form_name: "My Login Form", 
      
          // place holders that will be referencing the corresponding widgets 
          // that I have placed a data-dojo-attach-point on 
          _usrfld: null, 
          _pwdfld: null, 
          _lgbtn: null, 
      
          // a call back function that will be trigger when the Login button is clicked 
          _handleLogin: function() { 
           var usr = this._usrfld.get('value'); 
           var pwd = this._pwdfld.get('value'); 
      
           // now you have the username & password 
           // you can use it to login 
          } 
      }); 
      
      }); 
      

      कुछ लाभ है कि विजेट प्रणाली प्रदान करता है कर रहे हैं। डोजो आपके लिए उन विगेट्स को तत्काल और यहां तक ​​कि नष्ट करने का ख्याल रखता है

    2. आप स्ट्रिंग डालने में मदद के लिए डोजो की सरल टेम्पलेट भाषा का उपयोग कर सकते हैं। उपरोक्त उदाहरण ${form_name} का उपयोग करता है। यदि आप अधिक परिष्कृत सुविधा का उपयोग करना चाहते हैं तो डोजो एक डीजेंगो समान सिंटैक्स टेम्पलेटिंग भाषा का भी समर्थन करता है। यह आपको Django के साथ उपलब्ध अधिकांश टैग का उपयोग करने की अनुमति देगा, अगर-फिर-अन्य, आदि
    3. data-dojo-attach-point बहुत उपयोगी है। यदि आप इसका उपयोग करते हैं, तो आपको अब किसी DOM तत्व को आईडी असाइन करने की आवश्यकता नहीं होगी। आपको अपने एचटीएमएल डोम पेड़ में तत्व का पता लगाने की आवश्यकता नहीं होगी। data-dojo-attach-point में आपके द्वारा निर्दिष्ट चर या आपके द्वारा टेम्पलेट में परिभाषित डीओएम तत्व को संदर्भित करने के लिए स्वत: असाइन किया जाएगा। उपरोक्त उदाहरण _usrfld, _pwdfld, और _lgbtn का उपयोग करता है।
    4. data-dojo-attach-event भी बहुत उपयोगी है। यदि आप इसका उपयोग करते हैं, तो आपको बटन पर इवेंट हुक को मैन्युअल रूप से जोड़ना नहीं होगा, डोजो का विजेट सिस्टम आपके लिए इसे हुक करेगा और जब आपका विजेट नष्ट हो जाएगा तो हुक भी साफ़ कर देगा।
    5. यदि आप दोजो की बिल्ड सिस्टम का उपयोग करते हैं, जो एक ऐसा सिस्टम है जो आपके सभी जावास्क्रिप्ट कोड लेता है और उन्हें संपीड़ित करता है, तो डोजो आपके टेम्पलेट को वास्तविक HTML से बदल देगा ताकि जब आप अपने विजेट को उत्पादन मोड में लोड कर सकें, तो डोजो को अपने टेम्पलेट को पकड़ने के लिए एक और AJAX अनुरोध करें।

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

  • 4

    यदि आपको जटिल वास्तव में SOFEA एकल पृष्ठ ऐप की आवश्यकता नहीं है तो मैं आपको PJAX मार्ग पर जाने की सलाह देता हूं।

    फिर आप एक ही पृष्ठ लोड के प्रदर्शन लाभ के साथ एक सामान्य वेब 1.0 ऐप के रूप में अपना ऐप लिखते हैं। मैं आपको इस विकल्प पर विचार करने का आग्रह करता हूं क्योंकि यह आपको अपने अधिकांश सत्यापन कार्य सर्वर पक्ष को करने की अनुमति देता है।

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

    इसके अलावा "PJAX तरह से" बहुत , गूगल एसईओ अनुकूल कैश करने के लिए आसान है और तथ्य यह है कि क्या new Basecamp does में है।

    3

    नोट: यह एक टिप्पणी नहीं होना चाहता था, लेकिन उत्तर पोस्ट करने के लिए पर्याप्त विस्तार नहीं है; (
    [समुदाय के सदस्यों द्वारा किए गए किसी भी सुधार का स्वागत है!]

    महत्वपूर्ण बिंदु एक पृष्ठ क्षुधा के लिए विचार करने के लिए:

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

    +1 एक ढांचे का उपयोग करने के बारे में gryzzly के बिंदु के लिए।

    सेन्चा के पास उनके एक्स्टजेस उत्पाद के लिए ढांचे की तरह एक अच्छा एमवीसी है। उनके पास डाटा स्टोर्स, AJAX, आलसी लोडिंग, क्लास पदानुक्रम और पैकेज में बंडल किए गए बहुत कुछ हैं। ऑब्जेक्ट गुणों और विधियों को देखने के लिए उनके पास good api page भी है (आसान है क्योंकि जावास्क्रिप्ट के लिए कोई इंटेलिजेंस नहीं लगता है: /)। उनका एपीआई पेज है; जहां तक ​​मुझे पता है, एक पृष्ठ ऐप का एक उदाहरण। मुझे पता है कि एक्स्टजेज की अधिकांश चीजें आपको ओपन सोर्स विकल्प मिल सकती हैं, लेकिन मुझे लगता है कि यह सिर्फ एक लाइब्रेरी है और मुझे विभिन्न परिचालन करने के लिए कुछ अलग-अलग ढांचे को डाउनलोड करने की ज़रूरत नहीं है। [ध्यान दें: मैं Sencha के लिए कोई संबद्धता उनकी किसी ग्राहक बनने के लिए छोड़कर उनके सामान है और अच्छा लगता है।]

    निष्कर्ष:

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

    एकल पृष्ठ ऐप्स मुझे लगता है कि अधिक जटिल हैं इसलिए आपकी टीम को एक पृष्ठ ऐप की अवधारणा को समझने और इसे कार्यान्वित करने के तरीके में काफी आसान होना होगा। यदि आप इसे साइट से खींचते हैं तो उपयोगकर्ता अनुभव के मामले में अद्भुत होगा।

    0

    बड़े आकार के एकल पृष्ठ एप्लिकेशन को संभालने के लिए अलग-अलग ऐप्स में अलग-अलग मॉड्यूल को तोड़ने की अनुशंसा की जाती है।
    उदाहरण: खोज पृष्ठ ऐप और परिणाम पृष्ठ ऐप जैसे ऐप्स।

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