y3-editor / y3-lualib

MIT License
134 stars 40 forks source link

大量的事件转发有性能问题 #466

Open xiaoqiangCai opened 2 months ago

xiaoqiangCai commented 2 months ago

RT,区域事件使用与其他事件同样的event和trigger,在trigger的notify和dispatch中会轮训所有的区域,这在大量区域的时候,是不合理的。

需要对区域的进入和离开,对应的notify和dispatch做区别对待,比如继承一个area的Event

xiaoqiangCai commented 2 months ago

补充一下,eventconfig里面类似的都会有巨大的性能问题。 比如

---@field event fun(self: self, event: "单位-属性变化", unit: Unit, attr: string, callback: fun(trg: Trigger, data: EventParam.单位-属性变化)): Trigger
xiaoqiangCai commented 2 months ago
---@field event fun(self: Player, event: "界面-消息", event_name: string, callback: fun(trg: Trigger, data: EventParam.界面-消息)): Trigger
sumneko commented 2 months ago

全局事件的分发开销是O(n),我觉得n一般不会特别大,所以没有做专门的优化。如果你确实有成百上千个区域,可以改用 Area:event 方式注册事件,这个分发开销是 O(1)

xiaoqiangCai commented 2 months ago

全局事件的分发开销是O(n),我觉得n一般不会特别大,所以没有做专门的优化。如果你确实有成百上千个区域,可以改用 Area:event 方式注册事件,这个分发开销是 O(1)

界面这个呢