Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

采取延迟同步可行性研究 #28

Open
@jabbany

Description

有关属性更新目前效率相对低。比如 elem.x = 100, elem.y = 100, elem.rotation = 90 实际上会执行三次 postMessage操作每次更新一个属性。

本Issue将研究如果每次更改参数,并不立即发送 message而是在每次 enterFrame操作触发后在一批发送更新,或许可能提高弹幕的运行效率,同时因为所有的操作都会被缓存,同时连续 obj.x = 100, obj.x = 200 将可以合并成一个属性更新记录。

有关缺点:

  • 延时性:虽然enterFrame是理论刷新率,但是毕竟还是和实时不一样,而且在现实中很可能低于系统实际支持的传输效率(默认为24fps),这可能导致有一些属性更新产生微小但可能可察觉的延时。提高enterFrame到 60fps 或许会解决延时问题,但是将导致很多动画触发太快而悲剧。
  • enterFrame总线繁忙:这样归类之后,每次enterFrame发送的信息包就变大了,而且所有DO的enterFrame是一起触发的,那么有可能导致总线堵塞,产生更新卡顿。(但是因为函数都是异步的又是nonblocking,应该不会卡)
    -一次PostMessage很大,据说Firefox有bug(未确认,可能已修)

有关优点:

  • 减少接口消息频率
  • 能优化/合并操作
  • 帧率是真的帧率了
  • 方便迅速地自动适应平台特征:(在移动平台等渲染速度慢的平台上,可以在外部动态测更新率,然后同步到沙箱内,这样沙箱里面的事件发送率降低,相当于可以强制 drop frame,更好的平和的支持移动平台。

实现:
实现并不难,只要挂接DisplayObject的全局的 callMethod 和 updateProperty,增加一个操作queue(updateProperty的基于一个哈希,callMethod则可以使用List),然后挂在到 enterFrame的末端发送事件,如果没有更新不发送。在客户端监听特殊的时间然后重新异步派发到各个影子Object实例

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      AltStyle によって変換されたページ (->オリジナル) /