2011-09-27 11 views
17

हम रीढ़ की हड्डी के अनुप्रयोग को डिजाइन कर रहे हैं, जिसमें प्रत्येक सर्वर-साइड संग्रह में हजारों रिकॉर्ड शामिल होने की क्षमता है। एक समानता के रूप में - एक ईमेल एप्लिकेशन के 'प्रेषित आइटम' दृश्य में जाने के बारे में सोचें।बड़े बैकबोन संग्रहों के साथ काम करना

बैकबोन उदाहरण मैंने देखा है के बहुमत में, संग्रह शामिल सबसे 100-200 रिकॉर्ड पर हैं, और इसलिए पूरे संग्रह प्राप्त करने और ग्राहक में यह काम करने के साथ अपेक्षाकृत आसान है। मुझे विश्वास नहीं है कि यह एक बहुत बड़ा सेट के साथ मामला होगा।

किसी बड़े सर्वर साइड संग्रह पर बैकबोन के साथ किसी भी काम किया है?

  • क्या आपको किसी विशेष संग्रह आकार पर प्रदर्शन समस्याओं (विशेष रूप से मोबाइल डिवाइस पर) का सामना करना पड़ा है?
  • सर्वर से कितना निर्णय लेना है इसके बारे में आपने क्या निर्णय लिया है?
  • क्या आप सब कुछ डाउनलोड करते हैं या बस एक सबसेट?
  • कहाँ आप किसी भी कस्टम तंत्र के चारों ओर तर्क रख सकता हूं (उदाहरण के लिए संग्रह प्रोटोटाइप?)

उत्तर

11
  1. हाँ, लगभग 10,000 आइटम में, पुराने ब्राउज़र नहीं प्रदर्शन में अच्छी तरह से संभाल सकता था। हमने सोचा कि यह बैंडविड्थ मुद्दा था, लेकिन यहां तक ​​कि स्थानीय रूप से, एक उच्च प्रदर्शन मशीन के रूप में जितनी बैंडविड्थ उतनी ही फेंक सकती थी, जावास्क्रिप्ट बस थोड़े से बाहर निकल गया। यह फ़ायरफ़ॉक्स 2 और आईई 7 पर सच था; मैंने इसे बड़े सिस्टम पर परीक्षण नहीं किया है।

  2. हम सब कुछ लाने की कोशिश कर रहे थे। यह बड़े डेटासेट के लिए काम नहीं किया था। यह एंड्रॉइड के ब्राउज़र के साथ विशेष रूप से हानिकारक था।

  3. हमारे डेटा वृक्ष संरचना में डेटा की उपस्थिति के आधार पर अन्य डेटा के साथ एक वृक्ष संरचना में था,। अन्य उपयोगकर्ताओं, या कार्यक्रम के अन्य हिस्सों के कार्यों के कारण डेटा बदल सकता है। आखिरकार, हमने पेड़ की संरचना को केवल वर्तमान में दृश्यमान नोड्स लाया, और सिस्टम के अन्य हिस्सों ने उन डेटासेट की वैधता को सत्यापित किया जिन पर वे स्वतंत्र रूप से निर्भर हैं। यह एक दौड़ की स्थिति है, लेकिन वास्तविक तैनाती में हमने कभी भी कोई समस्या नहीं देखी। मुझे यहां socket.io का उपयोग करना अच्छा लगेगा, लेकिन प्रबंधन को समझ में नहीं आया या भरोसा नहीं था।

  4. चूंकि मैं कॉफ़ीस्क्रिप्ट का उपयोग करता हूं, मुझे बस बैकबोन से विरासत मिली है। चयन और अपना खुद का सुपरक्लास बनाया, जिसने कस्टम sync() कॉल को तुरंत चालू किया। एक सुपर क्लास की विधि लागू वाक्य विन्यास को यहाँ वास्तव में उपयोगी है:

    class Dataset extends BaseAccessClass 
        initialize: (attributes, options) -> 
         Dataset.__super__.initialize.apply(@, arguments) 
         # Customizations go here. 
    
+0

इसके लिए धन्यवाद, बहुत उपयोगी – isNaN1247

2

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

आप एक कार्यकर्ता का उपयोग करके एक और शारीरिक सीपीयू धागे पर काम कर दिया और उसके बाद क्षणिक वस्तुओं का उपयोग क्रम डोम पर प्रस्तुत करने के लिए में मुख्य थ्रेड के पास भेजा कर सकते हैं।

एक बार आपके पास एक संग्रह है जो डोम आलसी प्रतिपादन में बड़ी प्रतिपादन केवल आपको प्राप्त करेगा। जब तक यह ब्राउज़र को क्रैश नहीं करता तब तक स्मृति धीरे-धीरे बढ़ेगी (जो गोलियों पर त्वरित होगी)। आपको तत्वों पर ऑब्जेक्ट पूलिंग का उपयोग करना चाहिए। यह आपको स्मृति के लिए एक छोटा अधिकतम आकार सेट करने और वहां रखने की अनुमति देगा।

मैं बैकबोन के लिए एक पेर्फ व्यू बना रहा हूं जो 1,000,000 मॉडल प्रस्तुत कर सकता है और क्रोम पर 120FPS पर स्क्रॉल कर सकता है। कोड गिटूब https://github.com/puppybits/BackboneJS-PerfView पर है। यह टिप्पणी की गई है कि कई अन्य अनुकूलन हैं जिन्हें आपको बड़े डेटा सेट प्रदर्शित करने की आवश्यकता होगी।

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