|
|
Publicado en 30/7/2018 10:30:45
|
|
|

Introducción
El modo flyweight soporta eficazmente un gran número de objetos de grano fino ejecutando tecnología de compartida, evitando la sobrecarga de muchas clases pequeñas con el mismo contenido (como consumir memoria) y permitiendo que todos compartan una clase (metaclase).
En programación, a veces es necesario producir un gran número de instancias de clase de grano fino para representar datos, y si se puede encontrar que estas instancias tienen básicamente la misma sobrecarga salvo por unos pocos parámetros, el número de clases que necesitan instanciarse puede reducirse considerablemente. Si puedes mover esos parámetros fuera de la instancia de clase y pasarlos cuando se llama al método, puedes reducir mucho el número de instancias individuales compartiéndolas.
¿Y qué si aplicas el modo meta en JavaScript? Hay dos formas: la primera se aplica a la capa de datos, principalmente a un gran número de objetos similares en memoria; La segunda se aplica a la capa DOM, que puede usarse en el gestor central de eventos para evitar asociar manillas de evento a cada elemento hijo del contenedor padre.
Disfruta del metaverso y las capas de datos
Hay dos conceptos importantes en Flyweight: estado interno intrínseco y estado externo extrínseco, el estado interno se gestiona en el objeto mediante métodos internos, y la información externa puede eliminarse o guardarse externamente.
Para decirlo claramente, primero se trata de pinzar un modelo original, luego con diferentes ocasiones y entornos, y después producir modelos específicos con sus propias características; obviamente, aquí hay que generar objetos nuevos diferentes, así que el modo fábrica suele aparecer en el modo Peso Mosca, se usa el estado interno del Peso Mosca para compartir, y la fábrica de Peso Mosca es responsable de mantener un pool de Peso Mosca (pool de patrones) para almacenar los objetos del estado interno.
Usa el modo Yuanyuan
Demuestremos que si tuviéramos una biblioteca para gestionar todos los libros, los metadatos de cada libro serían tentativamente así:
ID Título Autor Género Número de páginas ID del editor ISBN También debemos definir cuándo y por quién se prestó cada libro, así como la fecha de devolución y disponibilidad:
Fecha de salida checkoutMember DueReturnDate Disponibilidad Como el objeto libro está configurado con el siguiente código, tenga en cuenta que el código aún no ha sido optimizado:
El programa puede estar bien al principio, pero con el tiempo, el número de libros puede aumentar en grandes cantidades, y cada libro tiene una versión y cantidad diferentes, y verás que el sistema se vuelve cada vez más lento. Se pueden imaginar miles de objetos libro en la memoria, y necesitamos optimizarlos con el modo de compartir.
Podemos dividir los datos en dos tipos de datos: internos y externos, y los datos relacionados con el objeto libro (título, autor, etc.) pueden atribuirse a atributos internos, mientras que (checkoutMember, dueReturnDate, etc.) pueden atribuirse a atributos externos. De este modo, el siguiente código puede compartir el mismo objeto en el mismo libro, porque no importa quién tome prestado el libro, mientras el libro sea el mismo, la información básica es la misma:
Definir la fábrica básica
Definamos una fábrica básica para comprobar si el objeto del libro fue creado antes, devolverlo si lo hay, y recrearlo y almacenarlo si no, lo que asegura que solo creemos un objeto para cada tipo de libro:
Gestionar el estado externo
El estado externo es relativamente sencillo, excepto por el libro que encapsulamos, todo lo demás debe gestionarse aquí:
De este modo, podemos guardar la misma información del mismo libro en un objeto bookmanager, y solo una copia; En comparación con el código anterior, se puede encontrar que se guarda mucha memoria.
Disfruta del modo meta y del DOM
No voy a decir mucho sobre el incidente de burbujas en el DOM aquí, creo que todo el mundo ya lo sabe, pongamos dos ejemplos.
Ejemplo 1: Gestión centralizada de incidentes Por ejemplo, si tenemos muchos tipos similares de elementos o estructuras (como menús, o varios li en ul) que necesitan monitorizar su evento de clic, entonces necesitamos vincular cada elemento más para vincular eventos; si hay muchísimos elementos, entonces el rendimiento se puede imaginar, y combinado con el conocimiento del burbujeo, si algún elemento hijo tiene un desencadenante de evento, el evento burbujeará al elemento superior tras el disparo, así que usando esta función podemos usar el modo Xiangyuan. Podemos monitorizar los eventos de los elementos padres de estos elementos similares y luego determinar qué elemento hijo tiene un evento activado antes de continuar con las operaciones.
Aquí combinaremos los métodos bind/unbind de jQuery como ejemplo.
HTML:
JavaScript:
Ejemplo 2: Aplicar el modo Xiangyuan para mejorar el rendimiento
Otro ejemplo, aún relacionado con jQuery, generalmente usamos el objeto elemento en la función de callback del evento, a menudo usamos la forma $(this), de hecho, crea repetidamente un nuevo objeto, porque esto en la función de callback ya es el elemento DOM en sí, debemos usar el siguiente código:
De hecho, si tenemos que usar algo como $(this), también podemos implementar nuestra propia versión del patrón de instancia única, por ejemplo, podemos implementar una función como jQuery.signle(this) para devolver el propio elemento DOM:
Cómo usar:
Esto devuelve el elemento DOM tal cual, sin crear un objeto jQuery.
resumen
El modo Flyweight es un modo que mejora la eficiencia y el rendimiento del programa, lo que acelerará considerablemente la velocidad de ejecución del programa. Hay muchas aplicaciones: por ejemplo, si quieres leer una serie de cadenas de una base de datos, muchas de las cuales son duplicadas, entonces podemos almacenar esas cadenas en un pool Flyweight.
Si una aplicación utiliza un gran número de objetos, y este gran número de objetos genera mucha satisfacción en el almacenamiento, debería considerar usar el modo compartido; Si eliminas el estado externo del objeto, puedes reemplazar muchos grupos de objetos por relativamente pocos objetos compartidos, y puedes considerar usar el modo Xiangyuan.
Dirección de referencia:http://www.addyosmani.com/resour ... ok/#detailflyweight
|
Anterior:Recomiendo 3 páginas web para encontrar iconos de iconosPróximo:NúmeroDeMensajesPendientes, MensajesEnqueueados, Mensajes...
|