Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 9589|Ответ: 0

[JavaScript] Получите глубокое понимание Javascrip{filter}t: мета-режима шаблона проектирования

[Скопировать ссылку]
Опубликовано 30.07.2018 10:30:45 | | |
Знакомство

Режим Flyweight эффективно поддерживает большое количество мелкозернистых объектов, используя технологию совместного использования, избегая накладных расходов большого количества небольших классов с одинаковым содержанием (например, потребление памяти) и позволяя всем пользоваться одним классом (мета-класс).

В программировании иногда необходимо создавать большое количество мелкозернистых экземпляров классов для представления данных, и если вы обнаружите, что эти экземпляры имеют практически одинаковые накладные расходы, за исключением нескольких параметров, количество классов, требующих создания классов, можно значительно сократить. Если вы сможете переместить эти параметры за пределы экземпляра класса и передать их при вызове метода, вы сможете значительно сократить количество отдельных экземпляров за счёт совместного использования.

А что если применить мета-режим в JavaScript? Существует два способа: первый применяется к слою данных, главным образом к большому числу похожих объектов в памяти; Второй применяется к DOM-слою, который можно использовать в центральном менеджере событий, чтобы избежать прикрепления дескрипторов событий к каждому дочернему элементу в родительском контейнере.

Наслаждайтесь метавселенной и слоями данных

В Flyweight есть два важных понятия — внутреннее состояние и внешнее состояние, внутреннее состояние управляется в объекте внутренними методами, а внешняя информация может быть удалена или сохранена внешне.

Проще говоря, сначала нужно занять оригинальную модель, затем с разными случаями и окружениями, а затем создать конкретные модели с их собственными характеристиками, очевидно, что здесь нужно генерировать новые объекты, поэтому заводской режим часто появляется в режиме Flyweight, внутреннее состояние Flyweight используется для совместного использования, а фабрика Flyweight отвечает за поддержку пула Flyweight (пула шаблонов) для хранения объектов внутреннего состояния.

Используйте режим Юаньюань

Давайте покажем, что если бы у нас была библиотека, управляющая всеми книгами, метаданные каждой книги были бы примерно так:

ID
Титул
Автор
Жанр
Количество страниц
Идентификатор издателя
ISBN

Также нужно определить, когда и кем была взята каждая книга, а также дату возврата и наличие:

Дата оформления заказа
кассаЧлен
dueReturnDate
Доступность

Поскольку объект книги установлен на следующий код, обратите внимание, что код ещё не оптимизирован:


Сначала программа может показаться нормальной, но со временем количество книг может значительно увеличиваться, у каждой книги своя версия и объём, и вы заметите, что система становится всё медленнее и медленнее. Тысячи книжных объектов в памяти можно представить, и нам нужно оптимизировать их с помощью режима совместного использования.

Данные можно разделить на два типа данных: внутренние и внешние, а данные, связанные с объектом книги (название, автор и т.д.), могут быть отнесены к внутренним атрибутам, а (checkoutMember, dueReturnDate и др.) — к внешним атрибутам. Таким образом, следующий код может использовать один и тот же объект в одной книге, потому что независимо от того, кто берёт книгу, пока книга одна и та же книга, основная информация остаётся одинаковой:



Определим базовую фабрику

Давайте определим базовую фабрику, чтобы проверить, был ли объект книги создан раньше, вернуть, если есть, и воссоздать и сохранить его, если нет, что гарантирует, что мы создадим объект только для каждого типа книги:



Управление внешним статусом


Внешнее состояние относительно простое, за исключением книги, которую мы инкапсулировали, всё остальное нужно управлять здесь:



Таким образом, мы можем сохранить ту же информацию из той же книги в bookmanager объекте и только одну копию; По сравнению с предыдущим кодом, можно заметить, что много памяти сохраняется.

Наслаждайтесь мета-режимом и DOM


Я не буду много говорить об инциденте с пузырьками в DOM, думаю, все уже знают, давайте приведу два примера.

Пример 1: Централизованное управление инцидентами
Например, если у нас есть много похожих типов элементов или структур (например, меню или несколько li в ul), которые должны отслеживать событие клика, то нужно привязывать каждый дополнительный элемент для привязки событий; если элементов очень, очень много, то производительность можно представить, и в сочетании с знаниями о пузырьках, если у любого дочернего элемента есть триггер события, то событие пузырится к более высокому элементу после триггера, поэтому, используя эту функцию, можно использовать режим Сяньюань. Мы можем отслеживать события родительских элементов этих похожих элементов, а затем определить, в каком дочернем элементе заработано событие, прежде чем приступать к дальнейшим операциям.

Здесь мы объединим методы привязывания/развязывания в jQuery в качестве примера.

HTML:



JavaScript:



Пример 2: Примените режим Сяньюань для улучшения производительности

Другой пример, всё ещё связанный с jQuery: обычно мы используем объект элемента в функции обратного вызова события, часто используем форму $(this), на самом деле он неоднократно создаёт новый объект, поскольку этот элемент в функции обратного вызова уже является самим элементом DOM, мы должны использовать следующий код:



На самом деле, если нам нужно использовать что-то вроде $(this), мы можем реализовать собственную версию шаблона с одним экземпляром, например, можно реализовать функцию вроде jQuery.signle(this), чтобы вернуть сам элемент DOM:



Как использовать:



Это возвращает сам элемент DOM в его состоянии, без создания объекта jQuery.

сводка


Режим Flyweight — это режим, который повышает эффективность и производительность программы, что значительно ускоряет её беговую скорость. Существует множество применений: например, если вы хотите прочитать серию строк из базы данных, многие из которых дубликаты, мы можем хранить эти строки в пуле Flyweight.

Если приложение использует большое количество объектов, и это большое количество объектов приносит значительное удовлетворение с хранением, ему следует рассмотреть возможность использования режима совместного использования; Если удалить внешнее состояние объекта, можно заменить многие группы объектов относительно небольшим числом общих объектов, а также рассмотреть вариант использования режима Сяньюань.

Адрес для справки:http://www.addyosmani.com/resour ... ok/#detailflyweight





Предыдущий:Рекомендую 3 сайта для поиска иконок иконок
Следующий:Количество ожидающих сообщений, сообщений в очереди, сообщений...
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com