HTML5+JavaScript vs батарейка

Сейчас модно радостно кричать про будущее разработки вообще и геймдева в частности в виде HTML5+JavaScript, особенно на мобильных девайсах. Я к этому отношусь достаточно скептически и, с большего, игнорирую подобные вопли как белый шум (особенно в приложении к гейдеву).

Писал недавно удалённый отладчик на JavaScript/HTML и прямо таки прочувствовал насколько неэффективно подобное "приложение" в сравнении с нативным. В смысле код на JavaScript раз в надцать (20-30 минимум) больше инструкций процессора выполняет в сравнении с нативным кодом, делающим то же самое.

На десктопе оно в-общем то не так важно -- с современным то железом, а вот на мобилках ситуация другая: больше инструкций -- больше электричества тратится и тепла выделяется. Грубо говоря, тетрис на HTML5/JS и Uncharted будут садить батарейку примерно одинаково (ОК, я несколько утрирую). Если же попытаться написать Uncharted на JS, то это будет alles kaput Smile

Submitted by BLK Dragon on

Комментарии

> Сейчас модно радостно кричать про будущее разработки вообще и геймдева в частности в виде HTML5+JavaScript

http://dev.by/news/32529

Вот цитата: "Так, вице-президент Microsoft по Windows-взаимодействию Джули Ларсон-Грин похвасталась примером иммерсивного приложения, эксплуатирующего «новую девелоперскую платформу», опирающуюся на HTML5 и JavaScript вместо традиционных языков программирования, выступающих опорой для нынешних Windows-версий."

Боюсь, производителям телефонов придется как-то выкручиваться. Smile

Quote:
Come-from-Beyond писал(а):
Боюсь, производителям телефонов придется как-то выкручиваться. :)
Это пользователям придётся как-то привыкать жить с тормозными приложениями, быстро-быстро жгущими батарейки.
Submitted by BLK Dragon on

хм, забавные наблюдения. Не знал даже о таком Smile

Submitted by DJ_Psych on
Quote:
BLK Dragon писал(а):
а вот на мобилках ситуация другая: больше инструкций -- больше электричества тратится и тепла выделяется.
А не подскажешь, как эти показатели можно замерять? А то пишем сейчас под андрюшу проект на java, и хотелось бы такие вещи знать заранее.
P.S. Только не говори, что надо запомнить процент зарядки на начало запуска приложения - поиграть - снять показатель на окончание и сделать вычитание =)
Submitted by MaxImuS on
Quote:
MaxImuS писал(а):
А не подскажешь, как эти показатели можно замерять? А то пишем сейчас под андрюшу проект на java, и хотелось бы такие вещи знать заранее.
P.S. Только не говори, что надо запомнить процент зарядки на начало запуска приложения - поиграть - снять показатель на окончание и сделать вычитание =)
Самый правильный способ с точки зрения физики - это подключить девайс к батарейке не напрямую, а через измерительные приборы - Ваттметр или Амперметр с вольтметром. Тогда можно снять реальные характеристики процесса разряда батареи. Только вот нужна ли такая точность?
Submitted by DekaSoft on
Тут не все однозначно. Пока я видел два варианта - мобилка с ускорителем и без него. Соответственно и расход/производительность будут разные. Т. е. нужно тестить на мобилках двух типов.
Сами замеры надо производить сделав сервис который будет вам собирать статистику расхода, работая в параллели. Пример его можно почерпнуть из исходников утилиты которая является стандартной и меряет сколько куда энергии ушло.

Для Android 2.3+ уже процессоры на мобилках по 2 ядрышка - но их пока мало.

Submitted by Necro on
Quote:
DekaSoft писал(а):
Только вот нужна ли такая точность?
Но вот мне кажется у каждой мобилки своя архитектура девайса и каждая наверное по своему жрет батарею. Так что думаю напрямую снять заряд с одной батарее определенного девайса не прокатит. Мне бы в каком-нибудь обобщенном процентном соотношении.
Submitted by MaxImuS on
Quote:
Necro писал(а):
Сами замеры надо производить сделав сервис который будет вам собирать статистику расхода, работая в параллели. Пример его можно почерпнуть из исходников утилиты которая является стандартной и меряет сколько куда энергии ушло.
Для Android 2.3+ уже процессоры на мобилках по 2 ядрышка - но их пока мало.
А что это за волшебная стандартная утилита, да еще и с исходниками? =)
"Android 2.3" это хорошо, но у нас пока и для 1.5 должно запускаться.
Submitted by MaxImuS on
Quote:
MaxImuS писал(а):
Но вот мне кажется у каждой мобилки своя архитектура девайса и каждая наверное по своему жрет батарею. Так что думаю напрямую снять заряд с одной батарее определенного девайса не прокатит. Мне бы в каком-нибудь обобщенном процентном соотношении.
Все это так, но только какой ты хочешь получить результат? Типа "такая-та инструкция жрет столько-то, а такая-то - столько-то"? Так ведь опять же архитектура разная, и одни процы лучше выполняют одни инструкции, а другие - другие (ну по крайней мере в каком-то приближении Lol Честно говоря, думаю, что если пишете на Яве, то не стоит заморачиваться на подобные мелочи.
Submitted by DekaSoft on
Quote:
DekaSoft писал(а):
Все это так, но только какой ты хочешь получить результат? Типа "такая-та инструкция жрет столько-то, а такая-то - столько-то"? Так ведь опять же архитектура разная, и одни процы лучше выполняют одни инструкции, а другие - другие (ну по крайней мере в каком-то приближении Lol Честно говоря, думаю, что если пишете на Яве, то не стоит заморачиваться на подобные мелочи.
Результат хочу с погрешностью в пару процентов Smile для разных устройств. А про "не стоит заморачиваться" я думаю спешить нельзя. Когда после одной сессии (10-15 мин) игры батарея будет терять 60% заряда - ну и на фиг кому-то такая игра? =)
Submitted by MaxImuS on
Quote:
MaxImuS писал(а):
Когда после одной сессии (10-15 мин) игры батарея будет терять 60% заряда - ну и на фиг кому-то такая игра? =)
Да уж, думаю после недели таких игр, батарею вообще можно будет выкинуть :). Вряд ли такое возможно. В том смысле, что наверное невозможно так программно нагрузить проц андроида, чтобы он убил за такое короткое время батарейку. В любом случае, наверное тут только экспериментально можно какую-то зависимость выстроить. Хотя бы для 2-3 типичных андроид-устройств.
Submitted by DekaSoft on
Речь идет об системной утилите PowerUsageSummary.
Для Андроида 2.1 выход на нее я отпринскринил с Eclipse.
Исходники можете взять тут.
[img_assist|nid=1287|title=Скрины с Андрода для приложения PowerUsageSummary 1|desc=|link=popup|align=left|width=56|height=100]
[img_assist|nid=1288|title=Скрины с Андрода для приложения PowerUsageSummary 2|desc=|link=popup|align=left|width=56|height=100]
[img_assist|nid=1289|title=Скрины с Андрода для приложения PowerUsageSummary 3|desc=|link=popup|align=left|width=56|height=100]
[img_assist|nid=1290|title=Скрины с Андрода для приложения PowerUsageSummary 4|desc=|link=popup|align=left|width=56|height=100]


Submitted by Necro on
Quote:
Necro писал(а):
Речь идет об системной утилите PowerUsageSummary.
Для Андроида 2.1...
Ах да, у меня как раз мобилка с 2.1 и я, походу, натыкался на нее. За линк спасибо.
Submitted by MaxImuS on
> Да уж, думаю после недели таких игр, батарею вообще можно будет выкинуть.
> Вряд ли такое возможно. В том смысле, что наверное невозможно так программно

> нагрузить проц андроида, чтобы он убил за такое короткое время батарейку.

Да ну прямо таки, батарейки телефонов постоянно в таких режимах работают -- wi-fi+youtube на моей Xperia-mini-pro убивает батарейку примерно за час, проверено невольным экспериментом; и андроид тут не при чём.

Что-то мерять и делать из результатов какие-то сильно осмысленные выводу ИМХО нету надобности -- достаточно очевидно, что типовой джавафон не потянет игру сложнее пасьянса больше часа; с другой стороны оно и не нужно, для таких вещей есть PSP/DS которые спокойно 3-4 часа потянут.

Submitted by BLK Dragon on
Quote:
BLK Dragon писал(а):
Да ну прямо таки, батарейки телефонов постоянно в таких режимах работают -- wi-fi+youtube на моей Xperia-mini-pro убивает батарейку примерно за час, проверено невольным экспериментом; и андроид тут не при чём.
Так тож Вай-Фай. Там уже основной расход энергии идет на работу передатчика телефона. А я говорю про случай, когда приема-передачи как таковой нет и игрушка работает только локально. Я на своей мобиле когда в нете сижу - тоже часа за 3-4 укладываю, а если просто в игру играть - дык хоть целый день. Хотя если речь идет о игре, требующей подключения к внешним сетям, то это конечно надо учитывать. Только в этом случае опять же основной расход емкости батареи будет не за счет работы проца, а за счет поддержания связи.
Submitted by DekaSoft on
Quote:
DekaSoft писал(а):
Quote:
BLK Dragon писал(а):
Да ну прямо таки, батарейки телефонов постоянно в таких режимах работают -- wi-fi+youtube на моей Xperia-mini-pro убивает батарейку примерно за час, проверено невольным экспериментом; и андроид тут не при чём.
Так тож Вай-Фай. Там уже основной расход энергии идет на работу передатчика телефона. А я говорю про случай, когда приема-передачи как такового нет и игрушка работает только локально. Я на своей мобиле когда в нете сижу - тоже часа за 3-4 укладываю, а если просто в игру играть - дык хоть целый день. Хотя если речь идет о игре, требующей подключения к внешним сетям, то это конечно надо учитывать. Только в этом случае опять же основной расход емкости батареи будет не за счет работы проца, а за счет поддержания связи.
Submitted by DekaSoft on
> для таких вещей есть PSP/DS
у кого есть, а у кого-то и нет Smile шутка
> достаточно очевидно, что типовой джавафон не потянет игру сложнее пасьянса больше часа
Ну помимо пасьянса есть много интересных логических игр, для которых по моему PSP как раз на фиг не нужен, достал телефон, закачал игрушку, поиграл и забыл =), не вижу смысла таскать за собой в кармане psp. Как из примеров - "Angry Birds" (не кидать в меня палками за банальность). Для этой игры мне вполне хватает и мобилы. По наблюдениям после 30 мин игры процент зарядки падал почти на мизерные проценты. Ява или натив там, "я не вкурррсе, рребята" (с). Но я веду в сторону про "прожорливость" приложения к батарее из соображений, которые я уже выше приводил - кривые руки, кривой код, а так по исходникам и не скажешь, все стройненько Smile - сидеть и ждать час, а потом смотреть, сколько сожрала заряда меня не прет. Хочется уже на этапе какую-то статистику получать и не для осмысленных выводов, а просто, что уже что-то не так идет.

Ну как-то так... Meeting

Submitted by MaxImuS on
У нас на работе порядка 6+ моделей Android телефонов.
Разные по цене, качеству и т. д.
Главное в оптимизации потребления на мой взгляд это применять State паттерн обработки событий Activity. Т. е. игра на все действия пользователя и собственные должна иметь Sate чтобы производить действия только по потребностям (событиям чаще всего).
Если взять к примеру GameLoft игры то там Java в используется только для запуска их энжена на c++ который все делает работу.
Сам engine использует ускорение через OpenGL ES интерфейс и соответственно 3D игры без аппаратного ускорителя он не запускает.

Это я к тому что для 2D (можно Java) и 3D (только С++) разные подходы лучше применять.

Submitted by Necro on
Quote:
Necro писал(а):
Это я к тому что для 2D (можно Java) и 3D (только С++) разные подходы лучше применять.
В той либе, которую я использую, вся нативная внутрянка (плюсы и gles). И для 2Д и 3Д. Просто она обернута в java.
Submitted by MaxImuS on
Ко всем сразу.

Я вообще про написание игр на JavaScript+HTML5 (которое якобы "будущее геймдева" бла-бла-бла). И про игры где посложнее рисование горстки спрайтиков -- там то никакой разницы не прочувствуется.

Поинт был в том, что не-нативный код требует большего количества машинных инструкций и в итоге быстрее жжёт батарейку на мобильных устройствах; т.е. предельно "казуальный" подход к разработке выливается в весьма неоптимальный код на CPU/GPU, на десктопе это всё пофигу, а на мобилках разница между "нормальными" и "казуальными" приложениями будет чудовищной (ну если только какие-то супер-мега-аккумуляторы не изобретут в ближайшие годы).

Причём нормально написаных приложений шансов увидеть практически не остаётся -- в новых телефонах даже firmware не успевают толком до ума довести как они уже снимаются с производства. И увеличение количества ядер тут ничего не порешает.

Submitted by BLK Dragon on
Quote:
BLK Dragon писал(а):
Поинт был в том, что не-нативный код требует большего количества машинных инструкций и в итоге быстрее жжёт батарейку на мобильных устройствах; т.е. предельно "казуальный" подход к разработке выливается в весьма неоптимальный код на CPU/GPU, на десктопе это всё пофигу, а на мобилках разница между "нормальными" и "казуальными" приложениями будет чудовищной (ну если только какие-то супер-мега-аккумуляторы не изобретут в ближайшие годы).
Это я прекрасно понял из первого твоего поста и не спорю Smile я просто задал в этой теме свой вопрос, что бы не плодить их. Вопрос состоял в том, как определить, насколько процентов сжирает батарею мое приложение? И все *tema_zakryta*
Submitted by MaxImuS on

В свое время такая же ситуация была и на настольных ПК. Я имею ввиду, что написать "более-менее" игру на чем-то, кроме ассемблера было практически невозможно. А потом пошло-поехало и сейчас игры уже даже не пишут - их рисуют в графических редакторах. Думаю, что пройдет какое-то время и мы еще увидим Dark Basic для Android-а. Wacko

Submitted by DekaSoft on

> А потом пошло-поехало и сейчас игры уже даже не пишут - их рисуют в графических редакторах.

Пример игры "нарисованной в графическом редакторе" в студию! (завершённой игры, которая продаётся)

Даже Unreal при всём своём гламурном toolset'е требует программирования, даже если это по большей части "визуальный" Kismet/Matinee.

Submitted by BLK Dragon on

GameDev.by