Оптимизация скорости JavaScript для iPad / PhoneGap DHTML-игры? - PullRequest
1 голос
/ 09 июля 2010

Я создаю игру для iPad с помощью Phonegap, что означает, что я использую JavaScript / CSS / HTML для Safari для iPad. По сути, я перемещаюсь по множеству элементов img (иногда меняя их src) с разрешением 1024x768, просто по локальным файлам без какого-либо сетевого соединения. На настольном Safari все работает гладко, но на iPad мой setInterval чувствует себя задержанным и мерцающим. У вас есть какие-нибудь советы по оптимизации скорости, которые я мог бы попробовать? Спасибо!

PS: я знаю, что переключение на родной Objective-C для iOS, скорее всего, будет намного, намного быстрее, но я бы очень хотел попробовать его со стандартным JS / HTML / CSS.

Ответы [ 2 ]

5 голосов
/ 09 июля 2010

Вы столкнулись с одной из наиболее распространенных проблем со сценариями браузера с анимированными веб-страницами.

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

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

Относительно того, когда это происходит, это зависит от аппаратных / программных возможностей.iPad имеет гораздо меньшую мощность, чем настольный ПК, что вполне очевидно.

Что вы можете сделать, чтобы избежать отставания.

  1. Плавность торговли дляскорость : увеличьте задержку между интервалами, чтобы избежать кумулятивных действий в стеке пользовательского интерфейса.

  2. setTimeout : эта альтернатива очень похожа на setInterval за исключением того, что он не обеспечивает заданный интервал между повторениями, а скорее фокусируется на том, как долго браузер должен ждать до повторения действия.Таким образом, чтобы сделать его более похожим на setInterval, вам может потребоваться отслеживать истекшее время между действиями и вычислять меру изменения, о котором необходимо позаботиться.

  3. Групповая анимация : у вас может быть один интервал для некоторых связанных анимаций (вы управляете для них мини-очередью), и таким образом вы уменьшаете фактические вызовы setInterval и получаете больше власти над управлением условиями гонки.

Обязательно прочитайте эту статью:

Создание приложения для iPad на HTML5 и очень быстрое ( Томас Фукссоздатель script.aculo.us )

1 голос
/ 20 сентября 2010

Используйте CSS3-анимацию, которая использует ускорение GPU ... Это будет иметь огромный эффект для любой анимации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...