2009-11-02 22 views
8

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

  • वहाँ पेज
  • पर जे एस के द्वारा निर्मित सामग्री की बहुत वहाँ ग्राफिक्स के बहुत है पृष्ठ पर (img-elements)?

इसलिए मैंने निष्कर्ष निकाला है कि यदि मैं अपनी याददाश्त ताजा रखना चाहता हूं तो मुझे दस्तावेज़ की शुरुआत से जितना संभव हो उतना HTML कोड शामिल करना चाहिए क्योंकि इसे कैश किया जाएगा और स्मृति में नहीं रखा जाएगा। और निश्चित रूप से सभी मौजूदा उपयोग नहीं किए गए तत्वों को हटा दें।

क्या किसी के पास इस पर कोई और जानकारी है? संसाधन? लिंक?

+0

"कैश्ड और मेमोरी में नहीं रखा गया" से आपका क्या मतलब है? इससे मुझे कोई समझ नहीं आती है। –

+0

मैं इस में कोई हार्डवेयर समर्थक नहीं हूँ। मुझे लगता है कि हालांकि मैं कैश या मेमोरी से फ़ाइल पढ़ता हूं तो इसमें कोई फर्क पड़ता है। लेकिन फिर फिर, शायद सभी कैश की गई फाइलें स्मृति के माध्यम से पारित की जाती हैं। या शायद इस उदाहरण में स्मृति कैश के समान ही है। जैसा कि मैंने कहा, मैं वास्तव में नहीं जानता कि यह सब एक साथ कैसे फिट बैठता है। यही कारण है कि मैं पूछ रहा हूं :) – Jens

उत्तर

7

कुछ बातें ध्यान में रखना:

  • IE डोम जटिलता ने मार डाला जाता है। अधिक तत्व पृष्ठ का हिस्सा हैं, जितना धीमा हो जाता है। मैंने पृष्ठों को 3000 तत्वों के साथ ध्यान से धीमा कर दिया है (यदि आपके पास 10 कॉलम और 100 पंक्तियों वाला ग्रिड है, तो वहां 1000 तत्व हैं)। सही दृष्टिकोण आम तौर पर डीओएम से छिपे हुए हिस्सों को अनलोड करने के लिए होता है (उन्हें अलग करें)
  • आईई में जावास्क्रिप्ट हैंडलर संलग्न होने पर HTML तत्वों को सही ढंग से मुक्त करने का लंबा इतिहास भी नहीं है। यदि आपके पास एक लंबे समय तक रहने वाला पृष्ठ है जिसे अक्सर ताज़ा किया जाता है, आईई मेमोरी लीक पर पढ़ा जाता है, और उन मुद्दों के आसपास कैसे काम करना है।
  • सभी ब्राउज़र्स छवियों को स्मृति में असंपीड़ित करते हैं। इसलिए, यदि आप पृष्ठभूमि में एक गैज़िलियन बड़ी छवियों को प्रीलोड कर रहे हैं, तो यह आमतौर पर एक बुरा विचार है।
  • डीओएम गुणों को अद्यतन करने से पेज रीफ्लोज़ का कारण बन जाएगा, जटिल पृष्ठों पर लंबे समय तक लग सकता है। कभी-कभी डीओएम गुणों को भी लाया जाता है (उदा। ऑफसेट हाइट) बहुत धीमा हो जाएगा।

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

+0

ठीक है। तो डीओएम के साथ बातचीत एक मुद्दा भी है। खासकर एक बड़ा एक। जानकार अच्छा लगा। अगर मैं डोम-पेड़ को बदलता/घटाता हूं तो क्या होता है? क्या यह स्मृति में जोड़ता है (संशोधन को संग्रहीत करता है?) या क्या वह वास्तव में लोड को हल्का करता है? "पृष्ठ रीफ्लो" के साथ आपका मतलब विज़ुअल स्वरूपण मॉडल के अनुसार सभी दस्तावेज़ तत्वों का अद्यतन है? – Jens

+0

आपको यह उपयोगी मिल सकता है: http://www.slideshare.net/lsimon/go-with-the-reflow, यह भी: https://library.mozilla.org/Faster_HTML_and_CSS:_Layout_Engine_Internals_for_Web_Developers –

+0

डोम पेड़ नहीं है revisioned। यदि आप डीओएम पेड़ से कुछ अलग करते हैं, और इसमें जावास्क्रिप्ट से कोई संदर्भ नहीं छोड़ा गया है (प्रोटोटाइप चेन की वजह से जितना आसान लगता है), तो यह कचरा इकट्ठा होगा। –

3

शुरुआत के लिए। सभी एचटीएमएल, चाहे वह "शुरुआत से शामिल है" या नहीं, स्मृति में रखा गया है। वर्तमान पृष्ठ के लिए भी सभी छवि सामग्री की संभावना है। कम से कम, किसी भी समय स्क्रीन पर जो कुछ भी आप देखते हैं उस समय स्मृति में रखा जाता है।

+0

मैं यद्यपि ब्राउज़रों को स्मृति को कैसे प्रबंधित करता है इसकी एक सीमा है। मेरा मतलब है, आप जावास्क्रिप्ट में जितना संभव हो उतना तेज गति से स्क्रिप्टिंग कर सकते हैं इससे पहले कि आप परेशान समस्याओं में भाग लें। कुछ मेरी स्क्रिप्टिंग वापस सही पकड़ रहा है? सामान्य रूप से ब्राउज़र स्क्रिप्टिंग के लिए कुछ प्रतिबंध? – Jens

+0

आप फ्लैश में बहुत अधिक गहन स्क्रिप्टिंग कर सकते हैं क्योंकि इसमें एक बहुत तेज़ स्क्रिप्ट इंजन है। उस इंजन (टैमरिन) पर एक संस्करण अब फ़ायरफ़ॉक्स में है, जबकि सफारी और क्रोम दोनों में अपने आप के लिए तेजी से नए नए हैं। अलास इंटरनेट एक्सप्लोरर कुछ हद तक पीछे हट रहा है। –

+0

आह, मैं सी। तो यह इंजन धीमा और पुराना है। आंकड़े। मुझे वास्तव में क्रोम इंजन पसंद है। – Jens

2

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

मुझे पृष्ठों पर बड़ी मात्रा में ईवेंट जोड़ने जैसी चीजें करने में समस्याएं आई हैं। एक पृष्ठ में बहुत अधिक लूप चलाना और बहुत अधिक टाइमर।

यदि जावास्क्रिप्ट प्रदर्शन एक मुद्दा है और आप गहन जावास्क्रिप्ट करने की योजना बना रहे हैं, तो आप webworkers को देखना चाहेंगे। webworkers पर यहाँ कुछ और लिंक:

+1

वेबवर्कर्स का उपयोग अभी तक मुख्य धारा नहीं है। आधुनिक ब्राउज़र अभी तक वेब की ग्रामीण दुनिया तक पहुंचने के लिए नहीं हैं। –

+0

दिलचस्प पढ़ना। मेरे लिए बीटा के लिए :) :) – Jens

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