Молодой AJAX
Часто приходиться слышать от начинающих веб-программистов следующие фразы:
«А есть ли смысл учить javascript, ведь уже AJAX придумали?»
Этот вопрос равноценен следующему: «стоит ли мне учиться читать, ведь уже физику придумали». Смысл учить Javascript есть только потому, что это отдельная технология предназначенная для динамической манипуляции над страницей, и лишь небольшая часть возможностей этого языка потребовалась чтобы AJAX получил свою жизнь. Прочитать про то, какую роль сыграл Javascript в AJAX можно в этой книге.
«Сейчас уже нету смысла делать сайты не на AJAX»
Это одно из главных заблуждений о AJAX. Сайты не делаются на AJAX! На самом деле, AJAX это не отдельная(non-standalone) технология, а сумма технологий, причем отвечающая только за транспортировку данных, поэтому правильно говорить: "Сайт будет использовать методику AJAX для доставки/отправки данных на сервер".
«WEB 2.0 полностью построен на AJAX»
Специально для программистов:Web 2.0 != AJAX;
Нет и еще раз нет, WEB 2.0 это все лишь набор «нечетких заповедей и представлений» от Тима Ов..Рейлли (стандартами это трудно назвать), выполняя которые, ваша веб-разработка попадет в категорию «стандарта WEB 2.0». Про AJAX в своих представлениях, Тим Ов..Рейлли не упоминал.
Основная идея появления WEB 2.0, как в принципе и всех open-source начинаний - это досадить производителям дорогого софта своими бесплатными, но одновременно качественными продуктами, при этом умело зарабатывая :). Причем WEB 2.0 в свои объятья сразу же принял крупных игроков с их успешными проектами (google, flickr, youtube), таким образом укрепив свои начинания и успех. Все-таки каким-то краем AJAX там есть, но это лишь одна из многих красивых и современных технологий примкнувших к WEB 2.0 по желанию ее идеологов.
«Теория AJAX»
AJAX (Asynchronous JavaScript And XML), по сути, не является технологией, скорее это идея фонового взаимодействия веб-страницы с удаленным сервером через специальную компоненту встроенную в ваш браузер. Если посмотреть глубже в саму сущность, то AJAX — это сумма нескольких самостоятельных технологий, которые могут быть эффективно использованы вместе.
Обозначим компоненты без которых AJAX был бы не возможен:
- JavaScript - асинхронные запросы отправляются c его помощью. Не забываем, что для связи используется специальная компонента взаимодействия c сервером, у каждого браузера она может быть своя, хотя возможно взаимодействие и без специальной компоненты.
- XML - данные от сервера идут именно в этом формате (хотя это и не обязательно, можно использовать любой другой формат), преобразовываются и визуализируются, используя Document Object Model(DOM)
- HTML&CSS - отношение к технологии AJAX косвенное, так сложилось, что многие относят визуальные javascript манипуляции над HTML и CSS к аббревиатуре AJAX - это одно из самых ярких заблуждений. Возникло данное заблуждение из-за того, что javascript фреймворки зачастую включают в себя, как возможность создавать различные эффекты, так и набор функционала для асинхронной передачи, еще одной первопричиной можно назвать то, что javascript -эффекты и AJAX часто одновременно присутствуют на сайтах или веб-приложениях.
«Классический подход»
Классические Веб-приложение работает примерно следующим образом: большинство действий пользователя вызывает обращение к серверу. Сервер занимается обработкой запроса (принимает данные), производит некоторые манипуляции с ними, и возвращает пользователю HTML страничку. (Подобный подход изначально разрабатывался для того, чтобы использовать Веб как хранилище гипертекстовых документов). В принципе тут немного отличий от методики AJAX, просто задача обращения к серверу ложится на браузерную компоненту, которая как принимает, так и возвращает данные, но страница при этом не перегружается.
Классический подход удобен для разработки, но не использования. Что делает пользователь, пока сервер выполняет свою работу? Правильно, он ждет. И, с выполнением каждой следующей операции, он снова ждёт, и так при смене каждой страницы. Очевидно, что если бы нам пришлось разрабатывать концепцию Веб с нуля, то мы бы избавились от необходимости заставлять пользователя часто ожидать перезагрузки страницы. Если весь интерфейс уже загрузился, почему взаимодействие пользователя с программой должно прерываться, как только программе понадобились некоторые данные с сервера?
«Современный AJAX подход»
Суть методологии Ajax – это свести к минимуму цикл «передачи данных/пауза, ожидания ответа» и постараться сделать общение пользователя с конкретным веб-сайтом как можно ровнее.
Все пользовательские запросы, обычно отправляемые веб-серверу, вместо этого направляются Ajax-движку посредством JavaScript. Движок принимает решение – необходима ли загрузка данных с сервера или нет(возможен случай,когда некоторые данные уже закешированы). Если данные необходимо отправить или загрузить – это происходит в фоне и независимо от самого веб-приложения, не прерывая процесс общения пользователя с веб-сайтом. Данные отправляются и принимаются асинхронно, обычно используя XML представление.
Добавим следующее: технология AJAX на текущий момент не совсем пригодна для полноценного внедрения в веб-сайт. Почему? перечислим некоторые ограничения:
- Индексирование. «Пауки» поисковых машин так же не всегда успешно справляются с индексацией таких страниц. В принципе, можно обойти данное ограничение путем создания фиктивных ссылок, но решение далеко не и самых красивых и точных.
- Ссылки. Это то, что раздражает чаще всего. Представьте страничку, которая отображает список городов с возможностью фильтрации через выбор страны в списке выбора. Многие сайты сейчас делают это через AJAX и подобные технологии, перерисовывая список без изменения адреса странички. То есть вместо выбора страны в параметрах страницы (11) адрес странички остается тем же, а выбор пользователя в списке передается на сервер либо отдельно. Это страшно неудобно для пользователя, т.к. нет возможности в этом случае сохранить в адрес странички с уже сделанным выбором страны. Другой пример: search.live.com. Безусловно, показ всех результатов запроса без разбивки на страницы впечатляет, но вряд ли это удобно.
Кнопка «Назад»
По данным исследователей, кнопка браузера «Назад» является вторым по популярности средством навигации после перехода по ссылке. То есть, пользователь всегда рассчитывает на возможность вернуться на одну страницу назад. Веб-странички, которые созданы с использованием Аякса, такую возможность не поддерживают, потому что их содержание создается «на лету». Чтобы как-то это исправить, можно запрограммировать соответствующую логику на JavaScript и сделать ссылку «Назад», щелчок на которую позволит пользователю перейти на предыдущую страницу. Второй вариант, более универсальный и чаще всего легче реализуемый, – использовать невидимый IFRAME, который будет накапливать историю переходов.
Неопределенное время ответа
Время ответа сервера на запрос не определено — может пройти несколько секунд, а может и несколько минут. И пользователь начинает сильно нервничать, грызть ногти и, наконец, закрывает страничку — ведь браузер никак не отображает, что там что-то происходит :). Чтобы не доводить пользователя до невроза, нужно вставить на страничку хотя бы надпись «Идет загрузка». Более сложное решение — использование отклика системы со стороны сервера.
Если вас не напугали эти ограничения, продолжим...
RIA! EUREKA!
В использовании AJAX на веб-сайте есть какой-то смысл, но круг задач, которые можно возложить на данную технологию все таки стоит ограничить.
Последнее время все более и более популярными становятся принципы RIA (Rich Interenet Application). Развитие данных принципов уже принесло, а в недалеком будущем скорее всего сделает революцию в области Веб-приложений. О RIA уже много сказано, поэтому лучше один раз увидеть, чем сто раз прочитать, RIA фрейморки впечатляют backbase.com, bindows.net, extjs.com
Все это дает возможность использовать AJAX как платформу для веб-приложений (именно веб-приложений, а не сайтов), интерфейсные возможности которых не будут уступать возможностям обычных "оконных" windows или linux приложений. Это идею сразу же подхватили Интернет-гиганты google и yahoo, которые на данный момент усиленно развивают почтовые клиенты, фотоколлекции, приложения для работы с таблицами, текстовые редакторы и прочие продукты, но уже веб-ориентированно. По мнению эскпертов, именно on-line приложения в ближайшем будущем частично, а может быть и полностью заменят нам любимый набор Office от дядюшки Билли.