Tembel Yükleme nedir?


91

Tembel Yükleme nedir?

[Birkaç yanıtı okuduktan sonra düzenleyin] İnsanlar neden bu terimi bu kadar sık ​​kullanıyor?

Diyelim ki bir ASP / ADO kayıt kümesi kullanıyorsunuz ve onu verilerle veya bir ızgara görünümü için ADO.NET Veri kaynağıyla yüklüyorsunuz.

Sanırım insanların neden Lazy Loading terimini kullandıklarını sormalıydım, "diğer" türleri nelerdir?

Yanıtlar:


225

Tembel yükleme deniyor çünkü tembel bir insan gibi, istemediğiniz bir şeyi yapmaktan vazgeçiyorsunuz. Bunun tersi, ihtiyacınız olmadan çok önce bir şeyi hemen yüklediğiniz Eager Loading'dir.

İnsanların neden yavaş yükleme kullandığını merak ediyorsanız, başlaması ÇOK UZUN bir süre alan bir uygulama düşünün. Bu uygulama muhtemelen çok fazla hevesle yükleme yapıyor ... diskten bir şeyler yüklüyor ve hesaplamalar yapıyor ve buna ihtiyaç duyulmadan çok önce değil.

Bunu tembel yüklemeyle karşılaştırın, uygulama çok daha hızlı başlayacaktır, ancak daha sonra uzun çalışma yükü gerektiren bir şeyi ilk kez yapmanız gerektiğinde, ilk kez yüklenirken hafif bir duraklama olabilir. Böylece, tembel yüklemeyle, uygulamanızı çalıştırırken yükleme süresini amorti etmiş olursunuz ... ve aslında kullanıcının kullanmak istemeyeceği şeyleri yüklemekten tasarruf edebilirsiniz.


@Mike Stone, Merhaba, ne zaman tembel ve istekli yüklemeyi kullanacağınızı açıklar mısınız? Bildiğim gibi, dosya yöneticisini çalıştırırsam, tembel yükleme tasarımını kullanır.
Alston

40

Lazy Loading, bir nesneyi yalnızca ilk ihtiyaç duyduğunuzda yüklediğiniz veya başlattığınız bir programlama uygulamasıdır. Bu, özellikle uygulamanızda çok sayıda bileşen varsa, size büyük bir performans artışı sağlayabilir.

Her zamanki gibi Wikipedia'da daha fazla ayrıntı var.


14

Tembel yükleme, nesne biriminin yüklenmesini ihtiyacımız olan noktada geciktirdiğimiz bir kavramdır. Nesneleri gereksiz yere yüklemek yerine basit kelimelerle talep edilen nesne yüklemesi. Örneğin, toplanmış "Siparişler" nesnesine sahip bir "Müşteri" sınıfınız varsa. Yani müşteri verilerini yüklemek istersiniz, ancak siparişler uygulamanızın ihtiyacı olana kadar ertelemek istediğiniz nesnelerdir.

Aşağıda, geç yüklemeyi nasıl kullanacağımızı, geç yüklemeyi nasıl uygulayabileceğimizi ve bunun avantaj ve dezavantajlarını gösteren bir youtube videosu var.

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



7

Geç yükleme terimi genellikle nesne ilişkisel eşleştiricilerden bahsederken kullanılır. Doğrudan ADO.NET kullanırsanız, her zaman istekli bir yükleme alırsınız (yani, her zaman yalnızca belirttiğiniz şeyi yükler).

NHibernate gibi VEYA eşleyicileri, yalnızca verilere eriştiğinizde doğru verilerle "doldurulan" proxy nesnelerini döndürmeyi destekler. Bu şekilde yalnızca gerçekten kullandığınız verileri yüklersiniz. Bu, veritabanından yüklenebilen nesneler arasında çok sayıda ilişki belirlediğinizde, OR eşleyicisinin tüm ilgili nesneleri ve ilgili nesnelerle ilgili nesneleri vb. Yüklemesini istemediğinizde yararlı bir özelliktir. Bu, tüm veritabanınızın yüklenmesiyle sonuçlanabilir.

Bu problem, nesne modelinizin dikkatli tasarımı ile de önlenebilir. (Toplamaları kullanmak ve yalnızca etki alanına dayalı tasarımda olduğu gibi toplu kökleri yüklemek, tembel yükleme kullanmadan bunu aşmanın bir yoludur).

Geç yükleme, veya eşleyicinin ihtiyacınız olan tüm verileri bir kez almak yerine çok sayıda küçük veritabanı erişimi yapmasına neden olabilir. Bu da performans sorunlarına neden olabilir.


5

İşte yazdığım bazı gerçek Python kodlarından bir örnek:

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

Temel olarak, envanterimizdeki bir öğeyi temsil eden bir Öğe sınıfım var. Sahip olduğumuz toplam öğe sayısı, sahip olduğumuz sayı artı çeşitli kaynaklardan ödünç aldığımız tüm öğelerin toplamıdır. Bu sayıların tümü veritabanımızda saklanır ve toplam talep edilene kadar bunu hesaplamak anlamsız olacaktır (çünkü Öğeler genellikle toplam talep edilmeden kullanılacaktır).

Böylece toplam özelliği, _total alanının var olup olmadığını kontrol eder. Aksi takdirde, özellik kodu veritabanını sorgular ve hesaplar, ardından değeri _total alanında depolar, böylece bir sonraki istendiğinde yeniden hesaplanması gerekmez.


4

Tembel yükleme: zamanınızı (veya hafızanızı) ihtiyaç duymayabileceğiniz şeylerle boşa harcamayın. Sonra ihtiyacınız olduğunda daha uzun sürer, ama sorun değil.

Hayattan bir örnek: o Fransızca konuşma kitabını gerçekten öğrenmek yerine, gerektiğinde cümleleri birer birer öğrenirsiniz. Bu ne zaman mantıklı? Yalnızca kısa bir süre için Fransa'da olacaksanız (yani, çok fazla ifadeye ihtiyacınız olmayacak) veya çok yakında ayrılmanız gerekiyorsa. İki yıldır oradaysanız ve / veya çalışmak için uzun zamanınız varsa, tüm deyimler kitabını önceden öğrenmek çok daha verimli olabilir (istekli yükleme).

[ WKRP'de Venüs tarafından çete terimleriyle öğretildiği üzere Atom'dan esinlenilmiştir .]


İşlerin daha uzun sürmesi her zaman doğru değildir. En uygun şekilde uygulanmadığında, tembel yüklemenin aslında bir uygulamayı önemli ölçüde yavaşlattığını deneyimledim.
Captain Sensible

1
@SeventhElement İyi olduğunu tartışmıyorum. Tembel yüklemeyi anlamanın temeli budur. İyi olmadığı bir durumda (örneğin, kullanıcı arayüzü yavaşladığından veya başka herhangi bir nedenle) istekli yüklemeyi tercih edebilirsiniz.
Dan Rosenstark

4

Tembel yükleme, veritabanlarında sıklıkla gerekli bilgilerin bölümlerini yalnızca gerektiğinde yükleme kavramına atıfta bulunmak için kullanılan bir terimdir.

Sanırım birkaç masanın birleşimi olan bir kayda sahip olmanız gerekiyor. Hepsini bir kerede getirdiyseniz, sadece ana masayı söyleyeceğinizden daha uzun sürer. Tembel yükleme kullanıldığında, bilgilerin geri kalanı yalnızca ihtiyaç duyulduğunda alınacaktır. Yani aslında belirli senaryolarda 'verimli yükleme'dir.

Diğer 'yükleme' türleri:

  1. İstekli Yükleme - Tüm bağlı tabloları aynı anda yükleme.

3

bir Tasarım modelidir.

Tembel yükleme: Kodunuz belirli bir nesne tarafından bazı işlemler yapılmasını gerektirene kadar, nesne başlatılmaz ve başlatıldığında nesneyi yeniden başlatmaz, ancak önceden başlatılmış nesneyi kullanır.

Bu, kodunuzu çok daha verimli hale getirir ve bellek kullanımını yönetmeye yardımcı olur.

Geç yükleme için Örnek Uygulamalar:

Hayalet Tembel başlatma Değer tutucu


3

Geç yüklemenin avantajlarından bazıları:

  1. Uygulamanın başlama süresini en aza indirir.
  2. Uygulama, isteğe bağlı yükleme nedeniyle daha az bellek tüketir.
  3. Sunucuya gereksiz isteklerden kaçınılır.

2

Tembel Yükleme'ye bir örnek, uygulamanın o anda yalnızca kullanıcıların tarayıcı bakış açısı boyutunun ne olduğunu yüklediği yeri görüntülemek için bir web sayfasında çok fazla veri içeren bir ızgara veya tablo olabilir. Daha fazla içerik veya veri görüntülemek için aşağı kaydırdıklarında, o anda görünüme daha fazla veri yüklenir.

Bu, ajax veya jQuery aracılığıyla daha yaygın bir görsel / etkileşim tasarım modeli haline geliyor.

Ve yukarıda belirtildiği gibi, bunun tersi, müşteriyi dikkate almadığınız ve dolayısıyla potansiyel olarak bir performans düşüşü yaşayacağınız Eager Loading olacaktır.



Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.