Как стать автором
Обновить

Комментарии 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/ ).
О, как всегда, MS в тестах сфейлили.
У меня с этими изменениями в IE9 производительность поднялась со 150 до 400
Что еще раз показывает бессмысленность этого теста.

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

Действительно название я менял несколько раз не зная что выбрать, по этому в конце концов вышел средний вариант :)
НЛО прилетело и опубликовало эту надпись здесь
>Возможно это из-за гранулированности работы с таймером для 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 в посте есть), хотя в блог-постах действительно часто упоминается. Может раньше было?

Если найдете, скажите — я добавлю в текст.
www.whatwg.org/specs/web-apps/current-work/multipage/timers.html

The setInterval() method must run the following steps:
5. If timeout is less than 10, then increase timeout to 10

The setTimeout() method must run the following steps:
5. If the currently running task is a task that was created by the setTimeout() method, and timeout is less than 4, then increase timeout to 4.
Ха, забавно. Сейчас сделаю апдейт статьи.

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

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

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

Я уверен, что если еще глубже копнуть можно еще много найти откуда взялись эти 300+ fps.
if (!IE) {
delay(100500);
}
с переключениями табок это вы лихо — понятно что фф перестает отрисовывать неактивную табку и фпс скачет до небес.

может попробовать 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фпс.
Буквально последний абзац перед «Вывод» — там про about:flags:)
На последней(сегодняшней) dev версии Chrome под Win7 x64, Ваш исправленный вариант в купе с описанной системой tab-анья даёт 600+ фпс. Пруф имг.
Если я не ошибаюсь, с «табанием» можно и до 1000+ довести :) но я не проверял — надо оставить на пол часика-часик покрутиться :)
Не надо. Главное — сразу при открытии вкладки переключиться в соседний таб.
У меня в FF 3.6 под windows 7 модифицированная версия работает чуть медленнее(15-20 фпс против 20-25) и визуально хуже (дерганней) чем оригинал
Ну это неудивительно. Данный фикс имеет смысл только если время выполнения меньше, чем минимальная задержка таймера.
IE9 — показывает 3ms
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
лохе. 4890 2gb.
Веб-кит под Андроид (2.3.3) — 11.2
Веб-кит под iPhone4 — около 12.
оО на довольно сильном камне (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мс (есть ссылочки на стандарт)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации