Приложения JavaScript / HTML / CSS на устройствах Android - очень медленно - PullRequest
4 голосов
/ 25 января 2012

Мы делаем несколько игр на JavaScript.Они отлично работают на iPhone и iPad, а также на рабочем столе.Самая большая проблема - устройства Android.Все планшеты, которые у нас есть с Honeycomb OS 3.x (Samsung Tab 10.1, Motorola Xoom, Acer Iconia и т. Д.), Работают крайне медленно при выполнении JavaScript и визуализации контента.Это лучше на телефонах 2.x, но все еще далеко позади устройств Apple ...

Мы попытались использовать традиционный подход с div-элементом , а также HTML5 canvas ,но даже простой пример прыгающего мяча очень медленный (если вы хотите проверить его, откройте http://sie.mautilus.com/canvas).

Если мы отключим в меню отладки на Android Включить рендеринг OpenGL немного лучше, но все же не может использоваться для широкой аудитории, не говоря уже о том, что обычный пользователь не сделает этого ...

Это делает пользовательский интерфейс на основе JavaScript, который немного усложняется событиями, совершенно непригодным для Android ...

Как получается, что простой прыгающий шарик, который работал в MS-DOS на моей машине Intel 386, непригоден для планшетов высокого класса с двухъядерными процессорами Cortex-A9 с частотой 1 ГГц?

См. Также там:
http://code.google.com/p/android/issues/detail?id=17353
http://groups.google.com/group/phonegap/browse_thread/thread/fc13b40165db8a00?pli=1a

С уважением, STEN

1 Ответ

2 голосов
/ 21 июня 2012

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

Я сделал несколько вещей, чтобы ускорить процесс (хотя и с более низким качеством). Я также только проверил на HTC Sensation и Samsung Galaxy Tab 10.1. Я думаю, что вам нужно будет использовать разные настройки для разных телефонов.

  1. установите размер экрана таким образом, чтобы мой телефон не создавал холст большего размера, а затем снова уменьшите его.
  2. масштабирование сцены в 2 раза. Это позволит сократить используемые пиксели пополам, так что у вас на самом деле будет холст меньшего размера, растянутый на весь экран
  3. не используйте clearRect, чтобы очистить весь холст, а затем перерисовать все. На самом деле удаление clearRect с вашего примера прыгающего мяча покажет много улучшений. Очистки областей, которые действительно изменяются (летучие мыши и мяч), а затем перерисовать его будет достаточно.

С другой стороны, я не заметил, что android 2 и 4 работают быстрее, чем 3, но это основано на тестировании всего с 3 устройствами, так что не сложная статистика.

Я также читал, что использование translate3d на холсте вызовет аппаратный рендеринг, если он доступен, но я не проверял / не подтверждал это.

Код, который может вам помочь:

<meta name="viewport" content="width=device-width, initial-scale=0.5, user-scalable=no"/>


$(gameEl).css('-webkit-transform', 'scale3d(2, 2, 0) translate3d(0, 0, 0)');
$(gameEl).css('-webkit-transform-origin', '0 0');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...