Официальной информации об оборудовании Ionic нет, но есть факты, которые сложно скрыть если разобрать часы. Например, Ionic построен на системе на кристалле Toshiba’s TZ1200, технические данные которой являются общедоступными.
TZ1200 - платформа для маломощных HR-мониторов и недорогих умных часов. ЦП представляет собой микроконтроллер ARM Cortex-M4F с FPU одинарной точности, работающий на частоте 120 МГц, в сочетании с простым ускорителем 2D-графики, способным выполнять масштабирование, вращение, бит-бит и альфа-смешивание. Для сравнения, Apple Watch первого поколения имеют полнофункциональное ядро процессора ARMv7 с тактовой частотой 1/2 ГГц в сочетании с очень мощным графическим процессором PowerVR OpenGL ES. Даже не близко. Однако платформа TZ1200 потребляет значительно меньше энергии, обеспечивая 4 дня непрерывного мониторинга ЧСС в случае Ionic. Многие скажут, что это большое дело.
Разработчики могут создавать приложения для Ionic с SVG и JavaScript, работающие как на часах, так и на телефоне. Разметка SVG компилируется во что-то, что эффективно обрабатывается встроенным 2D-графическим процессором. Если вам интересно, как получается, что такой маломощный микроконтроллер может выполнять JavaScript, ответ - JerryScript - интерпретатор ES5, разработанный Samsung для проекта IoT.js, который также использовался в часах Pebble.
JerryScript - это чистый интерпретатор, специально разработанный для микроконтроллеров и оптимизированный для низкого использования памяти. Вы не можете ожидать никаких умных оптимизаций, характерных для современных виртуальных машин JS. Нет JIT, объекты и контексты закрытия являются хеш-таблицами и т. Д.
Однако представление байт-кода и структур данных очень компактно; использует сжатые 16-битные указатели на 8-байтовое выровненное адресное пространство. Это достигается за счет максимального общего размера кучи 512 КБ и максимум 64 КБ или меньше объектов, выделяемых одновременно (если Fitbit не отключил сжатие указателей). Каждый объект содержит 10-битный счетчик ссылок, поэтому у вас не может быть более 1024 ссылок на один и тот же объект.
Платформа не может сравниться с популярными платформами для умных часов Android и iOS, она скорее похожа на Pebble. Однако это не означает, что платформа бесполезна или не способна. Это просто другой вид баланса, и в случае, если вы не собираетесь обрабатывать числа на запястье, это должно подойти для многих задач.
Взглянем на SDK внимательнее
Во-первых, он несовместим с Pebble. Та же виртуальная машина JerryScript, совершенно другой API. SDK в настоящее время находится в стадии бета-тестирования (можно ожидать, что вскоре все изменится), и в нем есть как хорошие, так и плохие стороны. Хорошо то, что с SVG довольно приятно работать, и довольно легко создавать такие простые вещи, как циферблаты. А вот плохие вещи ... ты поймешь.
На данный момент вы можете использовать только онлайн IDE. Нет ни эмулятора, ни отладчика, ни контроля версий, ни интеграции с диспетчером пакетов npm, ни у вас нет контроля над процессом сборки. Это действительно плохо, и из-за этого довольно сложно создать что-либо сложное. Это делает практически невозможным одновременную работу нескольких разработчиков над одним и тем же проектом. Очень странно и сложно объяснить, почему Fitbit решил в качестве первого шага приложить усилия к онлайн-среде IDE, а не к набору инструментов CLI и популярных плагинов IDE.
Уже из-за упомянутого выше SDK в его текущем состоянии скорее игрушка. Однако это не должно помешать вам создать циферблат своей мечты. Это по-прежнему простая задача, потому что у SDK есть несколько хороших деталей.
Причина, по которой это просто, заключается в том, что пользовательский интерфейс декларативно описывается с помощью подмножества SVG и CSS, а элементы SVG можно перемещать, масштабировать и вращать из JS. Итак, для работы циферблата вам понадобится меньше экрана с кодом JS.
Говоря о JS, IDE использует компилятор TypeScript для преобразования ES7 и TypeScript в ES5, а также сборщик модулей RollupJS для подготовки пакетов. Так что не утруждайте себя удалением неиспользуемого кода из проекта, накопительный пакет сделает это за вас.
Архитектура приложения
В простейшем случае приложение Ionic состоит из двух частей:
- /app
- JS, выполняемый на часах; - /resources
- Ресурсы SVG / CSS / png / jpeg, используемые часами.
Приложение может (или не может) включать JS-часть, выполняемую на телефоне, которая может выполнять HTTP-запросы, получать доступ к API телефона и связываться с часами через нечто подобное веб-сокету.
Пользовательский интерфейс декларативно определяется SVG, который является статическим и находится в /resources/index.gui
. Этот файл обычно бывает очень длинным и сложным. Когда это произойдет, вы можете разделить его на несколько *.gui
файлов, которые следует импортировать с помощью <link rel="import" href="filename.gui" />
.
Вы можете использовать классы CSS для стилизации элементов SVG. По умолчанию включен главный styles.css
файл, но, как и в случае с .gui
файлами, вы можете разделить его на несколько *.css
файлов, которые должны быть включены в .gui
с помощью <defs><link rel="stylesheet" href="filename" /></defs>
Что касается файлов JS, они поддерживают стандартную директиву ES6 import
, что упрощает декомпозицию.
Важно понимать, что вы не можете генерировать элементы SVG из JS. Это означает, что вы не можете делать довольно простые вещи, например рисовать линии и точки где угодно. Все, что вы можете делать, это манипулировать существующими элементами SVG, например отображать / скрывать, перемещать, вращать, масштабировать и изменять их стили. Это не так уж плохо, просто немного странно, ведь вам нужно заранее определить все элементы SVG в *.gui
файлах и скрыть их с помощью display="none"
.
Следовательно, говоря языком MVC, часть JS - это чистый контроллер, а статические файлы SVG / CSS определяют представления.
Вывод
SDK оставляет смешанные чувства. Хотя действительно приятно определять пользовательский интерфейс с помощью SVG и JavaScript, SDK имеет серьезные ограничения, не позволяющие Ionic считаться «конкурентом Apple Watch», как его назвали несколько рецензентов.
Посмотрим, изменится ли оно в будущем. Однако для простых вещей, таких как циферблаты или мое приложение для спидометра, бета-версия SDK подойдет лучше всего. Я потратил около 24 часов общего времени на код, чтобы создать свое приложение, не зная заранее платформу, что, в конце концов, является потрясающим результатом.