По мере взросления технологии Ajax появляются разные техники программирования. В частности, сформировалось два независимых подхода к созданию Ajax-приложений. Об этой интересной проблеме рассуждает Фрэнк Соммерс на страницах своего блога (www.artima.com/weblogs/viewpost.jsp?thread=172720). Он говорит, что к настоящему времени среди разработчиков удалось достигнуть некоторого консенсуса по вопросу, что считать приложением Ajax. В то же время существует гораздо больше разногласий по вопросам, как применять JavaScript и как распределять полномочия между клиентом и сервером.
Речь идет о различных пакетах для разработки, в которых используется разный подход. Одни, такие, как Dojo или Prototype, дают пользователю полную свободу работы со средствами JavaScript и ориентированы больше на клиентскую сторону. В то же время в других пакетах разработки все средства JavaScript "спрятаны" в компоненты JSF, а основная работа выполняется на сервере.
Известный российский программист и веб-разработчик Иван Сагалаев более подробно рассказывает об этих двух подходах (www.softwaremaniacs.org/blog/2006/08/20/two-ajax-styles). При этом он подчеркивает, что два подхода вполне совместимы между собой, так что их можно удачно сочетать. Иван Сагалаев приводит примеры подобного сочетания.
Первый подход к созданию Ajax-приложений: передача HTML. Этот подход идеально подходит для страниц, которые при взаимодействии с сервером меняются незначительно. Например, некая форма, которая после отправки на сервер опять появляется на экране, а вместе с ней появляется какая-то дополнительная информация. В этом случае Ajax позволяет сократить количество данных, передаваемых по сети, принимая с сервера не всю форму с индикацией, а только саму индикацию. К плюсам такого подхода относится простота. Главный недостаток заключается в том, что при обновлении более сложных страниц, где меняются различные части, придется гонять от клиента к серверу большие объемы данных, а "весь смысл Ajax вырождается в отсутствие эффекта анимации иконки браузера в правом верхнем углу", пишет Сагалаев.
Второй подход к созданию Ajax-приложений: передача структурных данных. Это и есть суть Ajax в традиционном понимании, поскольку этот метод был придуман как раз для того, чтобы обратиться на сервер и получить описание какой-то части состояния системы, выраженной в XML. Плюс такого подхода - в максимальной гибкости. Можно придумать абсолютно любой формат и набор данных, который запрашивается у сервера, в котором будет в точности та информация, которой не хватает на клиенте, и ничего лишнего. На клиенте же с помощью Javascript'а можно изменить страницу как угодно.
Самый очевидный минус в передаче структуры - это гораздо больший объем и сложность программирования.
Первая сложность, по мнению Ивана Сагалаева, - это использование XML. Несмотря на то, что формат четкий и замечательный, в Javascript'е с ним можно работать только с помощью методов DOM. Впрочем, этот конкретный недостаток в последнее время решился с помощью формата JSON: данные возвращаются с сервера не в виде XML, а в виде кода Javascript.
Вторая сложность: построение HTML полностью вручную с помощью методов DOM. Но самое плохое, что этим самым в системе появляются два совершенно разных участка, в которых задается вид страницы: HTML-шаблон и код Javascript.
По мнению Ивана Сагалаева, два "несовместимых" подхода к созданию Ajax-приложений вполне можно совместить, если не ограничивать себя использованием только лишь XML. Применяются следующие методы:
- ответ с сервера передается в виде JSON-объекта;
- вещи, не связанные с генерацией HTML, выполняются скриптом, используя для этого данные из объекта;
- если нужно менять какие-то необычные участки HTML, то они передаются строками в том же самом объекте;
- изменяемые части HTML на сервере оформляются как небольшие включаемые шаблоны и используются и при начальном формировании страницы, и в Ajax-ответах.
Анатолий АЛИЗАР
Комментарии
А я все делал иначе. Написал библиотеку для автоматической генерации DOM (HTML) по шаблону. Теперь для использования JSON мне достаточно просто вызвать функцию build(json,tag,str), где json-полученный с помощью eval объект, tag-узел DOM для генерации содержимого, srt-шаблон. Теперь работаю с JSON просто и быстро.
p. s. Принимаю предложения о сотрудничестве(dojo-one@yandex.ru)