Официальной информации об оборудовании 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 часов общего времени на код, чтобы создать свое приложение, не зная заранее платформу, что, в конце концов, является потрясающим результатом.