आलसी लोडिंग क्या है?


91

आलसी लोडिंग क्या है?

[कुछ उत्तर पढ़ने के बाद संपादित करें] लोग इस शब्द का इतनी बार उपयोग क्यों करते हैं?

मान लें कि आप केवल ASP / ADO रिकॉर्डसेट का उपयोग करते हैं और इसे ग्रिडव्यू के लिए डेटा या ADO.NET डेटासोर्स के साथ लोड करते हैं।

मुझे लगता है कि मुझे यह पूछना चाहिए था कि लोग आलसी लोडिंग शब्द का उपयोग क्यों करते हैं, "अन्य" प्रकार क्या हैं?

जवाबों:


226

इसे आलसी लोडिंग कहा जाता है क्योंकि, एक आलसी व्यक्ति की तरह, आप कुछ ऐसा करना चाहते हैं जिसे आप नहीं करना चाहते हैं। इसके विपरीत ईगर लोड हो रहा है, जहां आप जरूरत से बहुत पहले ही कुछ लोड कर लेते हैं।

यदि आप उत्सुक हैं कि लोग आलसी लोडिंग का उपयोग क्यों कर सकते हैं, तो उस एप्लिकेशन पर विचार करें जो शुरू करने के लिए एक LOOOOONG समय लेता है। यह एप्लिकेशन संभवतः बहुत अधिक उत्सुक लोडिंग कर रहा है ... डिस्क से चीजों को लोड कर रहा है, और गणना कर रहा है और जो पहले कभी जरूरी नहीं है।

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


@ माइक स्टोन, नमस्ते, क्या आप समझा सकते हैं कि आलसी और उत्सुक लोडिंग का उपयोग कब करें? जैसा कि मुझे पता है, अगर मैं फ़ाइल प्रबंधक चलाता हूं, तो यह आलसी लोडिंग डिज़ाइन का उपयोग करता है।
एलस्टन

40

आलसी लोडिंग एक प्रोग्रामिंग प्रैक्टिस है जिसमें आप केवल किसी ऑब्जेक्ट को तब लोड या इनिशियलाइज़ करते हैं जब आपको पहली बार इसकी आवश्यकता होती है। यह संभावित रूप से आपको एक बड़ा प्रदर्शन को बढ़ावा दे सकता है, खासकर यदि आपके आवेदन में बहुत सारे घटक हैं।

हमेशा की तरह, विकिपीडिया में अधिक विवरण हैं।


14

आलसी लोडिंग एक अवधारणा है जहां हम ऑब्जेक्ट यूनिट को उस बिंदु पर लोड करने में देरी करते हैं जहां हमें इसकी आवश्यकता होती है। अनावश्यक रूप से वस्तुओं को लोड करने के बजाय डिमांड ऑब्जेक्ट लोडिंग पर सरल शब्दों में रखना। उदाहरण के लिए यदि आपके पास "ग्राहक" वर्ग है जिसके पास "आदेश" वस्तु एकत्र है। इसलिए आप ग्राहक डेटा को लोड करना पसंद करते हैं, लेकिन ऑर्डर की वस्तुओं को आप तब तक विलंब करना चाहेंगे जब तक कि आपके एप्लिकेशन को इसकी आवश्यकता न हो।

नीचे एक यूट्यूब वीडियो है जो प्रदर्शित करता है कि आलसी लोडिंग का उपयोग कैसे करें, हम आलसी लोडिंग को कैसे लागू कर सकते हैं और उसी के फायदे और नुकसान।

http://www.youtube.com/watch?v=2SrfdAkwmFo


9

विकिपीडिया की परिभाषा आलसी लोडिंग एक डिज़ाइन पैटर्न है जिसका उपयोग आमतौर पर कंप्यूटर प्रोग्रामिंग में किसी ऑब्जेक्ट के आरंभीकरण को स्थगित करने के लिए किया जाता है, जब तक कि उस बिंदु पर जिसकी आवश्यकता होती है। ...

http://en.wikipedia.org/wiki/Lazy%20loading


7

आलसी लोडिंग शब्द का उपयोग आमतौर पर ऑब्जेक्ट रिलेशनल मैपर्स के बारे में बात करते समय किया जाता है। यदि आप सीधे ADO.NET का उपयोग करते हैं तो आपको हमेशा उत्सुक लोडिंग मिलती है (यानी यह हमेशा आपके द्वारा निर्दिष्ट किए गए लोड को लोड करता है)।

OR-mappers जैसे nHibernate प्रॉक्सी ऑब्जेक्ट्स को वापस करने का समर्थन करता है जो डेटा को एक्सेस करते समय केवल सही डेटा के साथ "भरा" मिलता है। इस तरह से आप केवल उन डेटा को लोड करते हैं जो आप वास्तव में उपयोग करते हैं। यह एक उपयोगी सुविधा है जब आप उन वस्तुओं के बीच बहुत सारे संबंध निर्दिष्ट करते हैं जो डेटाबेस से लोड हो सकते हैं, तो आप नहीं चाहते हैं कि ओआर-मैपर संबंधित वस्तुओं और संबंधित वस्तुओं से संबंधित सभी वस्तुओं को लोड करें और इसी तरह। जिसके परिणामस्वरूप आपका पूरा डेटाबेस लोड हो सकता है।

इस समस्या को आपके ऑब्जेक्ट मॉडल के केयरफुल डिज़ाइन द्वारा भी रोका जा सकता है। (एग्रीगेट का उपयोग करना और केवल डोमेन चालित डिज़ाइन की तरह एग्रीगेट जड़ों को लोड करना आलसी लोडिंग का उपयोग किए बिना इसके चारों ओर प्राप्त करने का एक तरीका है)।

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


5

यहाँ कुछ वास्तविक पायथन कोड का एक उदाहरण मैंने लिखा है:

class Item(Model):
    ...
    @property
    def total(self):
        if not hasattr(self, "_total"):
            self._total = self.quantity \
                  + sum(bi.quantity for bi in self.borroweditem_set.all())
        return self._total

असल में, मेरे पास एक आइटम वर्ग है जो हमारी सूची में एक आइटम का प्रतिनिधित्व करता है। हमारे पास कुल आइटमों की संख्या वह संख्या है जिसके पास हम उन सभी वस्तुओं का योग है जो हम विभिन्न स्रोतों से उधार ले रहे हैं। ये संख्याएं हमारे डेटाबेस में संग्रहीत हैं, और जब तक कि वास्तव में अनुरोध नहीं किया जाता है, तब तक यह गणना करने के लिए व्यर्थ होगा (चूंकि अक्सर आइटम कुल अनुरोध के बिना उपयोग किए जाएंगे)।

तो कुल संपत्ति की जाँच करता है कि क्या _total फ़ील्ड मौजूद है। यदि ऐसा नहीं होता है, तो संपत्ति कोड डेटाबेस पर सवाल उठाता है और उसकी गणना करता है, तो मान को _total फ़ील्ड में संग्रहीत करता है ताकि इसे अगली बार अनुरोध किए जाने पर फिर से विवादित न किया जाए।


4

आलसी लोडिंग: आप अपना समय बर्बाद नहीं करते हैं (न ही आपकी मेमोरी) सामान के साथ जिसकी आपको आवश्यकता नहीं हो सकती है। फिर जब आपको इसकी आवश्यकता होती है, तो इसमें अधिक समय लगता है, लेकिन यह ठीक है।

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

[ एटम द्वारा प्रेरित के रूप में WKRP पर शुक्र द्वारा गिरोह के संदर्भ में सिखाया गया है ।]


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

1
@SeventhElement मैं तर्क नहीं दे रहा कि यह ठीक है। यह आलसी लोडिंग को समझने का आधार है। ऐसे मामले में जहां यह ठीक नहीं है (क्योंकि, उदाहरण के लिए, यूआई सुस्त या किसी अन्य कारण से) आप उत्सुक लोडिंग का विकल्प चुन सकते हैं।
डैन रोसेनस्टार्क

4

आलसी लोडिंग एक शब्द है जिसका उपयोग डेटाबेस में अक्सर आवश्यक जानकारी के लोडिंग भागों की अवधारणा को संदर्भित करने के लिए किया जाता है जब यह आवश्यक हो।

यानी मान लें कि आपके पास एक रिकॉर्ड होना चाहिए जिसमें कई तालिकाओं का समावेश हो। यदि आप इसे एक बार में ही प्राप्त कर लेते हैं तो आपको इससे अधिक समय लगेगा यदि आप केवल मुख्य तालिका कहेंगे। आलसी-लोडिंग का उपयोग करके शेष जानकारी केवल तभी प्राप्त की जाएगी जब इसकी आवश्यकता होगी। तो यह वास्तव में कुछ परिदृश्यों में 'कुशल-लोडिंग' है।

'लोडिंग' के अन्य प्रकार हैं:

  1. एगर लोडिंग - सभी कनेक्टेड टेबल को एक साथ लोड कर रहा है।

3

एक डिज़ाइन पैटर्न है।

आलसी लोडिंग: अपने कोड को किसी विशेष ऑब्जेक्ट द्वारा किए गए कुछ ऑपरेशन की आवश्यकता न होने पर, ऑब्जेक्ट को इनिटिलाइज़ नहीं किया जाता है, और एक बार इसे शुरू करने के बाद यह ऑब्जेक्ट को फिर से इनिशियलाइज़ नहीं करता है, लेकिन पहले इनिशियलाइज्ड ऑब्जेक्ट का उपयोग करता है।

यह आपके कोड को अधिक कुशल बनाता है और मेमोरी उपयोग को प्रबंधित करने में मदद करता है।

उदाहरण आलसी लोडिंग के अनुप्रयोग:

भूत आलसी आरंभीकरण मूल्य धारक


3

आलसी लोडिंग के कुछ फायदे:

  1. आवेदन के समय को कम करता है।
  2. एप्लिकेशन ऑन-डिमांड लोडिंग के कारण कम मेमोरी की खपत करता है।
  3. सर्वर से अनावश्यक अनुरोध से बचा जाता है।

2

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

यह एक सामान्य दृश्य / इंटरैक्शन डिज़ाइन पैटर्न के साथ-साथ अजाक्स या jQuery के माध्यम से अधिक हो रहा है।

और जैसा कि ऊपर उल्लेख किया गया है, इसके विपरीत ईगर लोड हो रहा है जहां आप ग्राहक को ध्यान में नहीं रखते हैं, इस प्रकार संभवतः एक प्रदर्शन हिट होता है।



0

Geeksforgeeks के अनुसार, लेज़ी लोडिंग एक सॉफ़्टवेयर डिज़ाइन पैटर्न है, जहाँ किसी ऑब्जेक्ट का इनिशियलाइज़ेशन केवल तब होता है जब वास्तव में इसकी आवश्यकता होती है और उपयोग की सादगी को संरक्षित करने और प्रदर्शन में सुधार करने से पहले नहीं।

https://www.geeksforgeeks.org/lazy-loading-design-pattern/

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.