Pull to refresh

Comments 67

>У меня в Chrome было 4мс, а в FF4 четко на 10мс держалось.
Опера держит 2мс.
>На Windows он упирается в лимит VSync — 60 fps. Есть Issue об этом, за который можно проголосовать поставив звездочку.
Но зачем? Чтобы на изображении проступали вертикальные полосы несинхронизированной прорисовки?
Там в иссю описано — чисто для бенчмарков добавить опцию в комманд-лайн. Типа мерятся у кого длинее fps :)
Полосы, к стати, будут горизонтальные.
И тогда вступает в силу особенности реализации очереди событий в броузерах. Есть вот такой интересный тест, который должен показать минимальную точность setTimeout. У меня в Chrome было 4мс, а в FF4 четко на 10мс держалось.

opera 2мс выдаёт (точнее 2,3мс)
Safari, OS X 10.6.6: 10 мс.
100 iterations of setZeroTimeout took 15 milliseconds.
100 iterations of setTimeout(0) took 1087 milliseconds.
Странные они, эти тесты.
ага, в сафари также, в Хроме на OS X держится на 5
В сафаре на iPhone-е тоже 10мс
Да, понятно было, что что-то нечисто, но не было времени разобрать. Чутьё подтверждалось тем, что автор того топика в MS работает :) (написано на его странице xaoccps.habrahabr.ru/ ).
У меня с этими изменениями в IE9 производительность поднялась со 150 до 400
Что еще раз показывает бессмысленность этого теста.

Тут был в комментах скриншот с 600 фпс. Мало?
Я еще затестил открытие контекстного меню поверх канваса. Динамика резко затормозилась, но ФПС-каунтер оказался очень инерционен. Счетчик просел всего на 20-30 ФПС, а видимое торможение намного больше.
Потому что каунтер считает средний ФПС за все время работы, а не за последние Н секунд. То есть 5 минут поработал — берется количество отрендеренных фреймов и делится на 300 секунд.
Типичный пример того, как безграмотность меняет смысл текста.
Как правильно хотел написать автор:
«О, тестирование скорости! „
или
“О тестированиИ скорости ...»
Типичный пример, как надо было писать в личку, потому что автор опечатку исправит, а ваш пост тут будет висеть тут ещё долго и безсмысленно.
Чтоб ветка зря не пропадала, :) приставка без-/бес- пишется в зависимости от следующей за ней буквы: «без-» для гласных и звонких согласных, «бес-» для глухих согласных. Примеры: Безответственность, бездарность, беспечность.
Ну тогда уж до кучи: «браузеры», а не «броузера».
Вы со своим оксфордским акцентом совсем английского не знаете. Правильно «бравзеры», мне одна бухгалтерша по секрету сказала…
какие нафиг бравзеры? посмотрите хотя бы транскрипцию в словаре или послушайте в гугл транслейте, там четко «браузер»
UFO just landed and posted this here
Спасибо, поправил.

Действительно название я менял несколько раз не зная что выбрать, по этому в конце концов вышел средний вариант :)
UFO just landed and posted this here
>Возможно это из-за гранулированности работы с таймером для Windows систем (без использования high-performance counter-ов или мультимедия расширений).

Все проще.

developer.mozilla.org/en/DOM/window.setInterval

As with setTimeout, there is a minimum delay enforced.

HTML 5 defines the minimum delay = 4 ms, starting with the second successive setTimeout().
Я не нашел в спецификации W3C или WhatWG упоминания про 4мс (ссылки на setTimeout в посте есть), хотя в блог-постах действительно часто упоминается. Может раньше было?

Если найдете, скажите — я добавлю в текст.
Ха, забавно. Сейчас сделаю апдейт статьи.

Выходит что те браузера, которые делают setTimeout < 2мс уже не следуют стандарту WhatWG.

Но IE9 больше следует W3C-варианту HTML5, в котором вроде нет этого ограничения, что и объясняет огромные FPS на этом… гм, «тесте».
У меня ваша версия показывает больший фпс (57 против 40), но при этом на вид не 57, а 20, все летит медленее и прерывистее, чем в оригинале, в котором все идет очень гладко и шустро.
Именно это я и хотел написать — что этот тест на самом деле «меряет» вообще непонятно что.

Смысл поста — критика подобных «тестов», которые непонятно что показывает, да еще в ракурсе «IE 9: 300+ fps, все остальные — меньше 100», в то время в тесте столько проблем, что даже мой пост только чуть затронул.

Я уверен, что если еще глубже копнуть можно еще много найти откуда взялись эти 300+ fps.
с переключениями табок это вы лихо — понятно что фф перестает отрисовывать неактивную табку и фпс скачет до небес.

может попробовать setInterval(moveIt,10); и будет все честно?

тогда Вы ограничите результат до 100 fps (которых в реальных проектах хватает с головой), и не дадите IE9 набрать свои сотни fps :)
Создать сложную сцену, которую любой браузер гарантировано будет рендерить дольше 10мс?
кстати на моем макбук про хром показывает 30фпс. никак не «200+ под не-Windows платформами»
А включенны всякие там «GPU Accelerated Compositing/GPU Accelerated Canvas 2D»? У меня на Ubuntu без никаких трюков и на сравнительно среднем cpu/gpu — 250
насколько я понял в хроме 10.0.648.134 этого нет. вкладка about:labs — пустая.
В последних версиях Chrome about:labs переехало в about:flags
Спасибо за подсказку.
Включил. Странно но теже 32фпс.
На последней(сегодняшней) dev версии Chrome под Win7 x64, Ваш исправленный вариант в купе с описанной системой tab-анья даёт 600+ фпс. Пруф имг.
Если я не ошибаюсь, с «табанием» можно и до 1000+ довести :) но я не проверял — надо оставить на пол часика-часик покрутиться :)
Не надо. Главное — сразу при открытии вкладки переключиться в соседний таб.
У меня в FF 3.6 под windows 7 модифицированная версия работает чуть медленнее(15-20 фпс против 20-25) и визуально хуже (дерганней) чем оригинал
Ну это неудивительно. Данный фикс имеет смысл только если время выполнения меньше, чем минимальная задержка таймера.
win7, ff 3.6.x i7-950, hd4870 2gb.
100 iterations of setZeroTimeout took 8 milliseconds.
100 iterations of setTimeout(0) took 993 milliseconds.

Оригинальный тест — 30-34 фпс.
Модифицированный — 40 фпс. (табался, тоже самое)

setTimeout — 9.5
оО на довольно сильном камне (phenom II x2 550) в хроме 10 под вин с включенным ускорением канваса — всего 46фпс в обычной версии и 21 в версии с увеличенным числом полигонов оО
почему так мало?
FF4, 180FPS, явные лаги прорисовки.
Люди — знайте — в ФФ нельзя использовать таймауты которые быстрее функции переносимой.
Получается просто — вы проапдейтили канвас, ФФ думает что можно бы и страницу обновить, а вы его опять начинайте апдейтить.
В итоге Браузер просто не обновляет картинку, генеря при этом жуткий ФПС( так как он попросту начинает пропускать фреймы)
Я всем сильно рекомендую вызывать аниматор «через-тик», тоесть гарантировать между двумя таймаутами один «пустой-таймауат-гарант» отрисовки( либо в одном таймауте поднимаете таймаут на отрисовку, либо просто только по четным фреймам работаете)
И не надо гнаться за ФПС, в реальность 25 кадра лично я не верю :)
>не надо гнаться за ФПС
надо, еще как.
хотя-бы довести до 60-70 + синхронизировать с перерисовкой монитора.
вы когда-нибудь пробовали играть в какую-нибудь 3д игрушку, одновременно записывая фрапсом например? он искуственно снижает FPS до 30 — ощущения не из приятных. больше частоты синхронизации — при резких (и даже не очень) движениях игрока (поворотах) в разные стороны будут ощутимо заметны вертикальные полосы, разделяющий 2 кадра. т.е. какбы старый кадр на месте, поверх начал отрисовываться новый и дошел только до трети монитора. поэтому идеал — синхронизация с частотой монитора.
хотя-бы довести до 60-70 + синхронизировать с перерисовкой монитора.

Может именно по этому у хромого не хотят отключать vsync при использовании gpu? :)
В браузерах это всё не имеет смысла, т.к. они обновляют картинку когда захотят.
ну, ГУГЛ, снова придумает какой-нибудь новый стандарт по этому поводу.
Если бы еще лет 7 назад мне бы кто-нибудь сказал что люди будут меняться fps-ами в браузерах, я бы не поверил…
Этот комментарий надо было бы поставить как эпиграф к этому посту!
прошла тысяча лет, каждый линуксоид знает, что «glxgears — не бенчмарк», но каждый день находится как минимум один человек, создающий на форуме писькомерку показаний glxgears. Это неистребимо, желание помериться разницами простых мужицких timeout'ов гораздо сильнее, чем мудрствовать о сути графикики.

Для пользователей windows, glxgears — это такая прога, рисующая на экране цветные шестеренки, и печатающая fps'ы с которыми они рисуются на экране.
ru.wikipedia.org/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Glxgears.gif
MacBook 5.2 2 Ггц 2Гб
MacOS 10.6.6
Первый тест: 5
Второй: 15fps
В первой табличке результат в попугаях?
Первая табличка — минимальная задержка, которую обеспечивает броузер при setTimeout(x,1) в мс. По стандарту должно быть 4мс (есть ссылочки на стандарт)
Sign up to leave a comment.

Articles