Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 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