Ajax: the good, the bad, the ugly. (Russian)

Аякс хороший, плохой, злой.

Технология AJAX уже прочно вошла в нашу жизнь, и примеры ее использования можно встретить на многих сайтах как в качестве вспомогательных элементов интерфейса, так и в качестве основного “движка” подачи информации. Не всегда в результате получается качественный сервис: зачастую технология используется в ущерб удобству и функциональности. Конечно, AJAX предоставляет замечательные возможности, но важно при этом не забывать о тех последствиях, которые влечет за собой ее неразумное использование…

Уже совсем не новая технология AJAX описана и обсосана множеством авторов, но позвольте еще немного поездить вам по ушам. Аякс - это возможность веб-страницы пообщаться с сервером, оставаясь при этом все той же самой страницей (не хочется пересказывать подробности технологии, их вполне можно прочитать здесь - http://ru.wikipedia.org/wiki/AJAX). Очень здорово, теперь мы можем подгружать новые данные в страницу, не перегружая ее целиком (а перегружая ее часть). Это настоящий Web 2.0, добро пожаловать. (http://ru.wikipedia.org/wiki/Web_2.0).

Начнем с плюсов. Подгрузка контента без перезагрузки страницы происходит несколько быстрее, действительно, ведь загружать теперь надо в 2-10 раз меньше. Если страница содержит какие-то данные, которые можно и не показывать сразу, а подгрузить впоследствие при необходимости – это тоже неплохая возможность удачно применить Аякс. Вместо “последовательной” сборки цельной страницы и последующего ее отображения теперь можно перейти к “параллельной” подгрузке ее частей, изначально загружая только некую канву, в которую затем “впишутся” недостающие элементы.
Теперь о минусах: после каких-то манипуляций с AJAX компонентами мы получили страницу с новым контентом и все тем же адресом. Это достаточно важный момент, чтобы повторить это еще раз: адрес страницы остается тем же, контент в ней меняется. Адрес больше не является каким-либо гарантом контента – теперь это только достаточно абстрактное название некого интерфейса, но не контента как такового.

Это означает, что у контента больше нет того надежного имени, той ниточки, из которой соткана “всемирная паутина”. Вы читаете страницу, жмете кнопки, переходите по меню, видите нечто интересное, но увы – копируя адрес из браузера уже нельзя быть уверенным, что он приведет туда, куда хотелось бы.

Может показаться, что проблема несколько надумана – ну не будут работать прямые ссылки, велика ли беда? Достаточно велика, если вспомнить, что фактически весь веб-инструментарий опирается на идею контента, доступного по ссылке. Само понятие URL (Uniform Resource Locator) несет в себе эту идею: ссылка – это путь к ресурсу. Что делает браузер, когда пользователь жмет кнопку “Назад”? Возвращает пользователя на предыдущую страничку. Если на странице происходили какие-то изменения с помощью Аякс, кнопка не сработает, пользователь не вернется к предыдущему шагу, как он хотел бы. Нет, формально все правильно, страничка – это одно, ее содержимое – это другое, но как быть вашему несчастному пользователю, не подозревающему, что произойдет? Более того, несчастный пользователь, возможно, поймет, что что-то прошло не так, и очень захочет вернуться к прежнему состоянию, но увы – кнопка “Вперед” тоже не ведет его к прежнему состоянию.

Что происходит, когда нажимается кнопка “Обновить”? Забудьте о всех изменениях, произошедших на странице с помощью Аякса, страница будет перезапрошена и перезагружена. Что пользователь внесет в “Закладки” или “Избранное”, если у него больше нет адреса для того, что он видит перед собой?

Это еще не все. Знаете, кто по-настоящему расстроится, не увидев вашего замечательного контента по ссылке? Поисковые машины. Извините, это не пользователи, и у них не браузеры, они не жмут на кнопки, не вызывают эти хитрые функции javascript, и не увидят ничего, кроме того, что сервер вернет по ссылке. Да, это означает, что все модные меню нужно дублировать обычными ссылками. Да, это означает, что вместе с новым продвинутым интерфейсом нужно где-то повторить и классическую «дедовскую» схему навигации. Если, конечно, вам важно мнение поисковиков о вашем сайте, а заодно, кончено, и бедолаг-пользователей, которые зашли на ваш сайт с отключенным Javascript.

А вы ведете статистику по своему сайту? Вам интересно, откуда и куда переходят посетители, какие страницы наиболее посещаемы? А, вы используете счетчики третьих компаний, таких как “Рамблер”, “Хотлог”, “Майкаунтер”, “Бигмир”? Тогда не обижайтесь: статистика больше не отражает реальной картины. Вызов счетчика связывается с адресом страницы, в рамках которой он был вызван. Разорвана связь между адресом и контентом, счетчик уже не в состоянии выполнять свои функции адекватно.

Вы показываете баннеры на страницах своего сайта? Теперь переход к новой порции контента не означает еще один показ баннера. Нет, конечно, можно и сами баннеры тоже подгружать с помощью той же технологии, но будьте осторожны: вы в одном шаге от «накрутки» баннеров.

Небольшой экскурс в историю. Идея сделать страницу более гибкой, разбив ее на логические части, которые можно было бы независимо перегружать, далеко не нова. В свое время HTML предлагал фреймы как решение этой проблемы. Что интересно, проблемы эта технология имела очень похожие, а именно: ссылка не вела к контенту. Если быть совсем точным, то проблема была даже обратной, у каждого элемента контента был свой адрес. Но, во-первых, он был скрыт в недрах фреймовой структуры (что осложняло выделение прямой ссылки на нужный контент), а во-вторых, прямая ссылка вела исключительно на этот контент, при этом остальные логические части страницы терялись. Время показало, что фреймы как технология имеют очень узкую специфичную область применения, и практически исчезли из интернета.

Итак, AJAX – не панацея и не «серебряная пуля», но ведь должно же быть место этой технологии, раз вокруг нее столько шума и на нее такая мода. Где же? Во-первых, любое непубличное место, недоступное поисковикам, и вообще другим людям, а таких мест достаточно много. Администраторская панель любого CMS, интерфейсы веб-почты, любые интерфейсы, защищенные паролями – персонализированные сервисы, все, что доступно пользователю только под залог логина и пароля и, следовательно, другим пользователям недоступно. Все те места, где связь адреса страницы с контентом попросту не нужна, например, из соображений приватности, или в концепции общей защиты каких-либо данных. Во-вторых, AJAX можно использовать в любом не связанном с контентом месте страницы. Подгрузка полнофункционального редактора, вставка смайлика, список последних сообщений с форума. Все, что не является в полной мере контеном, и не связано логически с адресом страницы.

Никлаус Вирт (о котором, конечно, тоже можно узнать на “Википедии”) на вопрос, что он считает важным в организации информационных систем, ответил примерно следующее: «Мы ратуем за хорошо документированную, четкую, логичную декомпозицию системы, представленную множеством тщательно сформулированных и детально описанных непротиворечивых интерфейсов». Осмысливая эту идею в контексте интернет-страниц, можно сказать, что адреса страниц, URL, это интерфейсы информации, контента, средства связи множества информационных систем, начиная от сложнейших поисковых машин, заканчивая школьником, нетвердо набирающим сакраментальные <a href=. Это отличные, тщательно описанные интерфейсы, которые работают. И AJAX – отличное средство как улучшить работу многих систем, так и прекрасная возможность испортить ее.

Статья опубликована в издании hostinfo.ru

Leave a Reply