2010-07-01 5 views
7

Я написал эту маленькую игру в http://amarnus.me/games/dodge. Теперь, если вы попытаетесь сыграть в игру как в Firefox, так и в Chrome, вы, очевидно, заметите, что в Firefox Firefox значительно медленнее. Да, это можно назвать непреднамеренным чит-кодом. ;-)Javascript Speed ​​- Chrome v Firefox

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

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

+2

nice project, btw :) – galambalazs

+0

Захватывающая игра. Уровень 17 с 83 уклонами на Chrome и уровень 1, с 0 уловками в Firefox. В Firefox было так чертовски медленно, что мне пришлось переместить панель. – Anurag

+1

Возможно, 8 мс интервал слишком мал для ff .. – galambalazs

ответ

6

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

Существует также эмулятор nes в Интернете где-то с помощью js и canvas, и он работает примерно на 30 кадров в секунду на хроме (если я правильно помню), но только около 10 в ff.

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

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

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

+0

+1 для комментария 'холст'. Chrome оптимизирует этот элемент намного больше, чем FF 3. –

+0

Chrome не «оптимизирует» холст не больше, чем Firefox. У Firefox 4 есть ускорение GPU, которое заставляет его работать даже лучше, чем MSIE 9 в демо-версии аквариума. – itpastorn

+0

Аппаратное ускорение по умолчанию отключено в FF4b1, см. Https://wiki.mozilla.org/Platform/GFX/Direct2DDemo, чтобы активировать его. –

0

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

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

0

Хром - это designed, чтобы иметь более мощный механизм Javascript.

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

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

+0

Хотя верно, что V8 работает лучше, чем Tracemonkey на большинстве тестов скорости, я думаю, что формулировка " разработанный для быстрого JavaScript-движка ", немного запутан. Я напишу одиннадцатый комментарий, чтобы объяснить это более подробно. – itpastorn

+0

+1 Хорошая аналогия. Сравнение с оборудованием имеет смысл для меня, но насколько это заметно? Опять же, это будет зависеть от приложения. Хм .. –

0

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

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

Они утверждают, на самой высокой скорости JavaScript двигателя они имеют с IE9

+0

Вы считали, что они скажут это? (Не то, чтобы я был тем, кто был downvoted) – Yacoby

+0

вот тестовый сайт. он проверяет браузеры на этом. просто введите этот сайт из chrome и firefox. Вы отказались от этого не по этим темам. Хорошо, независимо от того, – onurbaysan

1

я виню большую часть его на SetTimeout и setInterval, имеющий ~ 10ms минимум в браузерах, таких как IE и Firefox , Это было первоначально принято, чтобы остановить использование страниц всего процессора, если они наивно используют 0ms для работы как можно быстрее. Chrome запущен без ограничения, но теперь moving to a 4ms minimum соответствует рекомендации в HTML5.

John Resig hassomeawesomeposts исследование пределов и точности набораTimeout.

Браузеры Mozilla могут рассказать вам, как поздно (или рано!) Они работают с каждым вызовом setInterval. Проверьте статью MDT setTimeout (google «mdc settimeout» и посмотрите серое примечание в разделе синтаксиса).

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

Надеется, что это помогает :)

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

2

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

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

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

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

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

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

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

+0

Из исходного кода игры: «{if ($. Browser.webkit) {browserName =" Chrome "} else {if ($. Browser.mozilla) {browserName =" Firefox "}}". Это приводит к сбою с исключением в Opera, поскольку имя_буфера нигде не определено для этого случая. Пожалуйста, исправьте это. –

+0

И исправить это с помощью обнаружения возможностей. Браузеру нюхать не нужно и плохой практике. – itpastorn

Смежные вопросы