javascript - KineticJS - Kinetic.Node.listening() 的性能影响

标签 javascript dom-events kineticjs

最近,我了解到可以使用 listening() 方法来确定 KineticJS 节点是否正在监听事件。我制作了一款在任何给定时间都有数百个可见形状的游戏。其中许多形状不需要监听事件,因此我考虑禁用该功能。在该领域有经验的人能否解释禁用事件对性能的潜在影响,以便我可以评估它是否值得合并到我的项目中?

最佳答案

由于舞台上的对象数量相对较多,因此通过为不需要响应事件的节点设置 node.listening(false) 可能会提高性能。舞台上的任何鼠标事件都会触发对所有监听对象的调用 - 在您的情况下,每个事件数百次调用。性能提升的原因(有点明显)是每个事件必须调用的对象事件处理程序更少。

更好

为了获得更好的性能,您可以考虑 Kinetic.FastLayer。将 FastLayer 视为当前不需要事件处理程序的所有对象的容器。由于没有事件开销,FastLayer 的渲染速度非常快。当您的某个对象需要使用事件时,您可以将它们移动到常规 Kinetic.Layer,在其中再次触发事件。

最佳

通过将一组当前不可移动的对象转换为静态图像(缓存)可以获得最佳性能。这样,这组对象可以非常快速地从图像传输到 Canvas 。同样,如果缓存的对象之一需要使用事件,您可以将它们移动到常规 Kinetic.Layer 并将剩余的对象集重新缓存到新图像中。

当然,您的设计将决定上述性能技术是否可以应用到您的游戏中。

祝您的项目顺利!

关于javascript - KineticJS - Kinetic.Node.listening() 的性能影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24515411/

相关文章:

javascript - 自定义元素从输入类型范围扩展

javascript - 使用文本字段更改表单隐藏字段

javascript - 启用帧间通信的 postMessage 方法的最大大小是多少?

javascript - 在 KineticJS 中绘制圆弧

javascript - Kinetic JS - 在 Canvas 上加载多个图像

javascript - 如何防止 Firefox 输出控制台错误?

javascript - 如何使用fancybox dialog插件直接显示一个div

javascript - Window.onbeforeprint 和 Window.onafterprint 同时被解雇

google-analytics - 为什么未安装我的Google跟踪代码管理器事件监听器?

javascript - 使用 mousemove 绘制形状,使用 kineticjs 拖放和调整大小- KineticJS