代码之家  ›  专栏  ›  技术社区  ›  evilpenguin

什么更有效:计时器、EnterFrame事件或带有额外代码的基本tween?

  •  3
  • evilpenguin  · 技术社区  · 17 年前

    在实际的视频播放部分没有太多的控制,但我的方法是尽量不要用chrome和播放器的其他附加部分破坏处理器。我抛弃了FLVPlayback和所有组件,使用视频、NetConnection和NetStream从头开始构建自己的播放器,但NetStream类没有更新事件。

    因此,为了更新进度条和运行时间文本字段,我必须创建自己的常规事件,该事件从NetStream.time属性读取并计算视频的进度。

    据我所知,我有两种方法可以做到这一点:创建计时器类实例或为EnterFrame事件添加侦听器。我正在寻找最好的方法定期更新(每几百毫秒一次),对处理器负载的影响最小。两者中哪一个可能是更好的选择?

    还有第三种解决方案,但对我来说,这似乎是一个遥远的目标:创建一个独立的动画,一个基本的tween,独立于视频播放,只在各种视频事件上同步。这将完全删除常规更新,但仅限于我在代码中看到的范围。显然,动画在播放时仍会自动更新,但我猜这将在比计时器更低的级别上处理。当然,为了保持进度条的动画和实际的视频播放同步,会有额外的代码,但至少我不会让计时器每秒关闭30次。

    消耗最少处理器资源的最佳方法是什么?

    3 回复  |  直到 17 年前
        1
  •  3
  •   fenomas    17 年前

    问哪种方法最有效是错误的开始方式。相反,问问自己哪种方法在概念上适合你想要做的事情。

    由于您正在更新应用程序的部分视觉效果,因此明智的做法可能是从以下事实开始:Flash按照固定的时间表(每帧更新一次)更新屏幕,并在前后发布事件。如果性能无关紧要,最正确的方法是在ENTER_FRAME处理程序中更新视觉效果-确保每帧运行更新代码的次数不超过一次(在不会绘制到屏幕的更新上浪费周期)或更少(可能会降低视觉效果)。所以从这个开始。

    如果性能无关紧要,那么使用框架处理程序是正确的方法,接下来的问题是,使用框架处理程序是否会影响性能?回答这个问题的最好方法是分析你的应用程序,但我敢打赌我家的答案是否定的。Flash无论如何都会重新绘制你的视频,除非你的进度条上有15个过滤器,否则很难想象它有任何可测量的效果。此外,即使您决定每N帧调用一次更新,而不是每帧调用一次更新,除非您要更新的所有内容都在脏矩形之外,否则不管您是否移动了它,它都会在每一帧重新绘制。因此,性能上的“节省”只不过是每帧一次函数调用和一次变量赋值。如果需要压缩更多的性能,那么与简化进度条本身的图形(从而降低重新绘制的成本)相比,这样的节省是看不见的。

    所有这一切都是一个冗长的说法,使用框架处理程序,除非你能找到一个可衡量的理由不这样做。(您不会。;)如果有疑问,请在完成后尝试删除事件侦听器,看看它是否对性能有任何影响,如果有影响,请解决问题。

        2
  •  1
  •   back2dos    17 年前

    如果这只是关于重新绘制一个条和更新一个文本字段,那么您的考虑有点过分了。。。我喜欢它,当人们关心性能的时候,但是你看,解码h264视频帧的成本使得你的任务完全不重要,性能明智。。。就我个人而言,我会选择 Timer

    小纸条 : flash.utils::setInterval 性能更高(尽管无可否认,这不是一个像 计时器 ),因为它绕过了 TimerEvent

    尔兹

        3
  •  0
  •   Carlo    17 年前

    与解码h264视频流的成本相比,我认为FLVPlayer组件增加的开销不会太大。

    顺便说一下,避免使用第三种解决方案,因为您无法真正了解播放时间。在较旧的机器上,解码将导致视频挂起或延迟。