Иван Сагалаев о совмещении подходов к написанию Ajax-приложений

    По мере взросления технологии Ajax появляются разные техники программирования. В частности, за последние несколько лет сформировалось два независимых подхода к созданию Ajax-приложений.

    Об этой интересной проблеме рассуждает Фрэнк Соммерс на страницах своего блога. Он говорит, что к настоящему времени среди разработчиков удалось достигнуть некоторого консенсуса по вопросу, что считать приложением Ajax. В то же время существует гораздо больше разногласий по вопросам, как применять JavaScript и как распределять полномочия между клиентом и сервером.

    Речь идет о различных пакетах для разработки, в которых используется разный подход. Одни из них, такие как Dojo или Prototype, дают пользователю полную свободу работы со средствами JavaScript и ориентированы больше на клиентскую сторону. В то же время в других пакетах разработки все средства JavaScript «спрятаны» в компоненты JSF, а основная работа выполняется на сервере.

    Российский программист и веб-разработчик Иван Сагалаев более подробно рассказывает об этих двух подходах. При этом он подчеркивает, что два подхода вполне совместимы между собой, так что их можно удачно сочетать. Иван Сагалаев приводит примеры подобного сочетания.

    Первый подход к созданию 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-ответах.

    «Единственное, что мне пока не нравится в этом подходе, это то, что на серверной стороне несколько увеличивается объем работы», — заключает Иван в своем «Маниакальном веблоге».
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 20

      0
      Строго говоря, подход только один и Ajax'ом можно назвать работу исключительно с XML. Все остальное - технология с другим названием.
        0
        Можете пояснить, что вы имеете в виду?

        Технология называется XHMLHttpRequest, Ajax - это популяризаторский лейбл, и уж под ним понимают всё что угодно.
          +1
          Начнем с того, что называется все же XMLHttpRequest(см. например http://www.w3.org/TR/XMLHttpRequest/#xml… Соответственно ни о каком HTML или JSON речи не идет. Более того, абривеатура Ajax расшифровывается как Asynchronous JavaScript and XML (http://en.wikipedia.org/wiki/Ajax_%28pro… Собственно про HTML мы и тут не видим ;)
          Нет, я не против развития технологии. Более того, считаю, что в большинстве случаев генерация в ответ HTML-кода наиболее разумное решение (и сам такой подход использую). Но мы же не "тупые" заказчики, которые покупаются на красивые слова. Поэтому называть вещи надо своими именами. Поэтому называть статью "о совмещении подходов к написанию Ajax-приложений" минимум - не корректно.
            –1
            спасибо. в названии я опечатался, конечно. про то так рассшифровывается Ajax я, и, думаю, многие уже давно забыли. собственно, в той же статье на википедии: XML is sometimes used as the format for transferring data between the server and client, although any format will work, including preformatted HTML, plain text, JSON and even EBML.

            так что думаю уже название вполне оправданное, понятие давно расширилось
              –1
              Если бы все так расширялось, то слов - ложка, вилка, нож - не было бы. Были бы просто - столовые приборы ;)
              0
              ну ладно, все уже привыкли, что ajax это в первую очередь "aja" а потом уже "x". а термин прижился, и хорошо. не менять же.
                0
                Я к чему этот разговор завел - для заказчика Ajax - это красивая и популярная завлекаловочка. Для разработчиков - это своего рода паттерн разработки. А паттерн должен достаточно четко определять метод реализации. Вот представь - мы с тобой разрабатываем сервис, договорились, что у нас будет Ajax. Ты это понимаешь как передачу XML, а я - выдачу HTML. Т.е. нам придется дополнительно договариваться как будет реализовываться, чтобы приложение было более-менее цельным и в одном стиле написаным. А вот если бы мы ввели дополнительно термин, например, xAjax (eXtended) то уже было бы понятно с чем будем работать.
                  0
                  Даже в этом случае вам придется договориваться, что же под этим термином вы понимаете :)
                  Да в любом случае договариваться надо.
                    0
                    Если мы говорим о паттерне, то достаточно того, что каждый участник знает что из себя представляет этот паттерн. Собственно для этого и нужны паттерны, да и просто названия технологий.
                      0
                      Если о паттерне, то да. А разве ajax именно как паттерн имеет четкое определение (я здесь не берусь рассматривать расшифровку аббревиатуры именно как паттерн)? Как раз именно сложившаяся практика его использования (на мой взгляд, т.к. очень тесно работаю с технологией) - передача HTML кусков и JSON.
                        0
                        Фактически, в среде разработчиков, термин уже определяет паттерн. А вот то, что за ним при этом скрываются совершенно разные реализации - это плохо. Для разработчиков.
                          0
                          Ну это опять же разные точки зрения. Для меня ajax является не паттерном а некой парадигмой. А вот выработка паттернов еще только в процессе.
              –1
              да
                –1
                е54е
                  0
                  не верно. вместо XHMLHttpRequest Ajax можно построить на iframe. Ajax это не популяризаторский лейбл, а определение конкретного поведения страницы в браузере.
                  0
                  Хм.. ajax из технологии уже давно превратился в концепцию. Честно говоря, применение XML уже скорее исключение чем правило - все или JSON-ом кидаются, или же HTML-ными кусками. Те-же аяксовые библиотеки за редким исключением XML вообще не пользуют.
                    0
                    вы ошибаетесь. Ajax это всего лишь явление асинхронного обмена данными браузера с сервером. То есть любая реализация обновления страницы без полной её перезагрузки с сервера. Ни в названии, by в определении Ajax не присутствует обязательное упоминание XML. Зачастую и сам запрос может поизводиться без помощи XMLHTTPRequest - через скрытиые iframe.
                    –1
                      0
                      Вторая сложность: построение HTML полностью вручную с помощью методов DOM.

                      Ну, в определенных случаях, можно вообще отказаться от HTML, а в замен использовать XSL + XML.
                        0
                        Тем не менее уже давно имеются JS библиотеки, реализующие XSLT и XPath.

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                      Самое читаемое