모듈 (스크립트)이 완전히 독립적이며 서로 분리되어 있고 Mediator에만 의존하는 이벤트 중심 아키텍처를 구축하는 우아한 방법을 찾고 있습니다. 통신. 의 전형적인 예를 살펴 보자 : 사전 라우팅에서 콜백을 실행하는 콜백 배열을 따라에 이벤트 이름에서 전화로JavaScript (V8)에서 동적 이벤트로 'Mediator'패턴 최적화
var SomeModule = function() {...};
SomeModule.init = function()
{
Mediator.register ('SomeEvent', this.onSomeEvent, this);
Mediator.register ('OtherEvent', this.onOtherEvent, this);
};
SomeModule.onSomeEvent = function (data)
{
var x = data.x;
var y = data.y;
// ........
Mediator.dispatch ('ThirdEvent', {name: 'Liza', gender: 1});
// now all modules registered for 'ThirdEvent' will get their callbacks executed
};
일반적인 중재자가 운영하고 있습니다. 이제 Mediator.dispatch (...)는 동적 객체를 도입하여 V8에서 실행될 때 느리고 최적화되지 않은 상태로 유지되는 다형성 코드를 도입합니다. 일부 이벤트는 초당 60 회의 해고가 발생하며 여러 콜백이 있으므로 최적화를 통해 확실한 이점을 얻을 수 있습니다.
모든 새로운 이벤트에 대해 큰 상용구 코드를 도입하지 않고이 코드를 단일체로 만드는 가장 우아한 방법은 무엇입니까?
EDIT :이. 비유 (this)를 주석에 제안 된대로 컨텍스트 매개 변수로 제공하여 대체하십시오.
개체 리터럴이 최적화되지 않았습니까? 내가 생각할 수있는 한 가지는 모듈에'// @ event ThirdEvent (name, gender)'와 같은 주석을다는 것입니다. 그런 다음 이러한 주석은 자동으로 생성자 코드를 생성하는 코드 전처리 기가 읽습니다. 그런 다음 코드에서 Mediator.dispatch (새 ThirdEvent ('Liza', 'gender')); '를 사용할 수 있습니다. 당신이해야 할 일이있을 때 이벤트 디스패치 나 콜백 처리를 취소하는 것이 좋습니다. – plalx
@plalx Mediator.dispatch()는 매번 다른 params 객체로 호출되므로 V8이이 케이스에 대해 최적화 된 숨겨진 클래스를 생성 할 수없는 것처럼 보입니다. mediator.dispatch ("FirstEvent", {x : 1, y : 2, z : 3}), 또 다른 시간 - Mediator.dispatch ("SecondEvent", {name : "Liza", 성별 : 1}). –
@VincentPride 중재자가 실제로 객체를 사용하려고 시도하지 않는 한 숨겨진 하나의 클래스가 될 필요는 없지만 객체를 사용하는 이유는 무엇입니까? 그냥 통과하고 사용하지 않으므로 숨겨진 클래스가 무엇인지는 중요하지 않습니다. – Esailija