Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
jabbany opened this issue Jul 14, 2014 · 0 comments
Open

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

jabbany opened this issue Jul 14, 2014 · 0 comments

Comments

@jabbany
Copy link
Owner

jabbany commented Jul 14, 2014

有关属性更新目前效率相对低。比如 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实例

@jabbany jabbany added this to the 实现脚本弹幕的整合 milestone Jul 14, 2014
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant