“HTML5”版本的性能不佳的原因是它使用了setTimeout
,而不是request AngimationFrame
(RAF),这是用 HTML5 画布绘制任何东西的建议方法。 。
<% 1 > 编辑 % 1 > : 我本该写"是部分 < em > em > 解释" 。
除 RAF 外, 您应该尝试使用设置“ 间隔” 而不是设置“ 暂停 ” 。 另外, 为什么每个设置时间的长度会有一个随机因素? 如果您不想使用 RAF, 我建议使用设置“ 间隔”, 固定间隔( 起始时间为 16ms ), 并在每个间隔更新所有花瓣。 目前您对每个花瓣都使用单独的设置时间, 随机持续时间, 这可能会造成很多滞后时间 。
""http://msdn.microsoft.com/library/hh673556.aspx" rel="nofollow" >这里 是有关RAF业绩效益的一个很好的MSDN文章。 它将RAF与SetTimeout/setInterval作了比较。
因此,应用程序与浏览器绘画间隔完全一致,只使用适当数量的资源。
此外:
无法绘制每三幅图, 原因是在显示更新间隔前会出现另一个绘图请求 。 这种过度绘制导致切片动画, 因为每三幅图都丢失了每三幅。 这种定时分辨率降低也会对电池寿命造成高达25%的消极影响 。
使用 SetTimeout 可能不会计算您示例中的性能差异 。 其他人已经指出, 比较不是苹果到应用程序。 您应该能够用 SetTimeout 获得更快的动画( 我写了一个相当平滑的物理模拟和 SetTimeout ) 。 尽管如此, RAF 远优于设置Timeout, 并且是获得最平滑动画的唯一方法 。