2008-09-05 12 views
8

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

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

क्या कोई उपकरण है जो मुझे इसके लिए मीट्रिक उत्पन्न करने में मदद कर सकता है?

उत्तर

14

प्रसंग: हालांकि यह सच है कि HTTP भूमि के ऊपर, पार्स करने जे एस और सीएसएस ब्राउज़र के प्रदर्शन पर पार्स करने (भले ही आप जे एस के मेग की तुलना में कम है) के प्रभाव की अनदेखी की तुलना में अधिक महत्वपूर्ण है एक अच्छा तरीका है अपने आप को प्राप्त करने के लिए है मुसीबत में।

वाईएसलो, फिडलर, और फायरबग पार्सिंग गति की निगरानी करने के लिए सबसे अच्छे उपकरण नहीं हैं। जब तक कि वे हाल ही में अपडेट नहीं किए गए हैं, वे जेएस को HTTP पर लाने या वास्तविक जेएस पेलोड को पार्स करने में व्यतीत समय की मात्रा के विरुद्ध कैश से लोड करने के लिए आवश्यक समय को अलग नहीं करते हैं।

पार्स गति मापने में थोड़ा मुश्किल है, लेकिन हमने इस मीट्रिक को कई परियोजनाओं पर पीछा किया है जिन पर मैंने काम किया है और पीजीएलओड पर प्रभाव जेएस के 500k के साथ भी महत्वपूर्ण था। जाहिर है कि पुराने ब्राउज़र सबसे अधिक पीड़ित हैं ... उम्मीद है कि क्रोम, TraceMonkey और इस तरह की मदद इस स्थिति को हल करें।

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

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

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

3

मुझे विश्वास है कि YSlow करता है, लेकिन ध्यान रखें कि जब तक सभी अनुरोध लूपबैक कनेक्शन से अधिक नहीं होते हैं तो आपको चिंता नहीं करनी चाहिए। स्प्लिट-अप फ़ाइलों का HTTP ओवरहेड निष्पादन को पार्सिंग से अधिक प्रभावित करेगा, जब तक कि आपकी सीएसएस/जेएस फाइलें कई मेगाबाइट से अधिक न हों।

2

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

+2

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

+0

फाइलों को विभाजित करने का आपका सुझाव भी जोड़ता है क्योंकि कुछ ब्राउज़र दोनों फाइलों का अनुरोध और विश्लेषण करेंगे लगभग एक साथ। अन्य ब्राउज़र तब तक इंतजार करेंगे जब तक कि पहले को लोड करने के लिए पहले पार्स नहीं किया जाता है। मुझे पता चला है कि अधिक संक्षिप्त और प्रासंगिक कोड के साथ आम तौर पर कम अनुरोध बेहतर होते हैं। – Metagrapher

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