Ключевой технологией создания пользовательских интерфейсов для embedded-устройств на сегодняшний день является создание WEB-приложений. Преимуществом такого решения является платформонезависимость и отсутствие необходимости в ПО пользователя. Требуется только компьютер любой системы с уже установленным интернет-браузером. Необходимые интерфейсы в виде шаблонов HTML-страниц содержатся прямо в памяти вашего устройства и по запросам браузера “компилирутся” и отдаются встроенным НTTP-сервером.
Традиционный подход иллюстрируется этим рисунком, на котором показаны функциональные связи программных модулей.
Следует сразу сказать, что это нормальный подход и он действительно работает, хотя он и лишён некоторых удобств, появившихся в связи с выходом нового поколения браузеров. Эти новшества[1] привели к появлению AJAX-подхода в WEB-программировании, на сегодня вполне обустроенного и обеспеченного средствами отладки.
Можем ли мы что-либо получить для себя из новой технологии? В данном случае кое-что можем.
Есть такая задача не из самых приятных – парсить HTML-шаблон, искать среди потока текста метки, куда нам надо придётся подставлять вычисленные значения (представьте отчёт в виде таблицы – строки, колонки), интерпретировать их - подставлять вместо меток текст, и переправлять поток дальше – собственно серверу. А управлять этим парсером должен сам сервер в зависимости от принятого запроса. А размер запроса зависит, в свою очередь, от сложности и количества полей HTML-формы той страницы, с которой запрос посылается и этот размер может оказаться значительным для ресурсов вашего МК.
Рассмотрим альтернативную реализацию на основе AJAX.
Основная идея заключается в использовании практически неограниченных (по сравнению с возможностями МК) ресурсов браузера. По запросу браузера сервер отдаёт статические файлы, совершенно не интересуясь их содержанием. После загрузки страницы интерпретируются браузером, порождая поток коротких запросов к серверу. Эти запросы генерируются javascript в адрес виртуального файла (backend) , в который пишется или считывается соответствующая информация. На каждый такой запрос сервер отвечает коротким ответом, ничего лишнего. Можете вообще отдавать двоичные данные, хотя обычно отвечают строкой в родном для javascript JSON[2]-формате. Обработчик парсит строку (javascript имеет мощные встроенные средства для работы с текстом), и результаты вставляются в нужное место – например, ячейки таблицы.
С другой стороны, если пользователь хочет изменить единственное поле настроек, это делается без использования громоздких форм, единственным коротким запросом без перезагрузки страницы.
<body onload="init()"> .... </body>При этом вначале грузится статический контент, а только потом запускается скрипт.
Необходимо отметить, что область применения AJAX объективно ограничена временем реакции линии связи. Если в локальной сети это время пренебрежимо мало, то в сетях GRPS время от посылки запроса до получения ответа может достигать 2 секунд.
Из неочевидных вещей, которые следует иметь в виду – возможность подключения пользовательских javascript-файлов. Представьте, что ваш интерфейс позволяет распечатать прямо из окна браузера платёжку, форма которой отличается от региона к региону. Так вот, эта форма легко может быть изменёна пользовательским скриптом.
Полезные ссылки
Средства отладки
[1] Интерфейс XMLHttpRequest позволяет javascript обмениваться данными с сервером без перезагрузки страниц.
[2] JSON- Javascript Simple Object Notation. Минималистский формат описания объектов javascript. Широко применяется как альтернатива XML. Позволяет передавать переменные, массивы, объекты, функции javascript. Очень простой и наглядный.
Значение 2 или "ОК" Массив [1,2,3,"f"] Объект {name:"80c51", pins:40, price:2.02} и т.д.
Gеneral