Dalam JavaScript, browser, terutama browser pada perangkat seluler mengalokasikan memori yang sangat terbatas, dan bagaimana menghemat memori telah menjadi hal yang sangat bermakna. Cara yang efektif untuk menghemat memori adalah dengan mengurangi jumlah objek.
Mode Flyweight (kelas terbang) menjalankan teknologi berbagi untuk secara efektif mendukung sejumlah besar objek berbutir halus, menghindari overhead sejumlah besar kelas kecil dengan konten yang sama (seperti konsumsi memori), dan memungkinkan semua orang untuk berbagi kelas (MetaClass).
Pola ensiklopedia dapat menghindari sejumlah besar overhead kelas yang sangat mirip. Dalam pemrograman, kadang-kadang perlu untuk menghasilkan sejumlah besar instance kelas berbutir halus untuk mewakili data. Jika Anda dapat menemukan bahwa contoh -contoh ini pada dasarnya memiliki overhead yang sama kecuali untuk beberapa parameter, Anda dapat secara signifikan mengurangi jumlah kelas yang perlu dipakai. Jika parameter tersebut dapat dipindahkan di luar contoh kelas dan melewati mereka ketika metode dipanggil, jumlah instance individual dapat sangat dikurangi dengan berbagi.
Ada dua cara untuk menerapkan mode ensiklopedia di JavaScript. Yang pertama adalah menerapkannya pada lapisan data, terutama untuk sejumlah besar objek serupa dalam memori; Yang kedua adalah menerapkannya pada lapisan DOM, Encyclopedia dapat digunakan pada Central Event Manager untuk menghindari menambahkan pegangan acara ke setiap elemen anak dalam wadah induk.
Ada dua konsep penting dalam kelas terbang - status internal intrinsik dan eksternal ekstrinsik. Keadaan internal dikelola melalui metode internal dalam objek, dan informasi eksternal dapat dihapus atau disimpan secara eksternal.
Terus terang, ini pertama -tama mencubit model asli, dan kemudian menghasilkan model spesifik dengan karakteristik yang berbeda sesuai dengan berbagai kesempatan dan lingkungan. Jelas, objek baru yang berbeda perlu dihasilkan di sini, jadi mode pabrik sering muncul dalam mode kelas terbang. Keadaan internal kelas terbang digunakan untuk berbagi. Pabrik Flyweight bertanggung jawab untuk memelihara kolam renang kelas terbang (Mode Pool) untuk menyimpan benda dengan keadaan internal.
Kita dapat mengganti semua objek dengan keadaan internal yang sama dengan objek bersama yang sama, dan untuk membuat objek bersama seperti itu, metode pabrik singleton diperlukan alih -alih konstruktor normal. Ini dapat melacak masing -masing objek yang telah dipakai, sehingga objek baru dibuat hanya jika keadaan internal objek yang diperlukan berbeda dari objek yang ada. Keadaan eksternal objek disimpan dalam objek manajer. Saat memanggil metode objek, manajer akan melewati status eksternal ini sebagai parameter.
Simpan data suatu objek dalam dua objek yang berbeda (objek bersama, objek manajer)
1. Objek Bersama (Nikmati Objek Asli)
2. Metode Pabrik Singleton (Buat Objek Bersama)
3. Objek Manajer (Kelola Negara Eksternal)
Misalnya, sebuah buku di perpustakaan dapat diwakili oleh suatu objek, yang memiliki banyak atribut.
var book = fungsi (id, judul, penulis, genre, pagecount, publisherid, ISBN, checkOutDate, checkOutmember, duereturnDate, ketersediaan) {... // kode inisialisasi} book.prototype = {gettitle: function () {return this.title; }, ... // Perbarui metode status pinjaman UpdateCheckOutStatus: function (bookId, newstatus, checkOutDate, checkOutmember, newReturnDate) {...}, // pinjaman perpanjangan ExtagCheckoutPeriod: function (bookId, newReturnDate) {...}, / /Apakah itu dikeluarkan: bookId, function {...Program ini mungkin baik -baik saja di awal, tetapi seiring berjalannya waktu, buku dapat meningkat dalam jumlah besar, dan setiap jenis buku memiliki versi dan jumlah yang berbeda, Anda akan menemukan bahwa sistem semakin lambat dan lebih lambat. Ribuan objek buku dapat dibayangkan dalam memori, dan kita perlu menggunakan mode ensiklopedia untuk mengoptimalkan.
Kami dapat membagi data menjadi dua jenis data. Dalam buku yang sama, data yang terkait dengan objek buku (judul, penulis, dll.) Dapat dikaitkan dengan properti internal, sementara (CheckOutmember, DuereturnDate, dll.) Dapat dikaitkan dengan properti eksternal. Dengan cara ini, kode berikut dapat berbagi objek yang sama dalam buku yang sama, karena tidak peduli siapa yang meminjam buku, selama buku ini adalah buku yang sama, informasi dasarnya sama:
// objek bersama var book = fungsi (judul, penulis, genre, pagecount, publisherid, isbn) {this.title = title; this.author = penulis; this.genre = genre; this.pagecount = pagecount; this.publisherid = publisherid; this.isbn = isbn;};Mari kita tentukan pabrik dasar untuk memeriksa apakah objek buku itu dibuat sebelumnya, kembalikan jika ada, dan buat ulang dan simpan sehingga dapat terus mengakses nanti, yang memastikan bahwa kita hanya membuat satu objek untuk setiap buku:
/* Buku pabrik singleton*/var bookfactory = (function () {var exthingbooks = {}; return {createBook: function, title, worhor, genre, pagecount, publisherid, isbn) {/* temukan apakah akan membuat sebelumnya*/var yang ada = yang ada; iSbn]; if (if noing {ISBN] {{api) {{ISBN] {{{ISBN] {{ISBN] {{{ISBN], = buku baru, penulis, genre, pagecount, publishid, ISBN);Keadaan eksternal relatif sederhana. Kecuali untuk buku yang kami selenarkan, yang lainnya perlu dikelola di sini:
/*BookRecordManager Singleton for Borrow Management*/var BookRecordManager = (function(){ var bookRecordDatabase = {}; return{ /*Add a borrowing record*/ addBookRecord: function(id, title, author, genre, pageCount, publisherID,ISBN, checkoutDate, checkoutMember, dueReturnDate, availability){ var book = bookfactory.createbook (judul, penulis, genre, pagecount, publishid, ISBN); CheckOutMember, NewReturnDate) {Var Record = BookRecordDatabase [BookID] BookRecordDatabase [BookID] .duereturnDate = newReturnDate;Dengan cara ini, kami telah menyimpan informasi yang sama dari buku yang sama dalam objek BookManager dan hanya menyimpan satu salinan; Dibandingkan dengan kode sebelumnya, kita dapat menemukan bahwa itu menghemat banyak memori.
Kumpulan objek
Object Pool adalah solusi optimasi kinerja lain, yang memiliki beberapa kesamaan dengan mode Xiangyuan, tetapi tidak memisahkan keadaan internal dan keadaan eksternal.
Implementasi Kumpulan Objek Umum:
var objectPoolFactory = function (createObjfn) {var objectPool = []; // objek pool return {create: function () {// retrieve var obj = objectpool.length === 0? createobjfn.Apply (ini, argumen): objectpool.shift (); kembalikan obj; }, Recover: function (obj) {// retrieve objectpool.push (obj); }}};Sekarang gunakan ObjectPoolFactory untuk membuat kumpulan objek yang memuat beberapa iframe:
var iframefactory = objectPoolFactory (function () {var iframe = document.createelement ('iframe'); document.body.appendChild (iframe); iframe.onload = function () {iframe.onload = null; // cegah bug iframe loading iframe iframeFacory.onload = null; // cegah bugs iframe loading iframe iframefacory.ramecover. (ambil)}; // hubungi var iframe1 = iframefactory.create (); iframe1.src = 'http://www.qq.com';Referensi: "pola javascript" "pola desain javascript dan praktik pengembangan"
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.