2013-08-12 3 views
5

मैं lazyload.js का उपयोग आलसी लोड कई स्क्रिप्ट के लिए कर रहा हूं। अब मैं केवल साइट-व्यापी का उपयोग करने के बारे में सोच रहा था जिसमें lazyload.js को लोड करने के लिए सभी स्क्रिप्ट्स को मेरी साइट पर उपयोग किया जाता है। तब मैं ब्राउज़र को यह तय करने दे सकता था कि इनमें से कोई भी स्क्रिप्ट पहले से ही कैश में है या नहीं (और यदि आवश्यक हो तो उन्हें लोड करने के लिए)।क्या ब्राउज़र अभी भी आलसी लोड कर देगा यदि यह पहले से ही ब्राउज़र कैश में है?

जो मुझे जेएस में परीक्षण करने से बचाता है चाहे कुछ पहले ही लोड हो चुका है (और मैं कुछ अतिरिक्त अनुरोध किए जाने के ओवरहेड को स्वीकार करने के लिए तैयार हूं)। क्या यह इस तरह से काम करेगा, या क्या मैं कुछ दिख रहा हूं?

उत्तर

3

मैं कठिन आंकड़े पर यह आधारित नहीं कर रहा हूँ, लेकिन मैं यह कहना सुरक्षित लगता है कि के बारे में 75 ~ 80% आज इस्तेमाल होने वाले ब्राउज़र स्क्रिप्ट को कैशिंग करते हुए एक बहुत अच्छा काम करते हैं। AFAIK, कैश किए गए स्क्रिप्ट का उपयोग करने के लिए ब्राउज़र को मजबूर करने के तरीके हैं, लेकिन यह देखना कि आप जो चाहते हैं वह नहीं है, इससे कोई फर्क नहीं पड़ता।

हां, वास्तव में, अधिकांश ब्राउज़र, काहिड स्क्रिप्ट का संदर्भ लेंगे, और फ़ाइलों को बार-बार अनुरोध नहीं करेंगे। बेशक, some people are concerned about their privacy, और केवल अज्ञात/गुप्त मोड (उर्फ अश्लील मोड) में वेब ब्राउज़ करेगा।
ब्राउज़र विंडो बंद होने पर कैश को साफ़ करने के लिए ब्राउज़र का कारण बनता है
आप परवाह क्यों करेंगे? खैर, मैं एक के लिए, मेरी जेएस स्क्रिप्ट विकसित करते समय यह बहुत उपयोगी लगता है।
हार्ड-रीफ्रेशिंग ctrl + सी जैसा कुछ है। हम सभी ने सुनिश्चित करने के लिए, उन दो कुंजियों को 4 ~ 5 बार दबाने के खरगोश को उगाया है। मैंने देखा है कि मेरे सह कार्यकर्ता ctrl + F5 भी साथ एक ही बात करते हैं ...

+0

क्या आप सुनिश्चित हैं कि अधिकांश ब्राउज़र स्क्रिप्ट को आलसी लोड करने से पहले कैश की जांच करेंगे? क्योंकि मुझे किसी ऐसे व्यक्ति से भी एक जवाब मिला है जो कहता है कि कैश के बावजूद सब कुछ हमेशा लोड किया जाएगा, और मुझे वास्तव में नहीं पता कि अब क्या विश्वास करना है। –

+0

@ सैमुएल: मैंने lazyload.js के स्रोत को देखा है। यह वास्तव में करता है, एक नया डोम तत्व (स्क्रिप्ट टैग, गिटूब पर लाइन 230 की जांच करें) बनाता है, और इसे डीओएम पेड़ में जोड़ता है। परिणामस्वरूप व्यवहार वही होता है जब टैग शुरू होता था: ब्राउज़र जांच करेगा कि उसके पास उस डोमेन के लिए कैश में स्क्रिप्ट है या नहीं, यदि ऐसा है, तो यह फ़ाइल को फिर से अनुरोध नहीं करेगा, लेकिन कैश किए गए संस्करण को लोड करेगा। यदि नहीं, तो यह फ़ाइल का अनुरोध करेगा। मैंने अन्य उत्तरों पर एक त्वरित नज़र डाली है, लेकिन मुझे नहीं पता कि आप किस बात का जिक्र कर रहे हैं जब आप कहते हैं कि आपके पास जवाब है कि यह हमेशा अनुरोध करेगा। –

+0

मेरा मतलब दिमित्री का जवाब था (नीचे)। लेकिन आपका जवाब बिल्कुल बताता है कि मैं किस बारे में अनिश्चित था। धन्यवाद! –

1

मैंने इसे आपके द्वारा समझाए गए तरीके से काम किया है और मैंने इसे काम नहीं देखा है। हालांकि, डबल लोड की शायद ही कभी घटना होती है, जो ओवरहेड को और भी अधिक बनाती है।

+0

आपके उत्तर के लिए धन्यवाद, लेकिन मुझे आपकी अंतिम वाक्य नहीं समझती है। इसका मतलब क्या है? –

+0

गंभीरता से, अगर आप बक्षीस चाहते हैं, तो मुझे कम से कम आधे रास्ते सभ्य उत्तर दें। यदि आपका उत्तर इस तरह रहता है तो मैं आपको बक्षीस नहीं दे रहा हूं। –

+0

मुझे बक्षीस की परवाह नहीं है। दूसरा, जब मैं कहता हूं कि यह दो गुना लोड होगा, तो कैश किए गए संस्करण को आलसी लोड के शीर्ष पर लोड किया जाएगा। यह काम करने वाले जावास्क्रिप्ट को प्रभावित नहीं करेगा, लेकिन कभी-कभी यह इसे धीमा कर सकता है कि यह कितना समय है। – spriore

1

संक्षेप में: यह निर्भर करता है

ब्राउज़र सबसे अधिक संभावना स्क्रिप्ट के लिए अनुरोध नहीं करने के लिए अगर यह कैश में मौजूद है जब तक स्पष्ट निर्दिष्ट है।

हालांकि, यह पूरी तरह से स्क्रिप्ट या नहीं अनुरोध करने के लिए ब्राउज़र के विवेक पर निर्भर है ..

+0

आपके प्रश्न पर मेरा ध्यान प्राप्त हुआ :) @ सैमुएल –

+0

ठीक है, उत्तर के लिए धन्यवाद। तो मुझे लगता है कि यह एक प्रश्न के जितना आसान नहीं है जैसा कि मैंने सोचा था कि यह होगा। मूल रूप से जवाब है; निर्भर करता है। –

+0

@ सैमुएल बिल्कुल ... –

1

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

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

1

कैश-नियंत्रण के बारे में कैसे?

<pre><code><meta http-equiv="cache-control" content="no-cache"></code></pre> 

शायद यह आपके लिए सही बात होगी। अधिक जानकारी के लिए here देखें।

+0

ठीक है, लेकिन क्यों "नो-कैश"? क्योंकि जब भी संभव हो तो ब्राउज़र कैश किए गए संस्करण को संदर्भित करना चाहता है। क्या यह "सार्वजनिक" या "निजी" नहीं होना चाहिए? और पहले से ही "सार्वजनिक" डिफ़ॉल्ट नहीं है? –

+0

हाँ सार्वजनिक डिफ़ॉल्ट है। लेकिन आप जानते हैं कि ब्राउज़र स्वचालित रूप से कैश किए गए संस्करण को लेता है। – Lithilion

+0

w3fools क्यों लिंक करते हैं? –

0

नहीं, यह काम नहीं करेगा।

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

यदि आप lazyload के माध्यम से बस "सभी लोड करें" बनाने पर विचार कर रहे हैं: यह केवल एक जावास्क्रिप्ट फ़ाइल बनाना और इसे अपने पृष्ठों के अंत में लोड करना बेहतर है।

+0

lazyload को कैश तक पहुंच नहीं है, पर्याप्त सच है, लेकिन lazyloadjs वास्तव में आपकी स्क्रिप्ट को _load_ नहीं करता है। यह एक नया डोम नोड बनाता है, जो इसे वर्तमान डोम पेड़ में जोड़ता है। जेएस के पास डोम के साथ कुछ लेना देना नहीं है, इसलिए एक बार src विशेषता सेट हो जाने पर, यह ब्राउज़र पर निर्भर करता है कि स्क्रिप्ट का अनुरोध कैसे किया जाता है। अधिकांश आधुनिक ब्राउज़र _will_ पहले कैश को संदर्भित करते हैं। –

+0

आप सही हैं, ब्राउज़र जांच करेगा कि अनुरोधित संसाधन (जेएस फ़ाइल) कैश में है या नहीं। लेकिन फिर ब्राउज़र उस संसाधन को लोड करेगा जो सर्वर से कैश में नहीं है। और आप ब्राउज़र को नहीं बता सकते: "फाइल लोड करें यदि फ़ाइल कैश में है"। आप बस बताएं: "फ़ाइल लोड करें"। और ब्राउज़र कैश से या सर्वर से लोड। 'lazyload.js' वही करते हैं: यह सिर्फ जेएस फाइल लोड करता है। –

+0

हां, मैंने अपने उत्तर में यही कहा है, ... फ़ाइल/संसाधन लोड होने का तरीका ब्राउज़र पर है, और अधिकांश ब्राउज़र स्क्रिप्ट को कैश करेंगे ... जाहिर है, अगर वे कैश में नहीं हैं तो वे करेंगे HTTP अनुरोध के अनुसार अनुरोध किया जा सकता है ... लेकिन आपका उत्तर बताता है कि यह हर स्क्रिप्ट, हर बार_ का अनुरोध करेगा। कम से कम, यह है कि ओपी ने आपके उत्तर को –

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