2014-06-29 34 views
0

我正在評論一個JavaScript應用程序的性能,該應用程序是用spine.js和下劃線js(充當模板引擎)構建的。有一個常見的EventManager.js處理應用程序中的所有事件(通過jquery'on'處理body元素上的事件,請參閱下面的代碼片段),然後應用程序對其所有模塊都有自己的發佈訂閱中介代理,事件,然後發送到所有模塊,通過過濾目標並將內部事件發佈到模塊。Javascript jquery事件性能mvc

鼠標移動事件正在事件管理器上處理事件,所以鼠標移動將由事件管理器處理,而不是僅僅處理鼠標移動到特定的div元素上。我認爲有太多的功能正在進行。

例如:div上的click事件由module.subscribe(「App-Click」,onModuleClickHandler,filter:{selector:'#someSelector')等模塊處理。如果單擊該選擇器,則eventmanager檢查當前目標是否具有該選擇器,然後將自定義「App-Click」發佈到該模塊。

像這樣處理是好還是隻處理子模塊上的每個html事件而不是常見的事件管理器?如果問題的任何部分含糊不清,我會更詳細地更新該部分。

以下是eventmanager進行的代碼段上DOM

$('body') 
    .on('mousedown', onMouseEvent) 
    .on('mouseup',  onMouseEvent) 
    .on('mouseover', onMouseEvent) 
    .on('mousemove', onMouseEvent) 
    .on('mouseout', onMouseEvent) 
    .on('click',  onMouseEvent) 
    .on('mousewheel', onMouseWheelEvent); 
+0

你應該只爲那些你感興趣的人詢問事件。 –

+0

@LayTaylor應用程序需要所有這些事件,你的意思是註冊到特定的div而不是dom? ($('#divid')。on)而不是body.Also,我怎樣才能衡量兩者的性能,並告訴他們這對性能不好,這很好。 – madhured

+1

是的,我的意思是你應該只針對你需要的特定DOM元素請求這些事件。您可以在現代瀏覽器中使用內置的分析器工具來幫助您確定要提高的性能 –

回答

0

事件傳播使用sinking/bubbling與下沉(捕獲)和冒泡階段。 您的活動經理原則上也應該這樣做,因爲它非常靈活和實用。

但不清楚爲什麼你需要自己來實現這個。它已經在那裏。

+0

應用程序未實現事件傳播,但它們創建了mvc體系結構,以便在eventmanager.js中處理dom事件,然後發送給只訂閱了與該dom事件相對應的自定義事件名稱的模塊,例如:div上的click事件由module.subscribe(「App-Click」,onModuleClickHandler,filter:{selector: '#someSelector')。如果單擊該選擇器,則eventmanager將自定義「App-Click」發佈到該模塊。我不知道他們爲什麼這樣做,只是想知道這個利弊。 – madhured