Apa itu Lazy Loading?

91

Apa itu Lazy Loading?

[Edit setelah membaca beberapa jawaban] Mengapa orang sering menggunakan istilah ini?

Katakanlah Anda hanya menggunakan kumpulan data ASP / ADO dan memuatnya dengan data atau Sumber Data ADO.NET untuk tampilan kisi.

Saya kira saya seharusnya bertanya mengapa orang menggunakan istilah Lazy Loading, apa tipe "lain" mereka?

Brian Boatright
sumber

Jawaban:

225

Ini disebut pemuatan lambat karena, seperti orang yang malas, Anda menunda melakukan sesuatu yang tidak Anda inginkan. Kebalikannya adalah Eager Loading, di mana Anda memuat sesuatu segera, jauh sebelum Anda membutuhkannya.

Jika Anda penasaran mengapa orang mungkin menggunakan pemuatan lambat, pertimbangkan aplikasi yang membutuhkan waktu LOOOOONG untuk memulai. Aplikasi ini mungkin melakukan banyak pemuatan yang bersemangat ... memuat sesuatu dari disk, dan melakukan penghitungan dan yang lainnya sebelum diperlukan.

Bandingkan ini dengan pemuatan lambat, aplikasi akan mulai lebih cepat, tetapi saat pertama kali Anda perlu melakukan sesuatu yang memerlukan pemuatan berjalan lama, mungkin ada sedikit jeda saat dimuat untuk pertama kali. Jadi, dengan pemuatan lambat, Anda mengamortisasi waktu muat selama menjalankan aplikasi Anda ... dan Anda sebenarnya dapat menghemat dari memuat hal-hal yang mungkin tidak pernah ingin digunakan oleh pengguna.

Mike Stone
sumber
@ Mike Stone, Hai, bisakah Anda menjelaskan kapan harus menggunakan lazy dan eager loading? Seperti yang saya ketahui, jika saya menjalankan pengelola file, ini menggunakan desain pemuatan lambat.
Alston
40

Lazy Loading adalah praktik pemrograman di mana Anda hanya memuat atau menginisialisasi objek saat Anda membutuhkannya untuk pertama kali. Ini berpotensi memberi Anda peningkatan kinerja yang besar, terutama jika Anda memiliki banyak komponen dalam aplikasi Anda.

Seperti biasa, Wikipedia memiliki lebih banyak detail.

Javache
sumber
14

Lazy loading merupakan konsep dimana kita menunda pemuatan unit objek pada titik dimana kita membutuhkannya. Dengan kata-kata sederhana tentang pemuatan objek permintaan daripada memuat objek secara tidak perlu. Misalnya jika Anda memiliki kelas "Pelanggan" yang memiliki objek "Pesanan" yang dikumpulkan. Jadi, Anda ingin memuat data pelanggan tetapi objek pesanan ingin Anda tunda hingga aplikasi Anda membutuhkannya.

Di bawah ini adalah video youtube yang mendemonstrasikan bagaimana menggunakan lazy loading, bagaimana kita dapat mengimplementasikan lazy loading dan kelebihan dan kekurangannya.

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

Shivprasad Koirala
sumber
9

Definisi wikipedia Lazy loading adalah pola desain yang biasa digunakan dalam pemrograman komputer untuk menunda inisialisasi suatu objek hingga titik di mana itu diperlukan. ...

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

Kevin Goff
sumber
7

Istilah lazy loading biasanya digunakan saat berbicara tentang pemeta relasional objek. Jika Anda menggunakan ADO.NET secara langsung, Anda selalu mendapatkan eager loading (yaitu selalu memuat apa yang Anda tentukan).

OR-mappers seperti nHibernate mendukung pengembalian objek proxy yang "diisi" dengan data yang benar hanya ketika Anda mengakses data. Dengan begitu Anda hanya memuat data yang benar-benar Anda gunakan. Ini adalah fitur yang berguna ketika Anda menentukan banyak relasi antara objek yang bisa dimuat dari database, Anda tidak ingin OR-mapper memuat semua objek terkait dan objek yang terkait dengan objek terkait dan seterusnya. Itu bisa mengakibatkan seluruh database Anda dimuat.

Masalah ini dapat dicegah dengan desain model objek Anda juga. (menggunakan agregat dan hanya memuat akar agregat seperti dalam desain yang didorong domain adalah cara untuk menyiasatinya tanpa menggunakan pemuatan lambat).

Pemuatan lambat dapat mengakibatkan atau mapper melakukan banyak akses database kecil alih-alih mengambil semua data yang Anda butuhkan sekali. Ini juga dapat menyebabkan masalah kinerja.

Mendelt
sumber
5

Berikut adalah contoh dari beberapa kode Python yang saya tulis:

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

Pada dasarnya, saya memiliki kelas Item yang mewakili item dalam inventaris kami. Jumlah total item yang kita miliki adalah jumlah yang kita miliki ditambah jumlah semua item yang kita pinjam dari berbagai sumber. Angka-angka ini semuanya disimpan dalam database kami, dan tidak ada gunanya menghitung ini sampai totalnya benar-benar diminta (karena seringkali Item akan digunakan tanpa total yang diminta).

Jadi properti total memeriksa apakah bidang _total ada. Jika tidak, maka kode properti menanyakan database dan menghitungnya, lalu menyimpan nilai di bidang _total sehingga tidak perlu dihitung ulang saat diminta lagi.

Eli Courtwright
sumber
4

Pemuatan lambat: Anda tidak membuang waktu (atau ingatan Anda) dengan hal-hal yang mungkin tidak Anda butuhkan. Lalu saat Anda membutuhkannya, itu membutuhkan waktu lebih lama, tapi itu bagus.

Contoh dari kehidupan: alih-alih benar-benar mempelajari buku frasa Prancis, Anda mempelajari frasa satu per satu, sesuai kebutuhan. Kapan ini masuk akal? Jika Anda hanya akan berada di Prancis untuk waktu yang singkat (yaitu, Anda tidak membutuhkan banyak frasa) atau jika Anda harus segera pergi. Jika Anda berada di sana selama dua tahun dan / atau Anda memiliki waktu lama untuk belajar, akan jauh lebih efisien jika Anda hanya mempelajari seluruh buku frasa di muka (eager loading).

[Terinspirasi oleh Atom seperti yang diajarkan dalam istilah geng oleh Venus di WKRP .]

Dan Rosenstark
sumber
Tidak selalu benar bahwa hal-hal membutuhkan waktu lebih lama tidak selalu benar. Saya pernah mengalami bahwa ketika tidak diimplementasikan dengan cara yang paling optimal, lazy loading sebenarnya dapat memperlambat aplikasi secara signifikan.
Captain Sensible
1
@SeventhElement Saya tidak berpendapat bahwa tidak apa-apa. Ini dasar untuk memahami pemuatan lambat. Jika tidak baik-baik saja (karena, misalnya, UI menjadi lamban atau karena alasan lain) Anda dapat memilih eager loading.
Dan Rosenstark
4

Pemuatan lambat adalah istilah yang sering digunakan dalam database untuk merujuk pada konsep memuat bagian dari info yang diperlukan hanya jika diperlukan.

Misalnya Anda perlu memiliki record yang memiliki gabungan beberapa tabel. Jika Anda mengambil semuanya sekaligus, itu akan memakan waktu lebih lama daripada jika Anda mengambil, katakanlah hanya tabel utama. Menggunakan pemuatan lambat, informasi lainnya akan diambil hanya jika diperlukan. Jadi sebenarnya 'pemuatan efisien' dalam skenario tertentu.

Jenis 'pemuatan' lainnya adalah:

  1. Eager Loading - Memuat semua tabel yang terhubung sekaligus.
Cyril Gupta
sumber
3

adalah pola Desain.

Pemuatan lambat: Sampai kode Anda memerlukan beberapa operasi yang dilakukan oleh objek tertentu, objek tidak dinilai, dan setelah diinisialisasi, objek tidak menginisialisasi ulang tetapi menggunakan objek yang diinisialisasi sebelumnya.

Ini membuat kode Anda jauh lebih efisien dan membantu mengelola penggunaan memori.

Contoh Aplikasi Lazy loading:

Pemegang Nilai inisialisasi Ghost Lazy

Pasan Indeewara
sumber
3

Beberapa keuntungan dari lazy loading:

  1. Meminimalkan waktu mulai aplikasi.
  2. Aplikasi mengkonsumsi lebih sedikit memori karena pemuatan sesuai permintaan.
  3. Permintaan yang tidak perlu ke server dihindari.
Gideon Balaganesan
sumber
2

Contoh dari Lazy Loading adalah kotak atau tabel dengan banyak data pada halaman web untuk melihat di mana aplikasi hanya memuat ukuran sudut pandang browser pengguna pada saat itu. Saat mereka menggulir ke bawah untuk ingin melihat lebih banyak konten atau data, lebih banyak data akan dimuat ke dalam tampilan pada saat itu.

Ini menjadi lebih dari pola desain visual / interaksi yang umum juga melalui ajax atau jQuery.

Dan seperti yang disebutkan di atas, kebalikannya adalah Eager Loading di mana Anda tidak mempertimbangkan klien sehingga berpotensi mengalami kinerja hit.

d48
sumber
1

Lazy<T>sekarang menjadi bagian dari c # 4.0 - ada halaman bagus di MSDN yang menjelaskan konsep tersebut.

Philip Wallace
sumber