setTimeout已经没法用了

requestAnimationFrame已经出来这么多年了,现在还是有人用setTimeout来做动画或者游戏主循环。但setTimeout真的是没法用了。

目前的Chrome中,如果你有一个setTimeout循环,但还注册了touchstart事件,那么你每点一下屏幕,Chrome的计时器就会停下100毫秒。以一帧16毫秒来算,点一下就掉6帧。。

为什么是这样呢?因为Chrome给了touch非常高的优先级,以便于流畅的滚屏喜刷刷。Chrome怕你想滚屏的时候正好有个计时器到点了执行了一大坨js导致滚屏变卡,就先把计时器都给停了,先赶紧处理touch事件,然后赶紧滚。过了100毫秒发现你没滚再重新开始计时。。

posted @ 2016-07-29 19:06  kilobtye  阅读(261)  评论(0编辑  收藏  举报