Android Chrome touchmove 间歇性缓慢直到方向改变

Android Chrome touchmove intermittently slow until orientation change

在我们的 javaScript 游戏中,我们遇到了一个问题,即 "touchmove" 事件很慢并且 "janky" 直到方向改变,此时它们再次变得平滑。

当游戏执行大量工作(例如加载关卡)时,速度变慢 returns。

这是一个视频,展示了缓慢的触摸移动动作,以及解决问题的方向变化。

https://youtu.be/7rSqkJuOQjc


日志中确实出现了以下警告

Handling of 'touchmove' input event was delayed for 141 ms due to main thread being busy. Consider marking event handler as 'passive' to make the page more responive.

但是,在游戏停止执行繁重的工作(例如加载关卡和构建精灵)后,缓慢的事件仍然存在。

在任何情况下我都不能使用被动处理程序,因为平移地图必须防止默认以停止界面滚动。


我假设速度缓​​慢与触摸事件有关,因为我已经测量了触摸处理程序被调用的频率并且它们看起来很奇怪。

将在大约 20 毫秒内连续接收 5-10 个事件,然后会有一个大约 150-200 毫秒的事件,然后是另一批快速事件和另一批慢速事件。

方向改变后,所有事件都在 20 毫秒内收到


我还测量了我对 requestAnimationFrame 的响应,它们似乎是相当稳定的 16.8 毫秒


对于那些感兴趣的人,您可以在 https://blight.ironhelmet.com

上自己查看问题

问题出现在 Chrome 和 Cordova 中,包括原生的和使用 Crosswalk 的。 iOS 上的 Safari 或任何经过测试的桌面浏览器都不会出现这些问题。


我想知道是否还有其他人遇到过这个问题以及我该如何解决它。

是否可以使用 javaScript 强制执行 "orientation change" 或方向更改期间发生的任何事情?

硬件渲染器没有启动,缓慢的软件渲染正在减慢事件处理。 (将像素从一个 canvas 绘制到另一个)

方向更改后,垃圾收集器似乎清理了未使用的 canvases,这使硬件渲染器能够启动。