2012-01-12 12 views
9

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

मेरे नए वेब एप्लिकेशन में, मैं बैकबोन.जेएस, Requ.js और jQuery का उपयोग करता हूं। मेरे सभी मॉड्यूल एएमडी (jquery 1.7.1, backbone.js 0.5.3-optamd3, ...) हैं।

डेरिक बेली के दिलचस्प ब्लॉग (http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/) पढ़ने के बाद अब मैं एक नए "पृष्ठ" में संक्रमण करने से पहले अपने divs को साफ़ करता हूं और उपयोगकर्ता इसे वापस आने पर इसे फिर से बना देता हूं।

इसी तरह, requjs amd मॉड्यूल के बारे में मुझे स्मृति रणनीति पर गति होती थी: मेरे वेब ऐप नेविगेशन का दिल मेरी एकमात्र राउटर ऑब्जेक्ट में है। यदि उपयोगकर्ता पहली बार "पेज"/फीचर का चयन करता है, तो मैं एएमडी मॉड्यूल लोड करता हूं (यह एक backbone.js ऑब्जेक्ट है) इसके लिए और इसकी सभी निर्भरताओं को कमांड कमांड के साथ लोड करें और इस परिणामी व्यू ऑब्जेक्ट को स्टोर करें (इसकी मॉडल ऑब्जेक्ट के साथ) बाद में राउटर ऑब्जेक्ट में एक सरणी में उपयोग के लिए। जब उपयोगकर्ता वापस आता है, तो मैं संग्रहीत दृश्य ऑब्जेक्ट लेता हूं और दृश्य को फिर से प्रस्तुत करता हूं।

मुझे लगता है कि मैं इस व्यवहार से हमेशा मॉड्यूल (कैश से) को पुनः लोड करने में भी स्विच करूंगा, लेकिन मुझे अनिश्चितता है।

क्रम में सबसे अच्छा रास्ता तय करना में, मैं एक बेहतर समझ प्राप्त करना चाहते हैं और 2 सवाल पूछने के लिए करना चाहते हैं:

  1. मैं 5 एएमडी मॉड्यूल है। जब उपयोगकर्ता को किसी सुविधा की आवश्यकता होती है, तो मैं मॉड्यूल को लोड और निष्पादित करता हूं और परिणामस्वरूप बैकबोन.जेएस ऑब्जेक्ट देखता हूं, जिसे मैं अपने राउटर ऑब्जेक्ट में एक सरणी में संग्रहीत करता हूं। प्रत्येक एएमडी मॉड्यूल में निर्भरता के रूप में बैकबोन.जेएस (एएमडी संस्करण) है। जब उपयोगकर्ता ने सभी 5 "पेज" का दौरा किया है और मेरी सभी 5 दृश्य ऑब्जेक्ट्स मेरी सरणी में संग्रहीत हैं, तो क्या मेरे पास मेरी ब्राउज़र मेमोरी में बैकबोन.जेएस की 5 प्रतियां हैं क्योंकि प्रत्येक backbone.js निर्भरता कैश से प्राप्त की जाती है और फिर से निष्पादित की जाती है, या कचरा कलेक्टर इसे हटा दिया है?
  2. अन्य वेब एप्लिकेशन डेवलपर स्मृति गति पर इस गति के बारे में कैसे सोचते हैं?

जारी आज मैं stackoverflow पर एक समान प्रश्न पाया (http://stackoverflow.com/questions/7866971/how-does-amd-specifically-requirejs-handle-dependancies-across-multiple-module)। उत्तर था: "यह केवल एक बार लोड हो जाएगा, उपर्युक्त मॉड्यूल दोनों मॉड्यूल मान मिलेगा ..."।

तो ऐसा लगता है कि बाद में उपयोग के लिए पहले से लोड किए गए + निष्पादित एमडी मॉड्यूल के परिणामों को स्टोर करना इतना बुरा नहीं है।

वोल्फगैंग

उत्तर

2

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

मेमोरी गति है। ब्राउज़र कैशिंग के लिए

  • निर्वासन अपने js फ़ाइलें:

    आप बेहतर गति चाहते हैं।

  • उपयोग LocalStorage
  • उपयोगकर्ता
  • सर्वर कम से कम में सबसे गणना करो और अनुरोध प्रवाह को कारगर
संबंधित मुद्दे