Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 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), които трябва да следят събитието на кликването, тогава трябва да свържем всеки още елемент за event binding; ако има много, много елементи, производителността може да се представи, и в комбинация с познанията за bubbling, ако някой детски елемент има тригер за събитие, събитието ще се превърне в по-високия елемент след задействане, така че използвайки тази функция, можем да използваме режим Xiangyuan. Можем да наблюдаваме събитията на родителските елементи на тези подобни елементи и след това да определим кой дъщерен елемент има задействано събитие, преди да продължим с по-нататъшни операции.

Тук ще комбинираме методите на jQuery за свързване/развързване като пример.

HTML:



JavaScript:



Пример 2: Прилагане на режима Xiangyuan за подобряване на производителността

Друг пример, все още свързан с 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