2008-08-30 20 views
68

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

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

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

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

उत्तर

180

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

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

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

+8

ग्रेट स्पष्टीकरण। "Eager Loading" की तुलना में – Christian

+16

+1 –

+0

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

10

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

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

35

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

सामान्य रूप से, Wikipedia में अधिक जानकारी है।

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 

मूल रूप से, मैं एक आइटम वर्ग है जो हमारे सूची में किसी आइटम का प्रतिनिधित्व करता है:

5

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

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

6

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

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

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

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

3

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

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

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

उदाहरण आवेदन:

भूत लेज़ी प्रारंभ मूल्य धारक

4

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

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

[Atom as taught in gang terms by Venus on WKRP से प्रेरित होकर।]

+0

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

+1

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

4

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

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

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

  1. उत्सुक लोड हो रहा है - एक बार में सभी जुड़ा टेबल लोड हो रहा है।
1

Lazy<T> अब सी # 4.0 का हिस्सा है - MSDN पर एक अच्छा पृष्ठ है जो अवधारणा को समझाता है।

1

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

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

और ऊपर वर्णित अनुसार, विपरीत एजेर लोडिंग होगी जहां आप ग्राहक को विचार में नहीं लेते हैं, इस प्रकार संभावित रूप से प्रदर्शन हिट होता है।

10

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

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

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

2

आलसी लोड हो रहा है के लाभ में से कुछ:

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