|
|
Diposting pada 30/07/2018 10.30.45
|
|
|

Perkenalan
Mode Flyweight secara efektif mendukung sejumlah besar objek berbutir halus dengan menjalankan teknologi berbagi, menghindari overhead sejumlah besar kelas kecil dengan konten yang sama (seperti mengkonsumsi memori), dan memungkinkan semua orang untuk berbagi kelas (meta-kelas).
Dalam pemrograman, terkadang perlu untuk menghasilkan sejumlah besar instans kelas berbutir halus untuk mewakili data, dan jika Anda dapat menemukan bahwa instans ini pada dasarnya memiliki overhead yang sama kecuali untuk beberapa parameter, jumlah kelas yang perlu diinstansiasi dapat sangat berkurang. Jika Anda dapat memindahkan parameter tersebut ke luar instance class dan meneruskannya saat metode dipanggil, Anda dapat sangat mengurangi jumlah instance individual dengan berbagi.
Jadi bagaimana jika Anda menerapkan mode meta di JavaScript? Ada dua cara, yang pertama diterapkan pada lapisan data, terutama ke sejumlah besar objek serupa dalam memori; Yang kedua diterapkan ke lapisan DOM, yang dapat digunakan pada pengelola peristiwa pusat untuk menghindari melampirkan pegangan peristiwa ke setiap elemen turunan dalam kontainer induk.
Nikmati metaverse dan lapisan data
Ada dua konsep penting dalam Flyweight - keadaan internal intrinsik dan ekstrinsik eksternal, status internal dikelola dalam objek melalui metode internal, dan informasi eksternal dapat dihapus atau disimpan secara eksternal.
Terus terang, pertama-tama mencubit model asli, dan kemudian dengan kesempatan dan lingkungan yang berbeda, dan kemudian menghasilkan model tertentu dengan karakteristiknya sendiri, jelas, objek baru yang berbeda perlu dihasilkan di sini, sehingga mode pabrik sering muncul dalam mode Flyweight, status internal Flyweight digunakan untuk berbagi, dan pabrik Flyweight bertanggung jawab untuk memelihara kolam Flyweight (kumpulan pola) untuk menyimpan objek dari keadaan internal.
Gunakan mode Yuanyuan
Mari kita tunjukkan bahwa jika kita memiliki perpustakaan untuk mengelola semua buku, metadata untuk setiap buku akan terlihat seperti ini:
ID Titel Penulis Genre Jumlah halaman ID Penerbit ISBN Kami juga perlu menentukan kapan dan oleh siapa setiap buku diperiksa, serta tanggal pengembalian dan ketersediaan:
Tanggal checkout checkoutAnggota dueReturnDate Ketersediaan Karena objek buku diatur ke kode berikut, perhatikan bahwa kode belum dioptimalkan:
Program ini mungkin baik-baik saja pada awalnya, tetapi seiring waktu, jumlah buku dapat meningkat dalam jumlah besar, dan setiap buku memiliki versi dan jumlah yang berbeda, dan Anda akan menemukan bahwa sistemnya semakin lambat. Ribuan objek buku dalam memori dapat dibayangkan, dan kita perlu mengoptimalkannya dengan mode berbagi.
Kita dapat membagi data menjadi dua jenis data: internal dan eksternal, dan data yang terkait dengan objek buku (judul, penulis, dll.) dapat diatribusikan ke atribut internal, sedangkan (checkoutMember, dueReturnDate, dll.) dapat diatribusikan ke atribut eksternal. Dengan cara ini, kode berikut dapat berbagi objek yang sama dalam buku yang sama, karena tidak peduli siapa yang meminjam buku itu, selama buku itu adalah buku yang sama, informasi dasarnya sama:
Tentukan pabrik dasar
Mari kita tentukan pabrik dasar untuk memeriksa apakah objek buku dibuat sebelumnya, kembalikan jika ada, dan buat ulang dan simpan jika tidak, yang memastikan bahwa kita hanya membuat objek untuk setiap jenis buku:
Kelola status eksternal
Keadaan eksternalnya relatif sederhana, kecuali untuk buku yang kami rangkum, yang lainnya perlu dikelola di sini:
Dengan cara ini, kita dapat menyimpan informasi yang sama dari buku yang sama dalam objek pengelola buku, dan hanya satu salinan; Dibandingkan dengan kode sebelumnya, dapat ditemukan bahwa banyak memori yang disimpan.
Nikmati mode meta dan DOM
Saya tidak akan mengatakan banyak tentang insiden menggelegak DOM di sini, saya yakin semua orang sudah tahu, mari kita berikan dua contoh.
Contoh 1: Manajemen Insiden Terpusat Misalnya, jika kita memiliki banyak jenis elemen atau struktur yang serupa (seperti menu, atau beberapa li di ul) yang perlu memantau peristiwa kliknya, maka kita perlu mengikat setiap elemen lagi untuk pengikatan peristiwa, jika ada sangat, sangat banyak elemen, maka kinerjanya dapat dibayangkan, dan dikombinasikan dengan pengetahuan tentang menggelegak, jika ada elemen anak yang memiliki pemicu peristiwa, maka peristiwa akan menggelembung ke elemen yang lebih tinggi setelah dipicu, jadi dengan menggunakan fitur ini, kita dapat menggunakan mode Xiangyuan. Kita dapat memantau peristiwa elemen induk dari elemen serupa ini, dan kemudian menentukan elemen turunan mana yang memiliki peristiwa yang dipicu sebelum melanjutkan dengan operasi lebih lanjut.
Di sini kita akan menggabungkan metode bind/unbind jQuery sebagai contoh.
HTML:
JavaScript:
Contoh 2: Terapkan mode Xiangyuan untuk meningkatkan kinerja
Contoh lain, masih terkait dengan jQuery, umumnya kita menggunakan object element dalam fungsi callback event, kita sering menggunakan form $(this), nyatanya berulang kali membuat objek baru, karena ini dalam fungsi callback sudah merupakan elemen DOM itu sendiri, kita harus menggunakan kode berikut:
Faktanya, jika kita harus menggunakan sesuatu seperti $(this), kita juga dapat mengimplementasikan versi kita sendiri dari pola single-instance, misalnya, kita dapat mengimplementasikan fungsi seperti jQuery.signle(this) untuk mengembalikan elemen DOM itu sendiri:
Cara menggunakan:
Ini mengembalikan elemen DOM itu sendiri apa adanya, tanpa membuat objek jQuery.
ringkasan
Mode Flyweight adalah mode yang meningkatkan efisiensi dan kinerja program, yang akan sangat mempercepat kecepatan lari program. Ada banyak aplikasi: misalnya, jika Anda ingin membaca serangkaian string dari database, banyak di antaranya adalah duplikat, maka kita dapat menyimpan string ini di kumpulan Flyweight.
Jika sebuah aplikasi menggunakan sejumlah besar objek, dan sejumlah besar objek ini menyebabkan banyak kebahagiaan penyimpanan, aplikasi harus mempertimbangkan untuk menggunakan mode berbagi; Jika Anda menghapus status eksternal objek, Anda dapat mengganti banyak grup objek dengan objek bersama yang relatif sedikit, dan Anda dapat mempertimbangkan untuk menggunakan mode Xiangyuan.
Alamat referensi:http://www.addyosmani.com/resour ... ok/#detailflyweight
|
Mantan:Rekomendasikan 3 situs web untuk menemukan ikon ikonDepan:NumberOfPendingMessages, MessagesEnqueued, Messag...
|