JavaScript設計模式之性能優(yōu)化模式享元模式
前言
享元設計模式是用于性能優(yōu)化的模式,這種設計模式的核心在于可以共享技術并支持對大量細分過后的對象進行調整,如果系統(tǒng) 中因為創(chuàng)建大量類似的對象而導致內存占用過高,享元設計模式在其中就會起到非常重要的作用,因為它可以使其減少重復創(chuàng)建相同類似的實例對象。在JavaScript中瀏覽器特別是移動端的瀏覽器部分所能夠使用的內存并不是很多,所以在其中節(jié)省內存就變得至關重要
案例
假設有一個服裝廠,目前的產品擁有20種男士衣服和20種女士衣服,為了提高衣服產品銷量,服裝廠決定生產一些塑料模特來穿上他們的衣服拍成廣告照片進行宣傳。正常情況下需要20個男模特和20個女模特,然后讓他們每一個模特都穿上一件內衣來在進行拍照。我們來實現一下
創(chuàng)建一個模特實例,該模特實例接收倆個參數,sex是指男模特還是女模特,name是衣服的編號,擁有一個拍照方法take,調用此方法則會進行拍照
class?Model{ ???????constructor(sex,name){ this.sex=sex; this.name=name; ???????} ???????take(){ ???????????console.log(`進行拍照,性別:${this.sex},衣服編號:${this.name}`); ???????} ???}
使用:
???for?(let?index?=?0;?index?<=?20;?index++)?{ ??????var?male=new?Model('male',index); ??????var?female=new?Model('female',index); ??????male.take(); ??????female.take(); ???}
如上操作,現在一共有20套男士衣服和20套女士衣服,所以會產生40個對象,如果將來我們生產了100種,1000種衣服,程序可能還沒有創(chuàng)建夠這么多實例就已經提前崩潰,我們來考慮下如何進行優(yōu)化這個場景,雖然有40種衣服,但是我們并不需要20個男模特和20個女模特,其實男女模特各自擁有一個就可以了,他們可以分別穿上不同的衣服進行拍照,然后再更換其他衣服在進行拍照,以此往復
我們男女模特各創(chuàng)建一個實例,然后通過更換衣服的編號在進行拍照,最后我們只創(chuàng)建了倆個實例就完成了之前的功能
var?male=new?Model('male'); ?var?female=new?Model('female'); for?(let?index?=?0;?index?<=?20;?index++)?{ ????male.name=index; ????female.name=index; ??? ?male.take(); ??????female.take(); ???}
享元設計模式的狀態(tài)
享元設計模式狀態(tài)分為內部狀態(tài)和外部狀態(tài),內部狀態(tài)是可以被存儲于對象內部且被共享的,外部狀態(tài)獨立于具體的場景,一般無需改變,他可以根據場景進行變化,不過她是不可被共享的
享元設計模式的狀態(tài)我們可以使用我們做過的案例來進行描述,性別是內部狀態(tài),而服裝是外部狀態(tài),通過區(qū)分這倆種狀態(tài),大大減少了系統(tǒng)中的對象數量,一般內部狀態(tài)有多少種組合,系統(tǒng)中便會存在多少個對象,因為一般只有男女倆種性別,所以我們這里只需要倆個實例對象
享元設計模式在需要到大量重復且相同實例的時候進行使用,能夠減少對內存的大量消耗
到此這篇關于JavaScript設計模式之性能優(yōu)化模式享元模式的文章就介紹到這了,更多相關JavaScript享元模式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Javascript的promise,async和await的區(qū)別詳解
這篇文章主要為大家詳細介紹了Javascript的promise,async和await的區(qū)別,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03基于函數執(zhí)行的踩坑(addEventListener)
這篇文章主要介紹了基于函數執(zhí)行的踩坑(addEventListener),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01