簡體   English   中英

使用JavaScript(V8)中的動態事件優化“調解員”模式

[英]Optimizing 'Mediator' pattern with dynamic events in 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次,並且會有多個回調,因此肯定會從優化中受益。

在不為每個新事件引入大的樣板代碼的情況下,使此代碼單態化的最優雅的方法是什么?

編輯:.bind(this)替換為如注釋中所建議的提供此作為上下文參數。

每秒60次這樣的操作算不上什么。

就是說,如果您想對其進行優化,則最明顯的瓶頸肯定是調用使用本機.bind函數創建的函數。 優化時,您應該始終( 我不總是在開玩笑 )使用自制綁定作為第一件事:

function bind(fn, ctx) {
    return function() {
        return fn.apply(ctx, arguments);
    };
}

這一點與Function.prototype.bind根本沒有做相同的事情,這就是重點:它確實可以完成您希望綁定執行的操作,僅此而已。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM