Скорость JavaScript - Chrome v Firefox

Я записал эту маленькую игру по http://amarnus.me/games/dodge. Теперь, если бы Вы попытка, играющая в игру и в Firefox и в Chrome, Вы ясно заметили бы, что это значительно медленнее в Firefox. Можно назвать это неумышленным чит-кодом, да.;-)

Таким образом, мой вопрос - это из-за более медленного механизма JavaScript в Firefox по сравнению с Chrome? Или это имеет некоторое отношение к плохому кодированию? (В мою защиту я - JavaScript newb),

Предположение, что это - первый, затем разве, это не точка против (недостаток) игры HTML5? (Те использующие отметьте как мой),

7
задан Amarnath Ravikumar 1 July 2010 в 10:14
поделиться

7 ответов

Firefox работает медленнее, чем Chrome в JavaScript. Однако я считаю, что при использовании тега canvas это также медленнее. Это, вероятно, улучшится с ff4 (вы пробовали бета-версию?).

Где-то в сети есть эмулятор nes, использующий js и canvas, и он работает примерно со скоростью 30 кадров в секунду на chrome (если я правильно помню), но только около 10 в ff.

Время, вероятно, ваш лучший друг :-P, хотя вы всегда можете попытаться оптимизировать.

Я верю, что браузерные игры придут со временем, но пока они не готовы ни к чему слишком продвинутому. Может примерно в то время, когда выйдет ie12 :-P.

[Редактировать] Кстати: я пробовал игру в FF4b1, и мне показалось, что она отлично работает. Наверное, не так быстро, как в хроме, но не так уж и далеко :).

6
ответ дан 7 December 2019 в 03:11
поделиться

jQuery animate делает что-то похожее на перемещение вашего объекта DOM.

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

0
ответ дан 7 December 2019 в 03:11
поделиться

Чтобы получить помощь, вы можете рассмотреть возможность предоставления неминифицированной версии вашего скрипта.

Я вижу, что в вашем коде установлены интервалы времени 8 мс. Как упоминалось выше, Firefox никогда не опускается ниже 10 мс (пока). Тем не менее, играть в свою игру в FFox 4 очень приятно. Я видел два очень маленьких вздора, которые явно были вызваны сборкой мусора. В этом отношении Chrome имеет преимущество перед Fox. Несмотря на то, что SpiderMonkey (который обрабатывает сборщик мусора в Firefox) значительно улучшился с 3,5 до 3,6, его все еще недостаточно для многих игр. В 4.0 это намного лучше, но все же не так хорошо, как в Chrome или Opera. (Над ним работают.)

Играя в игру и бегло глядя на ваш код, я не вижу сложности, из-за которой Firefox не мог бы справиться с тем, что происходит. Также Firefox 4 имеет Canvas с аппаратным ускорением, который немного быстрее IE9 и намного быстрее Chrome.

В сети бытует мнение, что Chrome быстрее Gecko, когда дело доходит до холста, но это потому, что люди редко профилируют свои страницы. Фактически, Canvas в Firefox 3.6 уже работает как минимум так же быстро, как и в Chrome, но многие тесты этого не показывают, поскольку JavaScript работает медленнее. (А некоторые тесты JavaScript работают медленнее, потому что Firefox плохо справляется с тестовой оснасткой.)

Все это приводит к множеству путаницы и дезинформации.Суть в том, что ваша игра должна быть в порядке в Firefox 4. Вы должны посмотреть, есть ли что-нибудь, что вы можете сделать, чтобы избежать запуска ненужного GC. Например. вы повторно используете переменные или создаете новые ненужные?

Однако в Opera 10.53 это не доставляло удовольствия. Не потому, что Opera не успевала за скоростью, а потому, что вместо того, чтобы перемещать нижнюю часть, она оставалась неподвижной, а вместо этого перемещалось все игровое поле. (Несмотря на это, мне удалось перейти на уровень 17 с первой попытки.) В Opera 10.6 страница не загружается должным образом.

Возможно, вам нужно отладить свой код - или, возможно, сообщить об ошибке в Opera, если это регресс. (Я напишу это в Твиттере, чтобы привлечь их внимание.)

2
ответ дан 7 December 2019 в 03:11
поделиться

Попробуйте эту технику: setTimeout с более короткой задержкой

Дайте мне знать, если это поможет. Мне теперь даже интересно. :)

Удачи!

0
ответ дан 7 December 2019 в 03:11
поделиться

Chrome предназначен для более быстрого движка Javascript.

Я не думаю, что это что-то говорит об играх на HTML5. Всегда найдутся пользователи с более быстрыми или более медленными настройками, чем у других, будь то аппаратное обеспечение, программное обеспечение или личная привычка пользователя держать много приложений запущенными одновременно. Если бы ваша игра была написана на Flash или Java, то пользователь с более медленным оборудованием увидел бы аналогичное замедление.

Возможно, вы сможете внести изменения в свой код, чтобы ускорить его. Я не изучал его очень подробно, но вижу, что у вас есть конструкции типа if(dodge.goRight == true ... . Хотя это и не является источником медлительности, это намекает на то, что вы, возможно, не везде использовали оптимальное решение.

0
ответ дан 7 December 2019 в 03:11
поделиться

Вы можете протестировать javascript-движок вашего браузера с помощью сайта IE.

http://ie.microsoft.com/testdrive/

Они утверждают, что самая высокая скорость javascript движка у них с IE9

0
ответ дан 7 December 2019 в 03:11
поделиться

Я бы возложил вину за это на setTimeout и setInterval, которые имеют минимум ~ 10 мс в браузерах, таких как IE и Firefox. Первоначально это было принято, чтобы страницы не потребляли весь процессор, если они наивно используют 0 мс для максимально быстрой работы. Chrome запускался без ограничений, но теперь переходит на минимум 4 мс , чтобы соответствовать рекомендациям в HTML5.

Джон Ресиг написал несколько замечательных сообщений , исследующих ограничения и точность setTimeout.

Браузеры Mozilla могут фактически сказать вам, насколько поздно (или рано!) Они запускаются с каждым вызовом setInterval. Ознакомьтесь со статьей о MDC setTimeout (Google "mdc settimeout" и обратите внимание на серую заметку в разделе синтаксиса).

Помимо проблем с таймером, Firefox обычно медленнее выполняет JS (по крайней мере, на данный момент), и кажется, что Skia (графическая библиотека Chrome) просто быстрее растеризует.

Надеюсь, это поможет :)

(Изначально у меня здесь была куча полезных ссылок, но это мой первый пост, и спам-фильтр меня обрушил.)

1
ответ дан 7 December 2019 в 03:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: