जानकारी
NoState Prefetch, Chrome में एक नया तरीका है. यह प्री-रेंडरिंग की पुरानी प्रोसेस का विकल्प है. इसका इस्तेमाल <link rel="prerender">
जैसी सुविधाओं को बेहतर बनाने के लिए किया जाता है. प्रीरेंडर करने की सुविधा की तरह, यह भी रिसॉर्स को पहले से फ़ेच कर लेता है. हालांकि, प्रीरेंडर करने की सुविधा के उलट, यह JavaScript को पहले से लागू नहीं करता या पेज के किसी हिस्से को पहले से रेंडर नहीं करता. NoState Prefetch का लक्ष्य, पेज लोड होने में लगने वाले समय को कम करते हुए, पेज को पहले से रेंडर करने की तुलना में कम मेमोरी का इस्तेमाल करना है.
NoState Prefetch कोई एपीआई नहीं है. यह एक ऐसा तरीका है जिसका इस्तेमाल Chrome, अलग-अलग एपीआई और सुविधाओं को लागू करने के लिए करता है. Resource Hints API और Chrome के पता बार से पेजों को पहले से लोड करने की सुविधा, दोनों को NoState Prefetch का इस्तेमाल करके लागू किया जाता है. अगर Chrome 63 या इसके बाद के वर्शन का इस्तेमाल किया जा रहा है, तो आपका ब्राउज़र पहले से ही <link rel="prerender">
जैसी सुविधाओं के लिए, NoState Prefetch का इस्तेमाल कर रहा है.
इस लेख में बताया गया है कि NoStatePrefetch कैसे काम करता है, इसे लॉन्च करने की वजह क्या है, और इसके इस्तेमाल के आंकड़े देखने के लिए, Chrome के हिस्टोग्राम का इस्तेमाल करने के निर्देश.
वजह
NoState Prefetch को लॉन्च करने की दो मुख्य वजहें थीं:
डिवाइस में स्टोरेज का कम इस्तेमाल करना
NoState Prefetch सिर्फ़ ~45 एमबी मेमोरी का इस्तेमाल करता है. NoState Prefetch के लिए, प्रीलोड स्कैनर को बनाए रखना, मेमोरी का मुख्य खर्च है. यह खर्च, इस्तेमाल के अलग-अलग उदाहरणों में एक जैसा रहता है. फ़ेच किए जाने वाले डेटा के साइज़ या वॉल्यूम को बढ़ाने से, NoState Prefetch के ज़रिए खर्च की जाने वाली मेमोरी पर काफ़ी असर नहीं पड़ता.
इसके उलट, आम तौर पर प्री-रेंडरिंग में 100 एमबी मेमोरी खर्च होती है और मेमोरी खर्च करने की सीमा 150 एमबी होती है. ज़्यादा मेमोरी खर्च करने की वजह से, यह सुविधा कम-एंड (यानी 512 एमबी से कम रैम वाले) डिवाइसों के लिए सही नहीं है. इस वजह से, Chrome कम-एंड डिवाइसों पर पेज को पहले से रेंडर नहीं करता. इसके बजाय, वह पहले से कनेक्ट हो जाएगा.
वेब प्लैटफ़ॉर्म की नई सुविधाओं के लिए सहायता उपलब्ध कराना
प्री-रेंडरिंग की सुविधा के साथ, उपयोगकर्ता के सामने कोई भी कार्रवाई (जैसे, संगीत या वीडियो चलाना) या स्टेटफ़ुल ऐक्शन (जैसे, सेशन में बदलाव करना या लोकल स्टोरेज) नहीं होनी चाहिए. हालांकि, पेज को रेंडर करते समय इन कार्रवाइयों को रोकना मुश्किल और जटिल हो सकता है. NoState Prefetch सिर्फ़ संसाधनों को पहले से फ़ेच करता है: यह कोड को लागू नहीं करता या पेज को रेंडर नहीं करता. इससे, उपयोगकर्ताओं के सामने होने वाली और स्टेटफ़ुल कार्रवाइयों को रोकना आसान हो जाता है.
लागू करना
यहां बताया गया है कि NoState Prefetch कैसे काम करता है.
NoStatePrefetch ट्रिगर हुआ.
<link rel="prerender">
जैसे, प्री-रेंडर संसाधन के संकेत और Chrome की कुछ सुविधाएं, बिना स्टेटस वाले पेज को पहले से लोड करने की सुविधा को ट्रिगर करेंगी. हालांकि, इसके लिए ये दो शर्तें पूरी होनी चाहिए: a) उपयोगकर्ता के पास कम क्षमता वाला डिवाइस न हो और b) उपयोगकर्ता सेलुलर नेटवर्क का इस्तेमाल न कर रहा हो.NoState Prefetch के लिए, एक नया रेंडरर बनाया गया है.
Chrome में, “रेंडरर” एक प्रोसेस है. यह एचटीएमएल दस्तावेज़ को पार्स करता है, उसका रेंडर ट्री बनाता है, और नतीजे को स्क्रीन पर दिखाता है. Chrome के हर टैब और हर NoState Prefetch प्रोसेस के लिए, अलग-अलग रेंडरर होता है, ताकि अलग-अलग टैब को अलग-अलग रखा जा सके. इससे, किसी गड़बड़ी (जैसे, टैब क्रैश होने) के असर को कम करने में मदद मिलती है. साथ ही, नुकसान पहुंचाने वाले कोड को सिस्टम के दूसरे टैब या हिस्सों को ऐक्सेस करने से रोका जा सकता है.
NoState Prefetch की मदद से लोड किया जा रहा रिसॉर्स फ़ेच किया जाता है. इसके बाद, HTMLPreloadScanner इस संसाधन को स्कैन करता है, ताकि ऐसे सभी सब-रिसॉर्स का पता लगाया जा सके जिन्हें फ़ेच करना ज़रूरी है. अगर मुख्य संसाधन या उसके किसी भी सब-संसाधन में रजिस्टर किया गया सेवा वर्कर है, तो ये अनुरोध सही सेवा वर्कर के ज़रिए भेजे जाएंगे.
NoState Prefetch सिर्फ़ GET एचटीटीपी तरीके के साथ काम करता है. यह ऐसे किसी भी सब-रिसॉर्स को फ़ेच नहीं करेगा जिसके लिए, एचटीटीपी के अन्य तरीकों का इस्तेमाल करना ज़रूरी हो. इसके अलावा, यह ऐसे किसी भी संसाधन को फ़ेच नहीं करेगा जिसके लिए उपयोगकर्ता की कार्रवाई ज़रूरी हो. जैसे, पुष्टि करने के लिए पॉप-अप, एसएसएल क्लाइंट सर्टिफ़िकेट या मैन्युअल तरीके से बदलाव करना.
फ़ेच किए गए सब-सोर्स, “IDLE” नेट प्राथमिकता के साथ फ़ेच किए जाएंगे.
“IDLE” नेट प्राथमिकता, Chrome में नेट प्राथमिकता की सबसे कम वैल्यू है.
NoState प्रीफ़ेच की मदद से हासिल किए गए सभी रिसॉर्स, उनके कैश हेडर के हिसाब से कैश मेमोरी में सेव किए जाते हैं.
NoState प्रीफ़ेच,
no-store
Cache-Control हेडर वाले सभी संसाधनों को छोड़कर, सभी संसाधनों को कैश मेमोरी में सेव करेगा. अगर किसी संसाधन मेंVary
रिस्पॉन्स हेडर,no-cache
कैश-कंट्रोल हेडर है या वह पांच मिनट से ज़्यादा पुराना है, तो इस्तेमाल करने से पहले उसकी फिर से पुष्टि की जाएगी.सभी सब-रिसॉर्स लोड होने के बाद, रेंडरर को बंद कर दिया जाता है.
अगर सब-रिसॉर्स टाइम आउट हो जाते हैं, तो रेंडरर को 30 सेकंड के बाद बंद कर दिया जाएगा.
ब्राउज़र, कुकी स्टोर और स्थानीय डीएनएस कैश मेमोरी को अपडेट करने के अलावा, स्टेटस में कोई बदलाव नहीं करता. इस बात का ध्यान रखना ज़रूरी है, क्योंकि यह “NoState Prefetch” में “NoState” है.
पेज लोड होने की “सामान्य” प्रोसेस के इस चरण में, ब्राउज़र ऐसे काम कर सकता है जिनसे ब्राउज़र की स्थिति में बदलाव होता है. उदाहरण के लिए, JavaScript को लागू करना,
sessionStorage
याlocalStorage
में बदलाव करना, संगीत या वीडियो चलाना, History API का इस्तेमाल करना या उपयोगकर्ता को सूचना देना. NoState Prefetch में, रिस्पॉन्स मिलने पर डीएनएस कैश मेमोरी को अपडेट करने और रिस्पॉन्स मेंSet-Cookie
हेडर मौजूद होने पर कुकी स्टोर को अपडेट करने के अलावा, स्थिति में कोई और बदलाव नहीं होता.ज़रूरत पड़ने पर, रिसॉर्स को ब्राउज़र विंडो में लोड किया जाता है.
हालांकि, पहले से रेंडर किए गए पेज के उलट, यह पेज तुरंत नहीं दिखेगा. इसे ब्राउज़र से रेंडर करना पड़ता है. ब्राउज़र, उस रेंडरर का फिर से इस्तेमाल नहीं करेगा जिसका इस्तेमाल उसने NoState Prefetch के लिए किया था. इसके बजाय, वह नए रेंडरर का इस्तेमाल करेगा. पेज को पहले से रेंडर न करने पर, NoStatePrefetch की मेमोरी खपत कम हो जाती है. साथ ही, इससे पेज लोड होने में लगने वाले समय पर पड़ने वाले असर को भी कम किया जा सकता है.
अगर पेज पर कोई सर्विस वर्कर है, तो यह पेज लोड, सर्विस वर्कर के ज़रिए फिर से होगा.
अगर पेज के लोड होने के समय तक, NoState Prefetch ने सब-रिसॉर्स फ़ेच करना पूरा नहीं किया है, तो ब्राउज़र पेज लोड करने की प्रोसेस को वहीं से जारी रखेगा जहां NoState Prefetch ने छोड़ा था. ब्राउज़र को अब भी रिसॉर्स फ़ेच करने होंगे, लेकिन उतने नहीं जितने तब ज़रूरी होते हैं, जब NoState Prefetch शुरू नहीं किया गया हो.
वेब ऐनलिटिक्स पर असर
NoState Prefetch का इस्तेमाल करके लोड किए गए पेजों को, वेब आंकड़ों के टूल अलग-अलग समय पर रजिस्टर करते हैं. यह इस बात पर निर्भर करता है कि टूल, क्लाइंट-साइड या सर्वर-साइड पर डेटा इकट्ठा करता है या नहीं.
क्लाइंट-साइड आंकड़े वाली स्क्रिप्ट, उपयोगकर्ता को पेज दिखाने पर पेज व्यू को रजिस्टर करती हैं. ये स्क्रिप्ट, JavaScript के लागू होने पर काम करती हैं. वहीं, NoState Prefetch कोई JavaScript लागू नहीं करता.
सर्वर-साइड के आंकड़े इकट्ठा करने वाले टूल, अनुरोध को मैनेज करने पर मेट्रिक रजिस्टर करते हैं. NoState Prefetch के ज़रिए लोड किए गए रिसॉर्स के लिए, अनुरोध को मैनेज करने और क्लाइंट के असल में जवाब का इस्तेमाल करने (अगर इसका इस्तेमाल किया जाता है) के बीच का समय काफ़ी ज़्यादा हो सकता है. Chrome 69 से, NoState Prefetch सभी अनुरोधों में हेडर Purpose: Prefetch
जोड़ता है, ताकि उन्हें सामान्य ब्राउज़िंग से अलग किया जा सके.
इसे देखें
NoStatePrefetch, दिसंबर 2017 में Chrome 63 में लॉन्च किया गया था. फ़िलहाल, इसका इस्तेमाल इन कामों के लिए किया जाता है:
prerender
संसाधन के लिए दिए गए संकेत को लागू करना- Google Search के नतीजों में पहला नतीजा फ़ेच करना
- ऐसे पेजों को फ़ेच करना जिनके बारे में Chrome के पता बार को लगता है कि आप अगले विज़िट में उन पर जा सकते हैं
Chrome Internals का इस्तेमाल करके, यह देखा जा सकता है कि NoStatePrefetch का इस्तेमाल कैसे किया जा रहा है.
NoState प्रीफ़ेच की मदद से लोड की गई साइटों की सूची देखने के लिए, chrome://net-internals/#prerender पर जाएं.
NoState Prefetch के इस्तेमाल से जुड़े आंकड़े देखने के लिए, chrome://histograms पर जाएं और “NoStatePrefetch” खोजें. NoState Prefetch के तीन अलग-अलग हिस्टोग्राम होते हैं - NoState Prefetch के हर इस्तेमाल के उदाहरण के लिए एक:
- “NoStatePrefetch” (प्री-रेंडर रिसॉर्स के हिंट के हिसाब से इस्तेमाल के आंकड़े)
- “gws_NoStatePrefetch” (Google पर खोज नतीजों के पेज के इस्तेमाल के आंकड़े)
- “omnibox_NoStatePrefetch” (Chrome के पता बार के इस्तेमाल से जुड़े आंकड़े)