AJAX — это возможность веб-страницы пообщаться с сервером, оставаясь при этом все той же самой страницей (не хочется пересказывать подробности технологии, их вполне можно прочитать здесь). Очень здорово, теперь мы можем подгружать новые данные в страницу, не перегружая ее целиком (а перегружая ее часть). Это настоящий Web 2.0, добро пожаловать.
Начнем с плюсов. Подгрузка контента без перезагрузки страницы происходит несколько быстрее, действительно, ведь загружать теперь надо в два-десять раз меньше.
Если страница содержит какие-то данные, которые можно и не показывать сразу, а подгрузить впоследствии при необходимости, — это тоже неплохая возможность удачно применить AJAX. Вместо последовательной сборки целой страницы и последующего ее отображения теперь можно перейти к параллельной подгрузке ее частей, изначально загружая только некую канву, в которую затем впишутся недостающие элементы.
Загрузка контента с помощью AJAX разрывает связь между адресом страницы и ее содержимым
Теперь о минусах. После каких-то манипуляций с AJAX-компонентами мы получили страницу с новым контентом и все тем же адресом. Это достаточно важный момент, чтобы повторить это еще раз: адрес страницы остается тем же, контент в ней меняется. Адрес больше не является каким-либо гарантом контента — теперь это только достаточно абстрактное название некоего интерфейса, но не контента как такового.
Это означает, что у контента больше нет того надежного имени, той ниточки, из которой соткана Всемирная паутина. Вы читаете страницу, нажимаете кнопки, переходите по меню, видите нечто интересное, но увы — копируя адрес из браузера, уже нельзя быть уверенным, что он приведет туда, куда хотелось бы.
Может показаться, что проблема несколько надумана — ну не будут работать прямые ссылки, велика ли беда? Достаточно велика, если вспомнить, что фактически весь веб-инструментарий опирается на идею контента, доступного по ссылке. Само понятие URL (Uniform Resource Locator) несет в себе эту идею: ссылка — это путь к ресурсу. Что делает браузер, когда пользователь нажимает кнопку «Назад»? Возвращает пользователя на предыдущую страничку. Если на странице происходили какие-то изменения с помощью AJAX, кнопка не сработает, пользователь не вернется к предыдущему шагу, как он хотел бы. Нет, формально все правильно, страничка — это одно, ее содержимое — это другое, но как быть несчастному пользователю, не подозревающему, что произойдет? Более того, несчастный пользователь, возможно, поймет, что что-то прошло не так, и очень захочет вернуться к прежнему состоянию, но увы — кнопка «Вперед» тоже не ведет его к прежнему состоянию.
Стандартная функциональность браузера может работать не так, как этого ожидает пользователь
Что происходит, когда нажимается кнопка «Обновить»? Забудьте о всех изменениях, произошедших на странице с помощью AJAX, страница будет перезапрошена и перезагружена. Что пользователь внесет в «Закладки» или «Избранное», если у него больше нет адреса для того, что он видит перед собой?
Для некоторых «пользователей» придется дублировать функциональность, выполненную на AJAX
Это еще не все. Знаете, кто по-настоящему расстроится, не увидев вашего замечательного контента по ссылке? Поисковые машины. Извините, это не пользователи, и у них не браузеры, они не нажимают на кнопки, не вызывают эти хитрые функции JavaScript и не увидят ничего, кроме того, что сервер вернет по ссылке. Да, это означает, что все модные меню нужно дублировать обычными ссылками. Да, это означает, что вместе с новым продвинутым интерфейсом нужно где-то повторить и классическую дедовскую схему навигации. Если, конечно, вам важно мнение поисковиков о вашем сайте, а заодно, конечно, и бедолаг-пользователей, которые зашли на ваш сайт с отключенным JavaScript.
А вы ведете статистику по своему сайту? Вам интересно, откуда и куда переходят посетители, какие страницы наиболее посещаемы? А, вы используете счетчики третьих компаний, таких как «Рамблер», «Хотлог», «Майкаунтер», «Бигмир»? Тогда не обижайтесь: статистика больше не отражает реальной картины. Вызов счетчика связывается с адресом страницы, в рамках которой он был вызван. Разорвана связь между адресом и контентом — счетчик уже не в состоянии выполнять свои функции адекватно.
Вы показываете баннеры на страницах своего сайта? Теперь переход к новой порции контента не означает еще один показ баннера. Нет, конечно, можно и сами баннеры тоже подгружать с помощью той же технологии, но будьте осторожны: вы в одном шаге от накрутки баннеров.
Небольшой экскурс в историю. Идея сделать страницу более гибкой, разбив ее на логические части, которые можно было бы независимо перегружать, далеко не нова. В свое время HTML предлагал фреймы как решение этой проблемы. Что интересно, проблемы эта технология имела очень похожие, а именно: ссылка не вела к контенту. Если быть совсем точным, то проблема была даже обратной: у каждого элемента контента был свой адрес. Но, во-первых, он был скрыт в недрах фреймовой структуры (что осложняло выделение прямой ссылки на нужный контент), а во-вторых, прямая ссылка вела исключительно на этот контент, при этом остальные логические части страницы терялись. Время показало, что фреймы как технология имеют очень узкую специфичную область применения и практически исчезли из Интернета.
Итак, AJAX — не панацея и не «серебряная пуля», но ведь должно же быть место этой технологии, раз вокруг нее столько шума и на нее такая мода. Где же? Во-первых, любое не публичное место, недоступное поисковикам и вообще другим людям, а таких мест достаточно много. Администраторская панель любой CMS, интерфейсы веб-почты, любые интерфейсы, защищенные паролями, — персонализированные сервисы, все, что доступно пользователю только под залог логина и пароля и, следовательно, другим пользователям недоступно. Все те места, где связь адреса страницы с контентом попросту не нужна, например из соображений приватности или в концепции общей защиты каких-либо данных. Во-вторых, AJAX можно использовать в любом не связанном с контентом месте страницы. Подгрузка полнофункционального редактора, вставка смайлика, список последних сообщений с форума. Все, что не является в полной мере контеном и не связано логически с адресом страницы.
Никлаус Вирт (о котором, конечно, тоже можно узнать на «Википедии») на вопрос, что он считает важным в организации информационных систем, ответил примерно следующее: «Мы ратуем за хорошо документированную, четкую, логичную декомпозицию системы, представленную множеством тщательно сформулированных и детально описанных непротиворечивых интерфейсов». Осмысливая эту идею в контексте интернет-страниц, можно сказать, что адреса страниц, URL, — это интерфейсы информации, контента, средства связи множества информационных систем, начиная от сложнейших поисковых машин и заканчивая школьником, нетвердо набирающим сакраментальные <a href=. Это отличные, тщательно описанные интерфейсы, которые работают. И AJAX — как отличное средство улучшить работу многих систем, так и прекрасная возможность испортить ее.
Ссылки по теме
Статья получена: hostinfo.ru