Kodokon kodokon.com

लोडिंग प्रदर्शन: defer, async, preload, और prefetch

अपनी स्क्रिप्ट के निष्पादन को defer और async के साथ क्रमबद्ध करें, फिर preload, preconnect, और prefetch के साथ नेटवर्क को दिशा दें।

10 मिनट · 3 प्रश्न

इस पाठ को Kodokon में खोलें

एक क्लासिक <script src> HTML पार्सिंग को रोक देता है: ब्राउज़र रुकता है, डाउनलोड करता है, निष्पादित करता है, फिर आगे बढ़ता है। दो एट्रिब्यूट खेल बदल देते हैं। defer पार्सिंग के समानांतर डाउनलोड करता है और स्क्रिप्ट को दस्तावेज़ क्रम में निष्पादित करता है, DOMContentLoaded से ठीक पहले: यह आपके एप्लिकेशन कोड के लिए डिफ़ॉल्ट विकल्प है, जो DOM और अन्य स्क्रिप्ट पर निर्भर हो सकता है। async भी समानांतर में डाउनलोड करता है लेकिन फ़ाइल आते ही निष्पादित करता है, बिना किसी गारंटीशुदा क्रम के: इसे analytics जैसी स्वतंत्र स्क्रिप्ट के लिए आरक्षित रखें, जो किसी चीज़ पर निर्भर नहीं होतीं।

HTML
<script src="/js/analytics.js" async></script>
<script src="/js/vendor.js" defer></script>
<script src="/js/app.js" defer></script>
vendor.js हमेशा app.js से पहले चलेगा

ब्राउज़र कुछ महत्वपूर्ण संसाधनों को बहुत देर से ही खोजता है: किसी CSS फ़ाइल के अंदर संदर्भित एक फ़ॉन्ट, JavaScript में लोड की गई एक छवि। <link rel="preload"> उस देरी से खोज को ठीक करता है, संसाधन को सीधे <head> में घोषित करके, अनिवार्य as एट्रिब्यूट के साथ ताकि ब्राउज़र सही प्राथमिकता और सही कैश लागू करे। पाठ्यपुस्तक का मामला: webfonts, जिनका अन्यथा अनुरोध केवल CSS के डाउनलोड और पार्स होने के बाद ही किया जाता है।

HTML
<link rel="preload" as="font" type="font/woff2"
      href="/fonts/inter-var.woff2" crossorigin>
<link rel="preload" as="image"
      href="/img/hero-1600.jpg" fetchpriority="high">
एक फ़ॉन्ट और LCP छवि की जल्दी खोज

अंतिम परिवार: कम-प्राथमिकता वाले नेटवर्क संकेत। <link rel="preconnect"> किसी ऐसे तृतीय-पक्ष origin के लिए पहले से पूरा कनेक्शन (DNS, TCP, TLS) स्थापित करता है जिसका आप निश्चित रूप से उपयोग करेंगे: पहले अनुरोध पर 300 ms तक की बचत। dns-prefetch इसका हल्का चचेरा भाई है (केवल DNS समाधान), कम निश्चित origins के लिए एक फ़ॉलबैक के रूप में उपयोगी। और prefetch निष्क्रिय समय के दौरान, अगले नेविगेशन के लिए बना एक संसाधन डाउनलोड करता है: उदाहरण के लिए कार्ट से चेकआउट पृष्ठ। समझौता स्पष्ट है: preload वर्तमान पृष्ठ की सेवा करता है, prefetch अगले पर दाँव लगाता है।

HTML
<link rel="preconnect"
      href="https://api.example.com">
<link rel="dns-prefetch"
      href="https://cdn.example.com">
<link rel="prefetch" href="/checkout.html">
जल्दी कनेक्शन और अगले नेविगेशन पर एक दाँव

ज्ञान जांच

सुनिश्चित करें कि आपको इस पाठ के मुख्य बिंदु याद हैं।

  1. defer कौन सी गारंटी देता है जो async नहीं देता?
    • HTML पार्सिंग के समानांतर डाउनलोड करना
    • दस्तावेज़ क्रम में निष्पादन, DOMContentLoaded से पहले
    • पृष्ठ के किसी भी रेंडरिंग से पहले निष्पादन
  2. same-origin फ़ॉन्ट preload पर crossorigin क्यों आवश्यक है?
    • फ़ॉन्ट का अनुरोध हमेशा CORS मोड में किया जाता है; इसके बिना, फ़ाइल दो बार डाउनलोड होती है
    • यह WOFF2 फ़ॉर्मैट की एक सुरक्षा आवश्यकता है
    • इसके बिना, preload डिफ़ॉल्ट CSP द्वारा अवरुद्ध हो जाता है
  3. rel="prefetch" का उचित उपयोग क्या है?
    • वर्तमान पृष्ठ पर किसी महत्वपूर्ण संसाधन को तेज़ करना
    • कम प्राथमिकता पर, अगले नेविगेशन के लिए एक संभावित संसाधन डाउनलोड करना
    • किसी फ़ाइल को स्थायी कैशिंग में मजबूर करना