En JavaScript, los navegadores, especialmente los navegadores en dispositivos móviles, asignan una memoria muy limitada, y cómo guardar la memoria se ha convertido en algo muy significativo. Una forma efectiva de guardar la memoria es reducir la cantidad de objetos.
El modo de peso mosca (peso mosca) ejecuta la tecnología para compartir para soportar efectivamente una gran cantidad de objetos de grano fino, evitando la sobrecarga de una gran cantidad de clases pequeñas con el mismo contenido (como el consumo de memoria) y permitiendo a todos compartir una clase (metaclase).
El patrón de la enciclopedia puede evitar una gran cantidad de sobrecarga de clases muy similares. En la programación, a veces es necesario producir una gran cantidad de instancias de clase de grano fino para representar datos. Si puede encontrar que estas instancias tienen básicamente la misma sobrecarga, excepto por algunos parámetros, puede reducir significativamente el número de clases que deben ser instanciadas. Si esos parámetros se pueden mover fuera de la instancia de clase y los pasan cuando se llama al método, el número de instancias individuales puede reducirse enormemente al compartir.
Hay dos formas de aplicar el modo Enciclopedia en JavaScript. El primero es aplicarlo en la capa de datos, principalmente a una gran cantidad de objetos similares en la memoria; El segundo es aplicarlo en la capa DOM, la enciclopedia se puede usar en el gerente de eventos centrales para evitar agregar manijas de eventos a cada elemento infantil en el contenedor principal.
Hay dos conceptos importantes en el peso mosca: estado interno intrínseco y de estado externo extrínseco. El estado interno se gestiona a través de métodos internos en el objeto, y la información externa se puede eliminar o guardar externamente.
Para decirlo sin rodeos, primero es pellizcar un modelo original y luego producir modelos específicos con diferentes características de acuerdo con diferentes ocasiones y entornos. Obviamente, se deben generar diferentes objetos nuevos aquí, por lo que el modo de fábrica a menudo aparece en el modo de peso mosca. El estado interno del peso mosca se usa para compartir. Flyweight Factory es responsable de mantener una piscina de peso mosca (grupo de modos) para almacenar objetos con estado interno.
Podemos reemplazar todos los objetos con el mismo estado interno con el mismo objeto compartido, y para crear un objeto de este tipo compartido, se requiere un método de fábrica singleton en lugar de un constructor normal. Esto puede rastrear objetos individuales que se han instanciado, de modo que se crea un nuevo objeto solo si el estado interno del objeto requerido es diferente del objeto existente. El estado externo del objeto se guarda en un objeto de administrador. Al llamar al método del objeto, el administrador pasará estos estados externos como parámetros.
Guardar los datos de un objeto en dos objetos diferentes (objeto compartido, objeto del administrador)
1. Objeto compartido (disfruta del objeto original)
2. Método de fábrica Singleton (crear un objeto compartido)
3. Objeto del gerente (Administrar el estado externo)
Por ejemplo, un libro en una biblioteca puede ser representado por un objeto, que tiene muchos atributos.
var book = function (id, título, autor, género, pageCount, PublisherId, ISBN, checkoutDate, checkout miembro, duraTurnDate, disponibilidad) {... // código de inicialización} book.prototype = {getTitle: function () {return this.title; }, ... // Actualice el método de estado de préstamos updateCeckoutStatus: function (bookID, newStatus, checkoutDate, checkout miembro, newreturnDate) {...}, // renovar ExtendCheckoutPeriod: function (bookID, newReturnDate) {...}, // si expira a Ispastdue: function (bookid) {}}}}}}}El programa puede estar bien al principio, pero a medida que pasa el tiempo, los libros pueden aumentar en grandes cantidades, y cada tipo de libro tiene diferentes versiones y cantidades, encontrará que el sistema se está volviendo cada vez más lento. Se pueden imaginar miles de objetos de libros en la memoria, y necesitamos usar el modo Enciclopedia para optimizar.
Podemos dividir los datos en dos tipos de datos. En el mismo libro, los datos relacionados con los objetos del libro (título, autor, etc.) pueden atribuirse a propiedades internas, mientras que (miembro de pago, duraTurndate, etc.) se pueden atribuir a propiedades externas. De esta manera, el siguiente código puede compartir el mismo objeto en el mismo libro, porque no importa quién toma el libro, siempre y cuando el libro sea el mismo libro, la información básica es la misma:
// objeto compartido var book = function (título, autor, género, pageCount, PublisherId, ISBN) {this.title = title; this.author = autor; this.genre = género; this.pageCount = pageCount; this.PublisherId = PublisherId; this.isbn = isbn;};Definamos una fábrica básica para verificar si el objeto del libro se creó antes, regrese si lo existe, y recrearlo y almacenarlo para que pueda continuar accediendo más tarde, lo que asegura que solo creemos un objeto para cada libro:
/* Book fábrica singleton*/var bookFactory = (function () {var existenteBooks = {}; return {createBook: function (title, autor, género, pageCount, publisherID, isbn) {/* busque si a no hacer antes*/var existir book = eSceptEnbooks [isbn]; if (existentebook) {return existente;} más {/* si no, crea un libro existente y salvo un books. Libro (Título, Autor, Género, PageCount, PublisherID, ISBN);El estado externo es relativamente simple. Excepto por el libro que encapsulamos, todo lo demás debe administrarse aquí:
/*BookRecordManager Singleton para la gestión de préstamos*/var bookRecordManager = (function () {var bookRecordDatabase = {}; return {/*Agregar un registro de préstamo*/addBookRecord: function (id, título, autor, género, pageCount, publisherid, ISBN, checkoutdate, checkoutmember, duercurnDate, designe, book = {var Book = BookFactory.CreateBook (Título, Autor, Género, PageCount, PublisherID, ISBN); GAYA DE LA CONJUNTA, NewReturnDate) {Var Record = BookRecordDatabase [BookID]; bookRecordDatabase [bookID] .DuereturnDate = newreturnDate;De esta manera, hemos guardado la misma información del mismo libro en un objeto Bookmanager y hemos guardado solo una copia; En comparación con el código anterior, podemos encontrar que ahorra mucha memoria.
Piscina de objetos
El grupo de objetos es otra solución de optimización del rendimiento, que tiene algunas similitudes con el modo Xiangyuan, pero no separa el estado interno y el estado externo.
Implementación general del grupo de objetos:
var objectPoolFactory = function (createObJfn) {var objectPool = []; // Object Pool Return {create: function () {// recuperar var obj = objectPool.length === 0? createObjfn.apply (this, argumentos): objectpool.hift (); regresar obj; }, recuperar: function (obj) {// recuperar objectpool.push (obj); }}};Ahora use ObjectPoolFactory para crear un grupo de objetos que cargue algunos iframes:
var iframeFactory = ObjectPoolFactory (function () {var iframe = document.createElement ('iframe'); document.body.appendChild (iframe); iframe.onload = function () {iframe.onload = null; // bugs of iframe ifRameFactory.CoCover (ifRame); return iframe;}); // llamar var iframe1 = iframeFactory.create (); iframe1.src = 'http://www.qq.com';Referencias: "Patrón de JavaScript" "JavaScript Patrón de diseño y práctica de desarrollo"
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.