(setInterval && requestAnimationFrame)? !!!
Вот перед до мной повставала задача, создать (объект анимации) создать объект который принимает в себя кучу генераторов Генераторы в которых содержится анимация, он вызывает эх всех 60 раз в секунду, то есть должны иметь 60FPS, ненужные (которые закончили свою роботу) удалять со списка.
Это было несложно, все сделал через рекурсию requestAnimationFrame и были некие сомнения что он дает уж не 60FPS и сколько дает нам setIntepval, пожалуйста таблицу на экран: (Внимание этот график справедлив только в Google Chrome) setInterval :::::::::::::::32.54==30FPS ;:таймер=16.7 requestAnimationFrame::37.79==26FPS Как можно увидеть дела совсем плохие, мы получаем FPS у 2 раза меньше чем мы хотели, и помимо этого мы можем увидеть что setInterval имеет задержку меж выполнением меньше!!! Казалось да здравствуй setInterval:victory: , но:nono: везде пишут(читал 3~5 статей) что requestAnimationFrame в отличии от setInterval имеет более стабильный FPS, и держит его даже в неактивной вкладке:dance: , бред!!!:nono: :stop: :cray: в обоих случаях оно не стабильно и иногда задержка бывает и до ~200мс, так что про стабильность лош!!! А как же про не активные вкладке? Смотрите на график: (Внимание этот график справедлив только в Google Chrome) setInterval :::::::::::::::1003==1FPS ;;;:max:1020 ;;;;;; таймер=16.7 requestAnimationFrame::2442==0.4FPS ;:max:141003 Удивительно! Скажите лош? Я скопировал и вставил то что было в логах (+оформил в таблицу), как можно увидеть setInterval показал куда лучше результат! Какие выводы я сделал для себя? Что я буду использовать setInterval, и сделаю для себя следующий маленький алгоритм: повторять( закруглить_до_меньшего( время задержки / (1000 / 60) ) )раз{ что нужно сделать } |
Часовой пояс GMT +3, время: 17:36. |