रिसॉर्स संकेतों की मदद से ब्राउज़र की मदद करना

रिसॉर्स लोड होने की प्रोसेस को ऑप्टिमाइज़ करने के बारे में आखिरी मॉड्यूल में, आपने जाना कि कैसे सीएसएस और JavaScript जैसे पेज के कई रिसॉर्स, पेज लोड होने की स्पीड पर असर डालते हैं और पेज को तेज़ी से रेंडर करने के लिए उन्हें ऑप्टिमाइज़ करने और उनकी डिलीवरी का तरीका क्या है. संसाधन लोड करने के बेहतर तरीके पर जाने का यह सही समय है. इसमें रिसॉर्स संकेतों का इस्तेमाल करके, ब्राउज़र को तेज़ी से लोड करने में मदद करना शामिल है.

'संसाधन से जुड़े संकेतों' से डेवलपर को पेज लोड होने में लगने वाले समय को ऑप्टिमाइज़ करने में मदद मिल सकती है. यह ब्राउज़र को संसाधनों को लोड करने और प्राथमिकता तय करने के तरीके के बारे में बताता है. संसाधन संकेतों के शुरुआती सेट, जैसे कि preconnect और dns-prefetch को सबसे पहले पेश किया गया था. हालांकि, समय के साथ preload और Fetch Priority API ने अतिरिक्त क्षमताएं दी हैं.

रिसॉर्स संकेत, ब्राउज़र को समय से पहले कुछ ऐसी कार्रवाइयां करने का निर्देश देते हैं जिनसे लोडिंग परफ़ॉर्मेंस बेहतर हो सकती है. रिसॉर्स हिंट कई कार्रवाइयां कर सकते हैं. जैसे, शुरुआती डीएनएस लुकअप करना, समय से पहले सर्वर से कनेक्ट करना, और यहां तक कि ब्राउज़र से आम तौर पर उनका पता लगाए जाने से पहले ही रिसॉर्स को फ़ेच करना.

रिसॉर्स से जुड़े संकेत, एचटीएमएल में दिए जा सकते हैं. ये संकेत आम तौर पर, <head> एलिमेंट में शुरुआती तौर पर या एचटीटीपी हेडर के तौर पर सेट में शामिल किए जा सकते हैं. इस मॉड्यूल के स्कोप में, preconnect, dns-prefetch, और preload के साथ-साथ, अनुमान पर आधारित फ़ेच करने के तरीके के बारे में भी बताया गया है, जो prefetch से मिलता है.

preconnect

preconnect संकेत का इस्तेमाल, ज़रूरी संसाधनों को किसी अन्य ऑरिजिन से कनेक्ट करने के लिए किया जाता है. उदाहरण के लिए, हो सकता है कि सीडीएन या अन्य क्रॉस-ऑरिजिन पर अपनी इमेज या एसेट होस्ट की जा रही हों:

<link rel="preconnect" href="https://example.com">

preconnect का इस्तेमाल करने का मतलब है कि ब्राउज़र काफ़ी हद तक आने वाले समय में किसी खास क्रॉस-ऑरिजिन सर्वर से कनेक्ट करेगा. साथ ही, ब्राउज़र को जल्द से जल्द उस कनेक्शन को खोलना चाहिए. ऐसा करने के लिए, एचटीएमएल पार्सर या प्रीलोड स्कैनर का इंतज़ार करना बेहतर होगा.

अगर आपके किसी पेज पर बड़ी संख्या में क्रॉस-ऑरिजिन रिसॉर्स हैं, तो उन रिसॉर्स के लिए preconnect का इस्तेमाल करें जो मौजूदा पेज के लिए सबसे ज़्यादा ज़रूरी हैं.

Chrome DevTools के नेटवर्क पैनल में, किसी संसाधन के लिए कनेक्शन के समय का स्क्रीनशॉट. कनेक्शन सेटअप में स्टॉल टाइम, प्रॉक्सी नेगोशिएशन, डीएनएस लुकअप, कनेक्शन सेटअप, और TLS नेगोशिएशन शामिल हैं.
Chrome DevTools के नेटवर्क पैनल में दिखने वाले कनेक्शन टाइम का विज़ुअलाइज़ेशन. लाल बॉक्स में दिखने वाले समय वे होते हैं जो क्रॉस-ऑरिजिन सर्वर के साथ कनेक्शन सेट अप करते हैं. क्रॉस-ऑरिजिन रिसॉर्स की खोज करने के बजाय, preconnect, जल्द से जल्द कनेक्शन बनाकर, इसे कम कर सकता है.

preconnect को आम तौर पर Google Fonts में इस्तेमाल किया जाता है. Google Fonts का सुझाव है कि आप @font-face एलान वाले https://fonts.googleapis.com डोमेन और फ़ॉन्ट फ़ाइलें दिखाने वाले https://fonts.gstatic.com डोमेन पर preconnect करें.

<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>

crossorigin एट्रिब्यूट का इस्तेमाल यह बताने के लिए किया जाता है कि किसी संसाधन को क्रॉस-ऑरिजिन रिसॉर्स शेयरिंग (सीओआरएस) का इस्तेमाल करके फ़ेच किया जाना चाहिए या नहीं. preconnect संकेत का इस्तेमाल करते समय, अगर ऑरिजिन से डाउनलोड किया जा रहा संसाधन सीओआरएस का इस्तेमाल किया जाता है, जैसे कि फ़ॉन्ट फ़ाइलें, तो आपको preconnect संकेत में crossorigin एट्रिब्यूट जोड़ना होगा.

dns-prefetch

क्रॉस-ऑरिजिन सर्वर से जल्दी कनेक्ट होने से, पेज लोड होने में लगने वाले शुरुआती समय में काफ़ी सुधार होता है. हालांकि, एक साथ कई क्रॉस-ऑरिजिन सर्वर से कनेक्ट करना ठीक या संभव नहीं होता. अगर आपको लगता है कि preconnect का ज़रूरत से ज़्यादा इस्तेमाल किया जा रहा है, तो संसाधन के लिए dns-prefetch संकेत ही महंगा साबित होता है.

अपने नाम के हिसाब से, dns-prefetch क्रॉस-ऑरिजिन सर्वर से कनेक्शन नहीं बनाता, बल्कि समय से पहले सिर्फ़ डीएनएस लुकअप करता है. डीएनएस लुकअप तब किया जाता है, जब किसी डोमेन नेम को उसके आईपी पते के आधार पर तय किया जाता है. डिवाइस और नेटवर्क के लेवल पर, डीएनएस कैश मेमोरी की कई लेयर इस प्रोसेस को सामान्य रूप से तेज़ बनाने में मदद करती हैं. फिर भी इसमें कुछ समय लगता है.

<link rel="dns-prefetch" href="https://fonts.googleapis.com">
<link rel="dns-prefetch" href="https://fonts.gstatic.com">

डीएनएस लुकअप का इस्तेमाल करना काफ़ी सस्ता होता है. ये काफ़ी कम कीमत की वजह से, कुछ मामलों में preconnect के मुकाबले ज़्यादा बेहतर टूल हो सकते हैं. खास तौर पर, दूसरी वेबसाइटों पर नेविगेट करने वाले लिंक के मामले में, उपयोगकर्ता के लिए दिए गए लिंक का इस्तेमाल करना ज़रूरी हो सकता है. dnstra दर्जus ऐसा टूल है जो JavaScript का इस्तेमाल अपने-आप करता है. साथ ही, अन्य वेबसाइटों के लिंक को उपयोगकर्ता के पोर्ट में स्क्रोल करने पर, मौजूदा पेज के एचटीएमएल में dns-prefetch संकेत डालने के लिए इंटरसेक्शन ऑब्ज़र्वर एपीआई का इस्तेमाल करता है.

preload

preload डायरेक्टिव का इस्तेमाल, पेज को रेंडर करने के लिए ज़रूरी संसाधन के लिए शुरुआती अनुरोध शुरू करने के लिए किया जाता है:

<link rel="preload" href="/lcp-image.jpg" as="image">

preload डायरेक्टिव, देर से खोजे गए अहम संसाधनों तक सीमित होने चाहिए. सबसे ज़्यादा इस्तेमाल किए जाने वाले मामलों में फ़ॉन्ट फ़ाइलें, @import एलानों के ज़रिए फ़ेच की गई सीएसएस फ़ाइलें या ऐसी सीएसएस background-image संसाधन शामिल हैं जो सबसे बड़े कॉन्टेंटफ़ुल पेंट (एलसीपी) के कैंडिडेट हो सकते हैं. ऐसे मामलों में, इन फ़ाइलों को प्रीलोड स्कैनर नहीं खोज पाएगा, क्योंकि संसाधन का संदर्भ बाहरी संसाधनों में दिया गया है.

preconnect की तरह ही, अगर किसी सीओआरएस रिसॉर्स, जैसे कि फ़ॉन्ट को पहले से लोड किया जा रहा है, तो preload डायरेक्टिव के लिए crossorigin एट्रिब्यूट की ज़रूरत होती है. अगर crossorigin एट्रिब्यूट नहीं जोड़ा जाता है या बिना सीओआरएस अनुरोधों के लिए इसे जोड़ा जाता है, तो ब्राउज़र उस संसाधन को दो बार डाउनलोड करता है. इससे बैंडविथ का नुकसान होता है, जो दूसरे संसाधनों पर बेहतर तरीके से खर्च किया जा सकता था.

<link rel="preload" href="/font.woff2" as="font" crossorigin>

पिछले एचटीएमएल स्निपेट में, ब्राउज़र को सीओआरएस अनुरोध का इस्तेमाल करके /font.woff2 को पहले से लोड करने का निर्देश दिया गया है—भले ही, /font.woff2 उसी डोमेन पर हो.

prefetch

prefetch डायरेक्टिव का इस्तेमाल, ऐसे संसाधन के लिए कम प्राथमिकता वाले अनुरोध को शुरू करने के लिए किया जाता है जिसका इस्तेमाल आने वाले नेविगेशन में किया जा सकता है:

<link rel="prefetch" href="/next-page.css" as="style">

यह डायरेक्टिव, काफ़ी हद तक preload डायरेक्टिव के फ़ॉर्मैट का ही होता है. हालांकि, सिर्फ़ <link> एलिमेंट का rel एट्रिब्यूट, इसके बजाय "prefetch" की वैल्यू का इस्तेमाल करता है. preload डायरेक्टिव के उलट, prefetch काफ़ी हद तक अनुमान लगाता है कि आने वाले समय में नेविगेशन के लिए, किसी रिसॉर्स को फ़ेच किया जा रहा है या नहीं.

कई बार prefetch फ़ायदेमंद हो सकता है—उदाहरण के लिए, अगर आपने अपनी वेबसाइट पर किसी ऐसे यूज़र फ़्लो की पहचान की है जिसे ज़्यादातर उपयोगकर्ता फ़ॉलो करते हैं, तो उन पेजों के लिए रेंडर के लिए ज़रूरी संसाधन के लिए prefetch की मदद से, उनके लोड होने में लगने वाले समय को कम करने में मदद मिल सकती है.

फे़च प्रायॉरिटी एपीआई

किसी संसाधन की प्राथमिकता बढ़ाने के लिए, Fetch Priority API को उसके fetchpriority एट्रिब्यूट का इस्तेमाल करके भी इस्तेमाल किया जा सकता है. इस एट्रिब्यूट का इस्तेमाल <link>, <img>, और <script> एलिमेंट के साथ किया जा सकता है.

<div class="gallery">
  <div class="poster">
    <img src="img/poster-1.jpg" fetchpriority="high">
  </div>
  <div class="thumbnails">
    <img src="img/thumbnail-2.jpg" fetchpriority="low">
    <img src="img/thumbnail-3.jpg" fetchpriority="low">
    <img src="img/thumbnail-4.jpg" fetchpriority="low">
  </div>
</div>

डिफ़ॉल्ट रूप से, इमेज को कम प्राथमिकता पर फ़ेच किया जाता है. लेआउट के बाद, अगर इमेज शुरुआती व्यूपोर्ट में मिलती है, तो प्राथमिकता को बढ़ाकर ज़्यादा प्राथमिकता कर दिया जाता है. इससे पहले के एचटीएमएल स्निपेट में, fetchpriority ब्राउज़र को तुरंत बताता है कि बड़ी एलसीपी इमेज को ज़्यादा प्राथमिकता पर डाउनलोड किया जाए. वहीं दूसरी ओर, कम ज़रूरी थंबनेल इमेज को कम प्राथमिकता पर डाउनलोड किया जाता है.

मॉडर्न ब्राउज़र, रिसॉर्स को दो चरणों में लोड करते हैं. पहला चरण ज़रूरी संसाधनों के लिए रिज़र्व है. ब्लॉक करने वाली सभी स्क्रिप्ट के डाउनलोड होने और उन्हें लागू करने के बाद, यह चरण खत्म हो जाता है. इस दौरान, कम प्राथमिकता वाले संसाधनों को डाउनलोड करने में देरी हो सकती है. fetchpriority="high" का इस्तेमाल करके, किसी संसाधन की प्राथमिकता बढ़ाई जा सकती है. पहले चरण में ही, ब्राउज़र उस संसाधन को डाउनलोड कर सकता है.

संसाधन से मिले डेमो के बारे में जानकारी

देखें कि आपको कितना ज्ञान है

preconnect रिसॉर्स संकेत क्या करता है?

इससे, क्रॉस-ऑरिजिन सर्वर से कनेक्ट होने में मदद मिलती है. इसमें डीएनएस लुकअप भी शामिल है. साथ ही, ब्राउज़र को उस समय से पहले ही कनेक्शन और TLS नेगोशिएशन सेवा मिलती है, जब वह इसे खोज सकता है.
सही जवाब!
क्रॉस-ऑरिजिन सर्वर के लिए सिर्फ़ डीएनएस लुकअप करता है.
फिर से कोशिश करें.

Fetch Priority API की मदद से क्या-क्या किया जा सकता है?

वह प्राथमिकता तय करें जिस पर मौजूदा पेज का एचटीएमएल डाउनलोड किया जाता है.
फिर से कोशिश करें.
<link>, <img>, और <script> एलिमेंट के लिए मिलती-जुलती प्राथमिकता तय करें.
सही जवाब!

आपको prefetch संकेत का इस्तेमाल कब करना चाहिए?

ऐसे सभी रिसॉर्स या पेजों के लिए जिनकी ज़रूरत उपयोगकर्ता को पड़ सकती है. इससे फ़र्क़ नहीं पड़ता कि उन्हें आने वाले समय में किन संसाधनों या पेजों की ज़रूरत है.
फिर से कोशिश करें.
जब आपको पूरा भरोसा है कि उपयोगकर्ता को जिन रिसॉर्स या पेजों को प्रीफ़ेच करना है उनकी ज़रूरत है.
सही जवाब!
अगर उपयोगकर्ता ने डेटा के कम इस्तेमाल को लेकर साफ़ तौर पर कोई प्राथमिकता न दी हो.
सही जवाब!

अगला: इमेज की परफ़ॉर्मेंस

ऐसा हो सकता है कि अब से आपको पेज एचटीएमएल, <head> एलिमेंट, और रिसॉर्स से जुड़े संकेतों के बारे में अपनी जानकारी पर भरोसा होने लगा हो. हालांकि, आम तौर पर पेजों को लोड करने वाले अलग-अलग रिसॉर्स टाइप के हिसाब से, कुछ दूसरे ऑप्टिमाइज़ेशन भी होते हैं. इसके बाद, इमेज की परफ़ॉर्मेंस के बारे में अगले मॉड्यूल में बताया गया है. इससे आपको अपनी वेबसाइट की इमेज को जितनी जल्दी हो सके, तेज़ी से लोड करने में मदद मिलेगी. उपयोगकर्ता का डिवाइस चाहे जो भी हो.