समानांतर सीएसएस डाउनलोड के माध्यम से वेब साइट के प्रदर्शन में सुधार?


15

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

मैंने इस विकल्प पर कभी विचार नहीं किया, क्योंकि इंटरनेट पर मैंने केवल एक ही चीज़ पढ़ी है कि HTTP रिक्वेस्ट की संख्या को कम करना (रोकना) एक तेज़ वेब पेज के लिए महत्वपूर्ण है (हालाँकि Google पेजस्पीड इनसाइट्स स्पष्ट रूप से यह 1 नहीं बताती हैं )।

मुझे कुछ कारण दिखाई देते हैं कि समानता का प्रदर्शन बेहतर नहीं होगा, या केवल बहुत ही कम मामले (कम HTTP अनुरोधों का उपयोग करने के लाभ से आगे बढ़ना):

  • नया कनेक्शन लगाना महंगा है। जबकि कई कनेक्शन सेट करना समानांतर में किया जा सकता है, ब्राउज़र अधिकतम 4-6 कनेक्शन (ब्राउज़र पर निर्भर करता है) का उपयोग करेगा, इसलिए समानांतर में सीएसएस डाउनलोड करने से जावास्क्रिप्ट और छवियों जैसी अन्य संपत्तियों को डाउनलोड करना बंद हो जाएगा।
  • HTTPS कनेक्शन सेट करना कुछ अतिरिक्त डेटा लेता है। मैंने पढ़ा है यह आसानी से कुछ KB डेटा हो सकता है। यह कुछ अतिरिक्त डेटा है जिसे तार पर भेजा जाना है, सीएसएस के बजाय हम वास्तव में भेजना चाहते हैं।
  • टीसीपी स्लो स्टार्ट एल्गोरिथ्म के कारण, एक कनेक्शन पर जितना अधिक डेटा भेजा जाएगा, उतना ही तेज़ कनेक्शन होगा। अब लंबे समय तक रहने वाले कनेक्शन वास्तव में नए कनेक्शनों की तुलना में बहुत तेजी से डेटा भेजेंगे। उदाहरण के लिए देखें SPDY प्रोटोकॉल, जो पेज लोड समय को बेहतर बनाने के लिए एकल कनेक्शन का उपयोग करता है।
  • टीसीपी एक अमूर्त है: अभी भी (सामान्य रूप से) केवल एक अंतर्निहित कनेक्शन है। इसलिए जब कई अनुरोधों का उपयोग किया जाता है, तो तार पर डेटा भेजना जरूरी नहीं कि गति में सुधार के लिए कई कनेक्शनों से लाभान्वित हो।
  • इंटरनेट कनेक्शन स्वाभाविक रूप से अविश्वसनीय हैं, खासकर मोबाइल पर। एक अनुरोध दूसरे की तुलना में काफी तेजी से समाप्त हो सकता है। CSS के लिए कई अनुरोधों का उपयोग करने का अर्थ है कि वेब पेज को प्रदान करना तब तक अवरुद्ध है जब तक कि अंतिम अनुरोध समाप्त नहीं हो जाता है, जो औसत कनेक्शन की तुलना में बाद में काफी हो सकता है।

तो, क्या सीएसएस फाइलों के लिए HTTP अनुरोधों को समानांतर करने में कोई फायदा है?

नोट / अपडेट: सभी सीएसएस फाइलें रेंडर-ब्लॉकिंग हैं। CSS फाइलें जो पहले से ही महत्वपूर्ण पथ से बाहर नहीं निकली हैं।


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

एक तरह से, ब्राउज़र पहले से ही समानांतर में डाउनलोड होते हैं जो उपयोग करने के लिए उपलब्ध कनेक्शन की संख्या के आधार पर होते हैं। यह HTML पर आधारित है कि ब्राउज़र पढ़ रहा है।
सूर्य

जवाबों:


14

HTML दस्तावेजों से जुड़ी सीएसएस फाइलें समानांतर डाउनलोड कतार में जुड़ जाती हैं क्योंकि HTML पार्स हो जाती है; महत्वपूर्ण बात यह है कि गैर-अतुल्यकालिक जावास्क्रिप्ट लिंक HTML पार्सर को अवरुद्ध करते हैं, बाद के टैग को डाउनलोड कतार में जोड़ने से तब तक रोकते हैं जब तक कि जावास्क्रिप्ट डाउनलोड, पार्स और निष्पादित नहीं हो जाता। [1]

यहां एक उदाहरण दिया गया है जो ब्राउज़र को चार में से तीन फ़ाइलों को क्रमिक रूप से डाउनलोड करने के लिए मजबूर करता है (कम से कम तीन राउंड-ट्रिप):

<head>
  <script src="js/fizz.js"></script>
  <link rel="stylesheet" href="css/foo.css"/>
  <script src="js/buzz.js"></script>
  <link rel="stylesheet" href="css/bar.css"/>
</head>

यहां उदाहरण दिया गया है कि सभी 4 फाइलें समानांतर में डाउनलोड की जाती हैं (कम से कम एक राउंड ट्रिप):

<head>
  <link rel="stylesheet" href="css/foo.css"/>
  <link rel="stylesheet" href="css/bar.css"/>
  <script async src="js/fizz.js"></script>
  <script src="js/buzz.js"></script>
</head>

एक और नोट: सीएसएस फाइलें (डिफ़ॉल्ट रूप से) रेंडर-ब्लॉकिंग हैं, पार्सर-ब्लॉकिंग नहीं; पृष्ठ को जारी रखा जाएगा और DOM का निर्माण किया जाएगा, लेकिन CSSOM के निर्माण तक रेंडर शुरू नहीं होगा

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

तो, अपने सीएसएस डाउनलोड को केवल अपने लिए समानांतर करने का कोई स्पष्ट लाभ नहीं है। लेकिन हमेशा की तरह, माप और परीक्षण!

आगे पढ़ने के लिए, मैं Google से 'वेब फंडामेंटल: ऑप्टिमाइज़िंग परफॉर्मेंस' पर इन लेखों की सलाह देता हूँ: https://developers.google.com/web/fundamentals/performance/

[१]: यह कुछ ब्राउज़रों की सट्टा पार्सिंग सुविधा की अनदेखी कर रहा है:

https://docs.google.com/document/d/1JQZXrONw1RrjrdD_Z9jq1ZKsHguh8UVGHY_MZgE63II/preview?hl=en-GB&forcehl=1

https://developer.mozilla.org/en-US/docs/Web/HTML/Optimizing_your_pages_for_speculative_parsing


1
एक और अच्छा पढ़ा, अपनी लिपियों को समवर्ती रूप से डाउनलोड करने के तरीके के बारे में, यहाँ है: stackoverflow.com/questions/436411/…
joshreesjones

यह ध्यान देने योग्य है कि सभी .js फाइलें कोडिंग बॉडी टैग से ठीक पहले कोड के अंत में जुड़ी होनी चाहिए, इस तरह से वे कुछ भी ब्लॉक करते हैं।
चॉले

क्या आप विस्तृत कर सकते हैं "तो, अपने सीएसएस डाउनलोड को केवल अपने लिए समानांतर करने का कोई स्पष्ट लाभ नहीं है"? मैं किसी तरह उपरोक्त उत्तर से यह पता नहीं लगा सका
gaurav5430

@ gaurav5430 सीएसएस फ़ाइलों को विभाजित करने के लिए अच्छे कारण प्रतीत नहीं होते, ऊपर-बार रेंडर समय (और शायद कैश अनुकूलन?) के लिए अनुकूलन से परे
रॉबर्ट के। बेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.