2014-06-29 110 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