2015-02-19 2 views
1

Я создаю игру в WebGL, и через некоторое время это происходит намного быстрее. Каждый раз, когда я запускаю его в первый раз, он медленно и заикается. Запустил бы некоторый процессорный интенсивный код в течение нескольких секунд, сначала подготовьте браузер, чтобы использовать его полную мощность?JavaScript performance warmup

У меня уже работает ammo.js у рабочего, который дает огромный импульс, но первые несколько минут игры все еще намного медленнее. Могла ли это быть моей стратегией ноутбука для управления властью?

+0

Обогрев двигателя занимает меньше нескольких минут, я думаю, что это что-то еще (где не работает код ЦПУ). Кстати, может быть, это тоже ваша видеокарта? – Bergi

ответ

2

я могу думать о 4 вещи:

  1. браузеры используют технику, называемую JIT (Just In Time компиляции), чтобы ускорить скорость выполнения для наиболее часто используемых частей кода. Однако, чтобы определить, какая часть больше всего используется, браузеры дают ей некоторое время.

  2. Ноутбуки обычно управляют процессором с меньшей скоростью, чтобы сохранить аккумулятор. Однако, когда использование ЦП слишком велико (например, когда вы играете в игру), они увеличивают частоту, чтобы получить больше сока от процессора. Например, Intel Speedstep http://en.wikipedia.org/wiki/SpeedStep

  3. Некоторые ноутбуки имеют две графические карты (например, Macbook Pros). Один из них - это Intel по умолчанию, который они используют для рендеринга обычных окон графического интерфейса, а другой - для графически интенсивных приложений. Более мощная графическая карта обычно отключается по умолчанию и используется только в случае необходимости (поскольку она потребляет больше батареи, а также нагревается система, и система будет шумной). Хотя маловероятно, что система изменит графические карты в середине запуска 3D-приложения.

  4. Все это из-под вашего контроля. Игровые движки обычно используют таблицы поиска для часто вычисляемых значений, чтобы ускорить их время выполнения. Возможно, ваш игровой движок заполняет таблицу поиска по требованию.

Тем не менее, ни один из этих предметов не должен занимать «пару минут», чтобы подняться до скорости. Обычно это занимает всего несколько секунд. Так что это все еще подозрительно.

+0

Спасибо за ваш ответ, поэтому, как сделать работу пользователя лучше сразу. 100% людей, приходящих в мою игру, будут новыми пользователями, и игра должна произвести хорошее впечатление. WebGL-игры не являются крупной отраслью, поэтому статей о расширенном использовании не так много. Существуют ли какие-либо стратегии для работы с упомянутыми JIT и Speedstep? – Pawel

+0

Я понимаю ваши проблемы. Одним из решений было бы показать экран загрузки игры, когда вы запустите основные части игрового движка за сценой. Вы действительно можете получить фантазию и спроектировать экран загрузки, в котором используются части кода игры, чтобы разогреть его. Хотя никто не любит экран загрузки, который занимает пару минут. Вы смогли определить трудоемкие части с помощью инструментов Chrome Performance: https://developer.chrome.com/devtools/docs/timeline? – AlexStack

0

Я сомневаюсь, что вы можете что-то сделать, но ... вы могли бы использовать каждую программу шейдера WebGL хотя бы один раз и каждый раз рисовать каждый буфер, а мог бы справкой. См. Ответ Алекса по причинам, почему это возможно.

У WebGL большое количество валидации. Большая часть этой проверки выполняется лениво. Один пример - когда вы рисуете, используя gl.drawElements, он должен проверить, что ни один из ваших индексов не находится за пределами допустимого диапазона. Он делает это и кэширует ответ для определенного диапазона буфера индекса, который вы только что использовали. Если вы не обновите индексы, вам не придется снова проверять. Но это означает, что в первый раз, когда вы рисуете каждую вещь с помощью gl.drawElements, есть дополнительная проверка, чтобы вы могли попробовать рисовать все раз, прежде чем начать игру.

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

Примечание: Я сомневаюсь, что это исправит ситуацию, но, возможно, стоит попробовать.

0

Это медленный из-за проблемы с сетевой нагрузкой? ... или максимизация процессора?

Различать эти причины, запустив сверху или некоторые утилиты использования ресурсов в течение этого начального периода медленного

Если ваш процессор работает горячая может быть синтезирующие вершины нерационально.

+1

это не так. Это всего лишь 0,3 секунды заикания, но это имеет большое влияние на первое впечатление, когда кто-то играет в игру в первый раз. Во всяком случае, моим обходным путем является запуск этого действия вручную в первый раз, поэтому, когда это происходит в игре, оно уже гладкое – Pawel