JavaScript에서 브라우저, 특히 모바일 장치의 브라우저는 메모리를 매우 제한된 메모리를 할당하며 메모리를 저장하는 방법은 매우 의미있는 일이되었습니다. 메모리를 저장하는 효과적인 방법은 객체 수를 줄이는 것입니다.
Flyweight Mode (Flyweight)는 공유 기술을 실행하여 많은 수의 세밀한 물체를 효과적으로 지원하여 동일한 콘텐츠 (예 : 메모리 소비)를 가진 많은 수의 작은 클래스의 오버 헤드를 피하고 모든 사람이 클래스 (메타 클래스)를 공유 할 수 있도록합니다.
백과 사전 패턴은 많은 수의 매우 유사한 오버 헤드를 피할 수 있습니다. 프로그래밍에서는 때때로 데이터를 표현하기 위해 많은 수의 세밀한 클래스 인스턴스를 생성해야합니다. 이러한 인스턴스가 기본적으로 몇 가지 매개 변수를 제외하고 기본적으로 동일한 오버 헤드를 발견하면 인스턴스화 해야하는 클래스 수를 크게 줄일 수 있습니다. 해당 매개 변수를 클래스 인스턴스 외부에서 이동하여 메소드를 호출 할 때 전달할 수있는 경우 공유에 의해 개별 인스턴스의 수를 크게 줄일 수 있습니다.
JavaScript에서 백과 사전 모드를 적용하는 두 가지 방법이 있습니다. 첫 번째는 데이터 계층에 주로 메모리의 많은 유사한 객체에 적용하는 것입니다. 두 번째는 DOM 레이어에 적용하는 것입니다. 백과 사전은 중앙 이벤트 관리자에 사용하여 부모 컨테이너의 각 어린이 요소에 이벤트 핸들을 추가하지 않도록 할 수 있습니다.
Flyweight에는 내부 상태 내재 및 외부 상태 외부의 두 가지 중요한 개념이 있습니다. 내부 상태는 객체의 내부 메소드를 통해 관리되며 외부 정보를 외부에서 삭제하거나 저장할 수 있습니다.
무뚝뚝하게 말하면 먼저 원래 모델을 꼬집어 다른 경우와 환경에 따라 다른 특성을 가진 특정 모델을 생성하는 것입니다. 분명히 여기에서 다른 새로운 객체를 생성해야하므로 공장 모드는 종종 플라이급 모드에 나타납니다. 플라이급 내부 상태는 공유하는 데 사용됩니다. Flyweight Factory는 Flyweight Pool (Mode Pool)을 유지하여 객체를 내부 상태에 보관할 책임이 있습니다.
모든 객체를 동일한 내부 상태로 교체하고 공유 객체를 생성하려면 일반 생성자 대신 싱글 톤 공장 방법이 필요합니다. 이것은 인스턴스화 된 개별 객체를 추적 할 수 있으므로 필요한 객체의 내부 상태가 기존 객체와 다른 경우에만 새 객체가 생성됩니다. 객체의 외부 상태는 관리자 객체에 저장됩니다. 객체의 방법을 호출 할 때 관리자는 이러한 외부 상태를 매개 변수로 전달합니다.
객체의 데이터를 두 개의 다른 객체 (공유 객체, 관리자 개체)로 저장합니다.
1. 공유 객체 (원래 개체 즐기기)
2. Singleton Factory Method (공유 객체 생성)
3. 관리자 객체 (외부 상태 관리)
예를 들어, 라이브러리의 책은 많은 속성을 가진 객체로 표시 될 수 있습니다.
var book = function (ID, 제목, 저자, 장르, PageCount, PublishErid, ISBN, CheckoutDate, CheckoutMember, DuereturnDate, 가용성) {... // 초기화 코드} book.prototype = {getTitle : {return this.title; }, ... // 대출 상태를 업데이트하십시오. update updateCheckoutStatus : function (BookId, NewStatus, CheckoutDate, CheckoutMember, NewReturnDate) {...}, // rene -rengeCheckoutPeriod : function (bookid, newreturnDate) {...}, // ispastdue : function (bookid)}프로그램은 처음에는 괜찮을 수 있지만 시간이 지남에 따라 책은 대량으로 증가 할 수 있으며 각 유형의 책마다 버전과 수량이 다르므로 시스템이 느려지고 느리게 진행되고 있음을 알게됩니다. 수천 개의 책 객체를 메모리에서 상상할 수 있으며 백과 사전 모드를 사용하여 최적화해야합니다.
데이터를 두 가지 유형의 데이터로 나눌 수 있습니다. 같은 책에서 책 객체 (제목, 저자 등)와 관련된 데이터는 내부 속성에 기인 한 반면 (CheckoutMember, DuereturnDate 등)는 외부 속성에 기인 할 수 있습니다. 이런 식으로, 다음 코드는 같은 책에서 동일한 객체를 공유 할 수 있습니다. 책을 빌려주는 사람이라면 책이 같은 책인 경우 기본 정보는 동일하기 때문입니다.
// 공유 객체 var book = function (제목, 저자, 장르, PageCount, PublishErid, ISBN) {this.title = title; this.author = 저자; this.genre = 장르; this.pagecount = pagecount; this.publisherid = publisherid; this.isbn = isbn;};기본 공장을 정의하여 책의 객체가 이전에 만들어 졌는지,있는 경우 반환하고, 다시 액세스 할 수 있도록 재현하고 저장하여 각 책에 대해 하나의 객체 만 생성 할 수 있도록하겠습니다.
/* 책 공장 싱글 톤*/var bookfactory = (function () {var 기존 책 = {}; return {createbook : function (title, author, 장르, 장르, pagecount, publisherid, isbn) {/* 이전에 만들 것인지*/var 기존 책 = isbn]; if (기존 책)} else {/*/saver book; 새 책 (제목, 장르, PageCount, ISBN);외부 상태는 비교적 간단합니다. 우리가 캡슐화 한 책을 제외하고는 다른 모든 것을 여기에서 관리해야합니다.
/*차용 관리를위한 BookRecordManager Singleton*/var bookrecordmanager = (function () {var bookrecordDatabase = {}; return {/*add a bronming record*/addBookRecord : 기능, 제목, 제목, 장르, pagecount, publisherid, isbn, checkoutdate, checkoutmember, checkoutmember. bookfactory.createbook (제목, 저자, 장르, pagecount, publisherid, isbn); checkoutmember) {var record = record.checkoutdate = checkoutmember; BookRecordDatabase [BookId] .duereturndate = ispastdue;이런 식으로, 우리는 동일한 책의 동일한 정보를 BookManager 개체에 저장하고 하나의 사본 만 저장했습니다. 이전 코드와 비교하여 많은 메모리를 저장한다는 것을 알 수 있습니다.
객체 풀
Object Pool은 Xiangyuan 모드와 약간의 유사성을 갖지만 내부 상태와 외부 상태를 분리하지는 다른 성능 최적화 솔루션입니다.
일반 객체 풀 구현 :
var ObjectPoolFactory = function (createObjfn) {var ObjectPool = []; // 객체 풀 리턴 {create : function () {// var obj = ObjectPool.length === 0? createobjfn.apply (this, arguments) : ObjectPool.shift (); 반환 obj; }, 복구 : function (obj) {// ObjectPool.push (obj); }}};이제 ObjectPoolFactory를 사용하여 일부 iframes를로드하는 객체 풀을 만듭니다.
var iframeFoolFactory (function () {var iframe = document.createElement ( 'iframe'); document.body.appendChild (iframe); iframe.onload = function () {iframe.onload = null; // iframefactory.recover (iframe)의 버그를 방지; 반환 iframe;}); // 호출 var iframe1 = iframeFactory.create (); iframe1.src = 'http://www.qq.com';참고 문헌 : "JavaScript Pattern" "JavaScript 디자인 패턴 및 개발 실습"
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.