2012-04-17 3 views
5

자바 초보자 중 일부가 대답 할 수 있다고 생각했습니다.여러 Mootools 인스턴스로 인한 성능 오버 헤드 클래스

Mootools에서 여러 클래스를 생성 할 때 예상되는 DOM 오버 헤드는 얼마입니까?

좋은 OO 디자인은 코드의 재사용 가능한 비트가 클래스에 있어야한다는 것을 나타냅니다. 그러나 mootools의 모든 생성 된 클래스는 "클래스"에서 명시 적으로 상속되므로 물론 많은 인스턴스가 추가로 생성됩니다.

내 철학적 인 질문은 모든 코드가 인스턴스화 된로드와 예를 들어 배열의 수백 또는 수천 개의 클래스가있는 DTO 패턴을 사용하여 브라우저의 성능에 어느 정도 영향을 미칩니 까? 간단한 개체.

Ponderously, 마이클

+0

DOM 오버 헤드는 무엇입니까? 클래스는 객체이고 DOM에 아무 것도 만들지 않으면 발자국은 거기에 가지 않습니다. 오브젝트는 참조에 의해 전달되고 상속은 다른 오브젝트에서 복사되지 않습니다 ('implement'이 아니라면 오브젝트 키를 복사합니다). 당신의 유스 케이스는 무엇입니까? 수백 또는 수천 개의 수업이 반 패턴처럼 보입니다. 가장 큰 발자국은 생성/처리 시간뿐만 아니라 모든 방법 랩핑이 될 것입니다 ... 귀하의 요구 사항을 조금 자세히 설명하십시오 –

+0

의견을 보내 주셔서 감사합니다. 필자가 생각한 유스 케이스는 서버의 데이터 세트를 DTO 객체로 매핑하는 것이다. 이 목록의 길이는 제한되지 않습니다. 그래서 나는 {} 스타일의 배열을 가지지 않고 각각에 대해 예를 들어 PostCodeDTO의 인스턴스를 만들어 배열에 대신 넣는다고 생각합니다. 기본적으로 클래스의 속성 mixin을 사용하여 DTO 객체에 반환 항목을 래핑하고 getter 및 setter 등을 사용하여 프로 버 DTO를 만듭니다. –

+0

은 [shipyard] (https://github.com/seanmonstar/)와 같은 것을 사용할 수있는 것처럼 들립니다. Shipyard) 또는 [neuro] (https://github.com/GCheung55/Neuro) 또는 Ember 또는 Backbone - 모델 -> 컬렉션 구조를 사용하고 모델을 정의한 다음 어떤 목적 으로든 컬렉션 및 수확 이벤트에서 처리하도록 할 수 있습니다 /보기. –

답변

1

오른쪽. 여기 내가 어떻게 이것을 볼 수 있습니다. 가장 먼저, @keeto에서 인용 :

고급

''마지막 부분 체류가 중요합니다. 클래스는 모듈 식 코드를 구현하는 좋은 방법이지만,이를 수행하는 유일한 방법은 아닙니다. 요즘 일부 개발자는 모든 것을 위해 클래스를 사용하는 경향이 있다는 것을 알게되었습니다. 속담 망치와 마찬가지로 모든 코딩 못에 클래스가 사용되고 있습니다. 불행한 것은 모든 것이 클래스가 아니기 때문입니다.

클래스는 프로젝트 전체에서 사용할 수있는 재사용 가능한 코드를 만드는 데 적합하며 개인적으로 그 기준에 충실합니다. 내가 만들고있는 어떤 것이 두 번 이상 사용될 것이라는 확신이 들지 않는다면, 나는 그것을 수업으로 바꾸지 않을 것입니다. 그리고 눈치 채지 못했을 경우, 하나의 커스텀 클래스를 정의 할 필요없이 MooTools를 사용할 수 있습니다. 결국, MooTools 클래스가 있기 때문에 이 자바처럼 자바 스크립트로 코딩해야한다는 것을 의미하지는 않습니다. * ''


출처 : http://keetology.com/blog/2010/10/01/modules-and-callbacks-going-hollywood-with-mootools

이 그것이 크게 당신이 일반적으로 귀하의 클래스와 자바 스크립트를 작성하는 방법에 따라 달라집니다로 매우 주관적이다.

클래스를 사용하면 페널티와 오버 헤드가 발생하지 않습니다. 인스턴스화하는 클래스의 유형에 따라 다르기도합니다. 예를 들어, 클래스가 다른 객체를 건드리지 않거나 DOM에 출력하지 않는 단순한 데이터 추상화라면 인스턴스를 만드는 것이 상대적으로 저렴합니다. 비용은 처리 옵션 객체와 (때때로) 인스턴스 생성자에 속성을 복사 할 때 발생합니다. 클래스 정의 자체 동안

는, Mootools의 모든 생성자 개체 속성을 통해 루프를 수행하고 모든 특별한 사람과 뮤 테이터를 처리하려고합니다 (예를 들어, initialize, Implements, Extends, binds (등) - 더 많은로부터). 이것은 일회성이다. 생성자 함수가 만들어지면 빨리 사용할 수 있습니다.

또한 함수 값이있는 모든 속성을 래핑하여 개인 API로 (현재 API에서는 .protect()을 통해) 장식 할 수 있으므로 실행하는 모든 기능이 사용자를 대신해 커밋됩니다. 또한 메서드 장식자로도 .bind()을 사용하는 경향이 있습니다. 이는 실제로 실행되는 실제 코드에 대해 2 개의 래퍼를 의미합니다.

클래스가 복잡할수록 (다른 클래스 프로토 타입에서 확장 및 구현) 클래스의 인스턴스를 만드는 데 더 많은 작업이 필요할 수 있습니다. 실제로는 메모리 할당 (시작 또는 가비지 수집 지연) 이외의 것으로 이것을 알기 위해서는 절대 괴물을 만들어야합니다. 물론, 생성자 함수에서 cpu-heavy 또는 async/blocking stuff는 좋지 않을 것입니다. ...

이벤트, 이벤트 리스너 등도 쌓일 수 있습니다. 개체에 대한 저장된 참조가 시간이 지남에 따라 스택됩니다.

그런 다음

는 모두 함께 넣고는 다소 비용이 많이 드는 될 수 있습니다 ... 요소를 DOM 이벤트를 추가, 자신의 이벤트를 내보낼 이벤트를 수신하기 위해 결합 클래스가 있습니다. 여러 곳에서 프로토 타입 체인을 통해 참조로 상속받은 객체를 만들고 있습니다. 그럼에도 불구하고 클래스 생성자 자체의 정의는 빠르며, 여러분이 1000s 인스턴스를 만들어서 재미있는 일이 생기고 현대적인 브라우저를 테스트에 적용하기 전까지는되지 않을 것입니다.