«Совершенный Ajax» — новый подход к построению web-приложений, при котором web-сервер не генерирует ни строчки HTML-кода и взаимодействует с внешним миром только посредством web-служб; а клиентский интерфейс реализуется только на основе клиентских HTML, CSS, JavaScript.
Статья состоит из двух частей. В первой части — более живой и провокационной я постараюсь заинтересовать проблемой, рассказать о технологии «Совершенный Ajax» и показать её применение на примере нашего проекта «Система Интерактивного Тестирования Знаний „Синтез“» (который имеет ряд интересных особенностей, таких, как использование серверного JavaScript на платформе Mozilla Rhino, прототипно-ориентированная ORM и поддержка SPARQL — языка запросов к Semantic Web).
Вторая часть – более занудная будет содержать много технических деталей и выйдет в следующий раз.
Попробуйте угадать: к какой архитектуре относятся web-приложения?
К клиент-серверной говорите? Я ожидал, что Вы так ответите…
Что ж, давайте разберёмся. В клиент-серверной архитектуре выделяют [1]:
Сервер — отвечает за хранение данных и бизнес-логику приложения.
Клиент — отвечает за взаимодействие с пользователем.
Реализация бизнес-логики на сервере и взаимодействие с пользователем на клиенте чётко разделены.
Преимущества клиент-серверной архитектуры очевидны; мы их все знаем:
Бизнес-логика не смешивается с пользовательским интерфейсом.
Можно реализовать несколько клиентов с разными пользовательскими интерфейсами: интерфейс командной строки, оконный Windows-интерфейс, Flash, web-интерфейс, мобильный интерфейс и т.д.
Клиентский компьютер не требователен к ресурсам;
И т.д.
Но, относятся ли web-приложения к клиент-серверной архитектуре?
Действительно, в web-приложениях есть сервер, отвечающий за бизнес логику приложения.
Но! За реализацию интерфейса отвечает не клиент, а тоже сервер. На сервере происходит обработка клиентской формы. Сервер генерирует HTML-код пользовательского интерфейса.
Клиент, т.е. браузер лишь визуализирует уже готовый HTML-код интерфейса.
Это, фактически, то же самое, что прицепить к серверу монитор и объявить этот монитор клиентом…
Здесь, правда, есть одна тонкость. Следует различать два понятия: web-приложения и систему «браузер — web-сервер». Web-приложения работают поверх браузера и web-сервера, так же как Java-приложения работают поверх JVM, приложения на .Net работают поверх .Net Framework, а протокол HTTP работает поверх TCP/IP.
Система «браузер — web-сервер» действительно имеет клиент-серверную архитектуру: web-сервер принимает и обрабатывает запросы, а браузер визуализирует результат.
Однако, здесь мы говорим не о системе «браузер — web-сервер», а о работающих поверх неё web-приложениях.
Вряд ли такой подход можно назвать полноценной клиент-серверной архитектурой. Он имеет много недостатков:
Смешивание бизнес-логики и пользовательского интерфейса;
Сложно реализовать несколько пользовательских интерфейсов;
Сторонни программы не могут обращаться к серверу (если не написан специальный api);
Большая часть нагрузки по обработке интерфейса ложится на сервер.
И т.д.
Впрочем, мы знаем в истории пример подобной архитектуры.
В 70-годы были распространены мейнфреймы.
Мейнфрейм — такой огромный железный сундук (сервер), к которому подключались рабочие станции (клиенты).
Причём, рабочая станция представляла собой просто монитор с клавиатурой.
И любые действия клиента на рабочей станции обрабатывалось на сервере,
порой даже такие как обработка нажатия на клавишу и обрисовка экрана
[2].
Ну, мы знаем, насколько популярны мейнфреймы сегодня…
Конечно, в современных web-приложениях часть интерфейсной логики реализуется на клиенте с помощью JavaScript.
Часть данных загружается с помощью Ajax и визуализируется именно на клиенте.
Но, тем не менее, многие действия связанные с пользовательским интерфейсом, по-прежнему, выполняются на сервере. Использование Ajax сейчас во многом даже усугубляет ситуацию, т.к. приводит к разбрасыванию реализации интерфейса между серверным и клиентским кодом.
Так вот, я предлагаю подход «Совершенный Ajax», который призывает развить идею Ajax до логического конца и полностью отказаться от использования сервера для реализации пользовательского интерфейса web-приложений.
Подход «Совершенный Ajax» построен на следующих принципах:
Реализует только бизнес-логику приложения и не генерирует ни строчки HTML-кода;
Взаимодействует с клиентом посредством web-служб: принимает текстовые запросы и возвращает только данные;
Реализуется только на основе клиентских HTML, CSS, JavaScript.
Взаимодействует с web-сервером посредством объектно-ориентированной библиотеки-обёртки над web службами;
Используется исключительно семантическая вёрстка.
Элементы управления (вкладки, меню, деревья и т.д.) описываются высокоуровневыми HTML-конструкциями.
Библиотека контролов придаёт HTML-конструкциям внешний вид и функциональность соответствующего элемента управления, просто навешивая нужные стили и обработчики событий, не меняя при этом HTML-код элемента.
Любой сторонний разработчик может реализовать свою версию пользовательского интерфейса, причём не только на HTML, но и на Flash, Windows, Mac и т.д.
Опишу эту архитектуру на примере нашего проекта «Система Интерактивного Тестирования Знаний „Синтез“».
В концепции «Севершенный Ajax» сервер должен удовлетворять одному-единственному условию: не генерировать ни строчки HTML-кода и осуществлять связь с внешним миром посредством web-служб. Во всём остальном его реализация ничем не ограничена.
Здесь я опишу структуру сервера в нашем проекте, т.к. она имеет ряд интересных особенностей: использование серверного JavaScript на платформе Mozilla Rhino, прототипно-ориентированная ORM и возможность использования SPARQL — языка запросов к Semantic Web.
Однако, Ваша реализация сервера может быть совершенно иной и совсем не похожей на нашу.
СУБД — хранит данные.
Прототипное объектно-ориентированное ядро бизнес-логики — реализует объектную модель и функциональность приложения.
ORM — связывает базу данных с прототипным ядром бизнес логики.
Web-сервер — открывает функции программы для внешнего мира посредством web-служб.
Все данные хранятся в обычной реляционной базе данных.
Причём, используется только «чистый» SQL, без надстроек конкретных СУБД: хранимых процедур и т.д. Это делает базу данных независимой от той или иной СУБД.
Связь базы данных с объектным ядром бизнес-логики приложения осуществляется через прототипно-ориентированную ORM.
Вся объектная модель приложения и его бизнес-логика заключена в прототипно-ориентированном ядре.
Ядро написано на серверном JavaScript, на базе платформы Mozilla Rhino.
Несмотря на недооцененность многими разработчиками, JavaScript — удивительно мощный, гибкий и красивый язык, превосходящий в ряде случаев по гибкости и функциональным возможностям таких монстров, как Java или C#. И мы используем по максимуму его возможности, такие как прототипно-ориентированное ООП, объекты-как-хеши, функциональное программирование, замыкания и т.д.
Также, прототипно-ориентированная парадигма JavaScript позволяет гораздо более гибко работать с базой данных через ORM.
Mozilla Rhino компилирует JavaScript в байт-код JVM.
Благодаря этому, наш серверный JavaScript не становится «вещью в себе», а может использовать всё обилие наработок мира Java.
Вообще, серверный JavaScript на основе Mozilla Rhino — это отдельная большая тема, и я постараюсь написать ряд статей по этому вопросу.
ORM служит для связи реляционной БД с прототипным объектно-ориентированным ядром бизнес-логики.
Она позволяет не просто связывать две модели, но и строить объектные запросы любой сложности.
Например:
найди классы, ученики которых по тестам 10 самых молодых преподавателей
имеют за осень средний балл больший, чем по весенним тестам 10 самых старших.
Использование ORM для прототипно-ориентированных языков — это мега круто!
Реляционная модель БД гораздо ближе к прототипной модели ООП, нежели к классовой. Поэтому, применение прототипного похода решает ряд проблем, присущих современным класс-ориентированным ORM (см., например, статью Теда Ньюарда «Вьетнам компьютерной науки»).
Прототипная парадигма ORM позволяет удивительно гибко работать с данными.
Ведь, в отличие от классового подхода, где структура объекта жёстко задана; при прототипном подходе объект может иметь произвольный набор полей, а также объединять внутри себя и наследовать любые другие объекты.
В частности, это даёт возможность обращаться к БД на SPARQL — языке запросов Semantic Web.
К сожалению, за такую гибкость приходится платить производительностью. Наша прототипная ORM пока существенно уступает по скорости работы обычным классовым ORM. Но мы работаем над этим.
Прототипно-ориентированная ORM — также отдельная большая тема, и я постараюсь посвятить ей ряд статей.
Web-сервер выполняет только одну-единственную задачу — связывает ядро бизнес-логики с внешним миром посредством web-служб.
При этом он не генерирует ни строчки HTML-кода.
Web-службы не просто открывают доступ к ограниченному предопределённому набору функций, а полностью реализуют все возможности приложения.
Например, при наличии соответствующих прав, через web-службы можно осуществить объектный запрос неограниченной сложности и получить произвольную выборку объектов.
Наше приложение может иметь сколько угодно интерфейсных реализаций, разработанных любыми производителями.
Однако, оно всегда имеет в комплекте «родной» web-интерфейс.
Здесь я опишу его структуру.
Интерфейсное ядро — объектно-ориентированная библиотека, реализующая всю клиентскую логику и управляющая интерфейсом клиента.
Библиотека-обёртка — объектно-ориентированная обёртка над web-службами, осуществляющая связь клиентского интерфейса с сервером.
Семантическая вёрстка — используется для описания элементов интерфейса (контролов) посредством обычных HTML-конструкций;
Библиотека контролов — придаёт HTML-конструкциям внешний вид и функциональность соответствующего контрола.
Интерфейсное ядро — объектно-ориентированная JavaScript-библиотека, управляющая всем клиентским web-интерфейсом:
Реализует интерфейсную логику приложения.
Взаимодействует с объектной моделью приложения на web-сервере через библиотеку-обёртку.
Взаимодействует с элементами управления (контролами) посредством библиотеки контролов.
Осуществляет встраивание клиентского интерфейса нашего программы в web-интерфейсы других приложений.
Это даёт неограниченные возможности для создания мэшапов. В отличие от обычных мэшап-приложений, таких как GMaps, YouTube и т.д., которые позволяют встраивать только небольшую часть интефейса; в нашем приложении интерфейс может встраиваться полностью.
Например, благодаря этому, на стороннем сайте можно не только разместить модуль прохождения тестирования, но и модуль редактирования тестов, а также управления правами пользователей.
Управляет стилями интерфейса.
Стили не только позволяют задавать оформление программы, но и полностью контролируют расположение и свойства интерфейсных элементов. Особенно это полезно, когда программа работает не самостоятельно, а, встроенна в другое приложение в виде мешапа.
Управляет локализацией интерфейса.
Клиентская реализация (как родной web-интрфейс, так и интерфейсы сторонних производителей) взаимодействует с объектной моделью и бизнес-логикой на сервере посредством web-служб.
Однако, работать с web-службами напрямую неудобно: это лишает нас объектного подхода и понижает упровень абстракции.
Поэтому, гораздо удобнее работать через объектно-ориентированную библиотеку-обёртку над web-службами. Библиотека обёртка позволяет прозрачно работать с серверной объектной моделью приложения.
Нам надо получить объект Морковкин Вася и сделать его учеником 3 «А» класса.
Вместо низкоуровневой работы с web-службами, мы прозрачно работаем
с объектной моделью приложения посредством библиотеки-обёртки Sintez.
//Получаем с сервера объект Морковкин Вася
var objStudent1 = Sintez.getStudent ("this.firstName = 'Вася' and this.secondName = 'Морковкин'");
//Получаем объект 3 "А" класс
var objClass1 = Sintez.getClass ("this.getClassNuber() = 3 and this.liter = 'А'");
//Делаем Васю учеником этого класса
objClass1.addStudent (objStudent1);
А уже библиотека-обёртка кодирует вызов методов объектов как команды web-служб, пакует объекты перед отправкой их на сервер и распаковывает после получения.
Для того, чтобы свою версию интерфейса мог реализовать любой сторонний производитель на любой платформе, мы выпускаем библиотеки-обёртки не только для web-интерфейса на JavaScript, но и для других распространённых технологий: .Net, Java, Delphi, Flash и др.
Если для какой-то платформы мы ещё не выпустили библиотеку-обёртку, сторонний разработчик может её реализовать и самостоятельно по заданной спецификации.
Кстати, если серверный язык программирования поддерживает интроспексию, библиотека обёртка может генерироваться автоматически.
Для этого, программа на сервере должна исследовать собственную объектную модель, и на её основе сгенерировать код библиотеки-обёртки для основных языков программирования.
Пока мы пишем библиотеки-обёртки вручную, но, думаю, скоро доберёмся и до автоматической генерации.
Весь пользовательский интерфейс реализуется на основе чистых xHTML, CSS и JS.
Несмотря на сильную недооцененность разработчиками, xHTML/CSS/JS является очень мощной и гибкой технологией построения интерфейсов.
Использование семантической вёрстки является высокоуровневым программированием; а несемантическая мешанина тегов – низкоуровневым.
И если при старом подходе, когда HTML-код генерировался сервером, мы, несмотря на всё уродство, могли себе позволить низкоуровневый несемантический подход;
то при подходе «Совершенный Ajax» мы просто обязаны использовать высокоуровневую семантическую вёрстку!
Элементы управления (деревья, меню, вкладки и т.д.) описываются обычными высокоуровневыми HTML-конструкциями.
Например, меню или дерево описывается как обычный список, а вкладки, как набор div’ов.
А уже библиотека контролов делает из этих HTML конструкций элементы управления.
Библиотека контролов придаёт HTML-конструкциям внешний вид и функциональность соответствующего элемента управления.
При этом HTML-код элемента не меняется, а на него просто навешивая нужные стили и обработчики событий.
Для превращения HTML-конструкции в элемент управления, надо просто вызвать соответствующий JS-объект библиотеки контролов.
Работа с контролом происходит через вызов методов объекта.
Поскольку контролы не меняют код своей HTML-конструкции, элемент управления может быть «на лету» превращён в другой элемент простой заменой JS и CSS-классов.
Дерево описывается не мешаниной тегов, а единой высокоуровневой HTML-кострукцией: вложенным списком.
<li>
Элемент 1
<ul>
<li>
Элемент 1-1
</li>
<li>
Элемент 1-2
</li>
</ul>
</li>
<li>
<!--...-->
</li>
</ul>
!!!]]>
Для придания списку внешего вида и функциональности дерева, создаётся JS-объект Controls.Tree.
Работа с деревом происходит через вызовы методов объекта.
//Создаём дерево
var objTree1 = new Controls.Tree ($("ulTree1"));
//Выделяем все узлы дерева, вызывая метод selectAll () созданного объекта
objTree1.selectAll ();
В любой момент мы можем превратить дерево в меню, просто создав объект Controls.Menu:
//Превращаем дерево в меню
var objMenu1 = new Controls.Menu ($("ulTree1"));
В скором времени я собираюсь опубликовать статью на эту тему: «HTML — самый недооценённый язык построения интерфейсов в мире (СНЯПИМ)».
Подробности технической реализации подхода «Совершенный Ajax» — во второй части.
↑ Речь идёт о клиент-серверных приложениях с конечным пользователем. В клиент-серверных приложениях вроде «клиент — сервер базы данных», пользовательский интерфейс, разумеется, отсутствует.
↑ Позже, у мейнфреймов появились так называемые «умные клиенты», которые обладали собственным процессором и памятью, а наиболее продвинутые могли даже проверить форму перед отправкой на сервер. Это очень напоминает нынешнюю робкую попытку передать часть интерфейсной логики web-приложения на клиент с помощью Ajax.
«Совершенный Ajax». Часть 2 (скоро будет)
4 подхода к построению клиент-серверных web-приложений (скоро будет)
HTML — самый недооценённый язык построения интерфейсов в мире (СНЯПИМ) (скоро будет)
Серверный JavaScript на платформе Mozilla Rhino (пока не готово)
Прототипно-ориентированная ORM (пока не готово)
Попробую резюмировать :)
Делаем передачу данных в формате XML или JSON (или каком-нибудь еще) и получаем "Совершенный AJAX".
Не понятно о какой библиотеке контролов идет речь. Вашей собственной (вы ее продаете или свободно распространяете?) или существующей?
@Владимир
Делаем передачу данных в формате XML или JSON (или каком-нибудь еще) и получаем "Совершенный AJAX".
Главное в подходе «Совершенный AJAX» то, что:
А XML или JSON — это лишь средство для работы web-служб.
Не понятно о какой библиотеке контролов идет речь. Вашей собственной (вы ее продаете или свободно распространяете?) или существующей?
При подходе «Совершенный AJAX» можно использовать любую клиентскую библиотеку контролов — как самописную, так и уже готовую: ExtJS, Dojo, jQuery UI и т.д.
Главное, чтобы превращение HTML-элемента в соответвующий контрол, по возможности, происходило только путем навешивания стилей и обработчиков событий, без изменения его кода (DOM структуры).
В нашем проекте мы, по некоторым причинам, используем собственную внутреннюю библиотеку; однако, в принципе, при подходе «Совершенный AJAX» можно использовать библиотеки любых производителей.
>> web-сервер не генерирует ни строчки HTML-кода
Допустим, серверный передает дату. Он может сделать несколькими способами:
1) как метку времени;
2) отформатированную функцией date (или аналогичной).
Формально ни в том, ни в другом случае HTML разметки нет.
Но очевидно, что во втором случае разработчику клиентского интерфейса работать будет сложнее, особенно если при форматировании будет отброшена часть информации (например, секунды).
Поэтому, на мой взгляд, требование "web-сервер не генерирует ни строчки HTML-кода" нужно изменить на "web-сервер не форматирует данные вообще".
Идея понравилась, звучит очень заманчиво, но у такой схемы есть и минусы:
- большАя часть нагрузки перекладывается на клиентскую машину. Уже сейчас есть сайты, использующие AJAX, при просмотре которых мой комп начинает тормозить. А уж если в JS будет какая-нибудь ошибка, приводящая к утечкам памяти...
- стандартный интерфейс становится недоступным для альтернативных клиентов, типа мобильных или текстовых браузеров (можно под них написать свою клиентскую часть, но кто этим будет заниматься?).
- если при обычном "несовершенном" AJAX поисковики проиндексируют на сайте хоть что-то, то тут, подозреваю, с индексацией будет совсем плохо.
Так что этот принцип подходит далеко не для всех проектов.
Кстати, а что вы используете для обмена данных между JS и сервером: JSON или XML (просто статистику собираю)?
@Глеб Белогорцев
Так что этот принцип подходит далеко не для всех проектов.
Совершенно правильно. Для сайтов, разумеется, следует использовать традиционный подход.
Архитектура «Совершенный Ajax» предназначена для web-приложений (программ).
Это и решает многие приведенные Вами проблемы:
с индексацией будет совсем плохо
web-приложениям (таким, как GMail, GMaps и т.д.) не требуется индексация в поисковиках.
стандартный интерфейс становится недоступным для альтернативных клиентов, типа мобильных или текстовых браузеров
Вообще, обычные web-приложения итак далеко не всегда доступны для альтернативных клиентов.
При подходе «Совершенный Ajax», сделать интерфейс доступным для альтернативных клиентов, становится даже проще, чем в обычных приложениях.
Поскольку элементы управления (вкладки, меню, деревья) получаются из соответствующих HTML-конструкций простым навешиванием CSS и JS-классов, их очень просто адаптировать для альтернативных устройств.
Например, если у нас есть контекстное меню (требующее правую кнопку мыши и не работающее на мобильных устройствах), его можно превратить в понятный для мобильника многоуровневый список, просто заменив соответствующие CSS и JS-классы.
От клиента требуется только поддержка JavaScript.
В самом тяжелом случае, кода клиент не поддерживает даже обычный JavaScript, можно реализовать альтернативный облегченный интерфейс. Поскольку при подходе «Совершенный Ajax» бизнес-логика полностью отделена от интерфейса, написать альтернативный клиент гораздо проще, чем при традиционном подходе.
Ждем продолжения!надеюсь будет!
Маленький технический вопрос:
//Получаем с сервера объект Морковкин Вася
var objStudent1 = Sintez.getStudent ("this.firstName = `Вася` and this.secondName = `Морковкин`");
//Получаем объект 3 "А" класс
var objClass1 = Sintez.getClass ("this.getClassNuber() = 3 and this.liter = `А`");
//Делаем Васю учеником этого класса
objClass1.addStudent (objStudent1);
Посмею предположить, что в данном коде выполняется как минимум три синхронных AJAX-запроса. я прав?
@MX
Посмею предположить, что в данном коде выполняется как минимум три синхронных AJAX-запроса. я прав?
Да, действительно, в приведенном примере генерируются три запроса (по одному на каждую операцию).
Понятное дело, что при написании сложных функций, запросы, если это возможно, сначала помещаются в буфер, а затем скопом отсылаются на сервер.
//Получаем с сервера объект Морковкин Вася
var objStudent1 = Sintez.getStudent ("this.firstName = `Вася` and this.secondName = `Морковкин`");
//Получаем объект 3 "А" класс
var objClass1 = Sintez.getClass ("this.getClassNuber() = 3 and this.liter = `А`");
//Делаем Васю учеником этого класса
objClass1.addStudent (objStudent1);
Это работать не будет. Идёт асинхронный запрос, код продолжает выполняться, и ответ придёт позже. может быть у xmlhttp и есть какой-то флаг, позволяющий исполняться синхронно(и блокировать джаваскрипт то ответа), но тогда выходят жуткие тормоза в системе(особенно если сюда цикл воткнуть).
Получается, что надо на сервер передавать описание действий, а сервер их должен выполнить и отдать ответ.
Но никак не сделать вот такие три запроса, бизнес логика придумана совсем не для клиента, а только для сервера
Это хорошая идея по поводу совершенного AJAX, но все равно предварительно потребуется каким-то образом иметь у пользователя все необходимые скрипты и непосредственно странички.
Тема интересная, без сомнения...
И у нее есть будущее, так как, именно в этом направлении рынок и собирается развиваться!
Помнится для одной практической работы - " ... "
На клиент изначально засылалась оболочка, а в виде "транспортного протокола общения" был выбран XML...
А плюсы всего этого:
+ Логика отделена от данных
+ Возможность смены дизайна
+ И самый главный не нужно каждый раз генерировать на сервере "визуальную" составляющую...
+ ...
+ ...
Но есть и один главный минус, чтобы пользоваться всем этим добром нужно сначала доставить оболочку клиенту...
//Получаем с сервера объект Морковкин Вася var objStudent1 = Sintez.getStudent ("this.firstName = `Вася` and this.secondName = `Морковкин`"); //Получаем объект 3 "А" класс var objClass1 = Sintez.getClass ("this.getClassNuber () = 3 and this.liter = `А`"); //Делаем Васю учеником этого класса objClass1.addStudent (objStudent1);
Алик, я солидарен с ZeusTheTrueGod
Хотелось бы услышать ваш комментарий по поводу необходимости отложенной обработки таких асинхронных вызовов.
Т.е. строчку objClass1.addStudent (objStudent1) имеем право выполнять только после того, как убедимся, что на первые два вызова сервер уже ответил.
@ZeusTheTrueGod, @Сергей Титенко
откуда Вы взяли, что XHR выполняется асинхронно ???
var data = getData(); // XMLHttpRequest
alert ("data is " + data);
такая конструкция работает, хотя если бы она была асинхронной - то алерт всегда давал бы <null>, "" или "undefined".
var data = getData (); // XMLHttpRequest
alert ("data is " + data);
Подтверждаю, все работает асинхронно.
Спасибо :) А вас, кстати, уже за "висячую" пунктуацию стоит уважать :) Да и вообще у вас шаблон грамотно сверстан. Извините за оффтоп :)
Решение точно универсальное, но нагрузка, как на клиент, так и сервер должна быть зверская. JavaScript будет постоянно загружать браузер на полную, тут только нормальные настольные компьютеры и ноутбуки все будут быстро переваривать. Для всего портативного и маленько приодеться создавать специальные оптимизированные версии избавляясь от всего лишнего.
Аякс это сильное подспорье в юзабилити, мне нравится
интересно, интересно)
Информативненько. Давно уже собираюсь освоить аякс, только это сложновато для меня пока что. Проще поручить исполнителю и не вникать во все тонкости, нельзя же уметь всего.
А когда дело дайдёт до облачных технологий! Вот где будет прогресс! Ох простите, кажется я вру. Старо же как мир. Сервер и терминалы. Извращённость начинается тогда, когда слабый и дырявый браузер используют все программы на компьютере пользователя, а сервером выступает сам же этот компьютер.
Однако скажу и в защиту. Модель SaaS - вот где истинная прелесть клиент серверных приложений на базе веб сервисов и AJAXS. Пишем клиенты на смартфоны, кпк, пк, веб клиенты, а логика остаётся всё таже. Безумно удобно, а главное не приходится париться, не взломали ли вашу программу и пользуют не заплатив. Теперь всё считаем только на сервере и отключаем клиента к чертям, если не заплатил=)
Suh
Так уже давно её используют.
Попробую реализовать!
Как раз есть подходящий проект.
Спасибо за идею!
Suh поверь мне сегодня ты создал завтра эту прогу все равно взломают, (если конечно толковая прога), как и хрумера которую говорили в свое время не взломать )
Serega, хрумер не лучший пример.
Идей много, но средств мало, увы..
Да вообще аякс мощная технология
А что, хрумера взломали уже?
Олег, да как бы давно 3, 5 ломаные уже.
А что хрумер взломали уже?
Очень было интересно почитать, спасбио. А насчет Хрумера: он давно взломан.
Написано много и некоторая информация не совсем понятна.
У вас обзоры хоть и больщие, но весьма занимательные. Жду еще новинок)
Не вижу новых обзоров. Напишите что нибудь новенькое.
Для такого "Совершенный Ajax" немало денег нужно отвалить. Иной прэкт: http://www.ysadba.org
Возможно, JavaScript будет постоянно загружать браузер на полную.
Вообще реализовать это решение на Аяксе очень правильное дело!
Попробую реализовать!
Интересное решение, только не будет ли сильно это влиять на производительность.
я новичёк, подскажите пожалуйста что такое хрумер?
На сколько сложно на аяксе реализовать чат? Я знаю, что готовых решений куча, но там прийдётся встраивать в cms...
Аякс сложноват в освоении, ява скрипт я както еще осоил, а аякс чето пока туговато(
Определенно нравится аякс, и пунктуация, и "асинхронность". Буду пытаться осваивать...
Ваш аякс уже давно устарел, сейчас есть более мощные проги.
только не будет ли сильно это влиять на производительность.
Думаю будет
ajax умирает
http://www.flashcollection.net
Решение точно универсальное, но нагрузка, как на клиент, так и сервер должна быть зверская. JavaScript будет постоянно загружать браузер на полную, тут только нормальные настольные компьютеры и ноутбуки все будут быстро переваривать. Для всего портативного и маленько приодеться создавать специальные оптимизированные версии избавляясь от всего лишнего.
Хороший блог и статьи полезные. Спасибо автору
Нравится мне эта технология! Но очень тяжело осваивать!
Отличная статья! Давно пытаюсь освоит Аякс
Система Интерактивного Тестирования Знаний „Синтез“» (который имеет ряд интересных особенностей, таких, как использование серверного JavaScript на платформе Mozilla Rhino, прототипно-ориентированная ORM и поддержка SPARQL — языка запросов к Semantic Web).
ко не будет ли сильно это влиять на производительность.
Система Интерактивного Тестирования Знаний „Синтез“» (который имеет ряд интересных особенностей, таких, как использование серве
Хороший блог и статьи полезные. Спасибо автору
Спасибо! Интересная статейка, прочел з удовольствием....
Спасибо! Интересная статейка, прочел з удовольствием....
Автору респект! нельзя не добавить этот блог в закладки!
Очень хорошо написано.
Из-за тонкости аякс откажутся выбирать.
Dofollow блог Кощея.
Давно пытаюсь освоить Аякс, но очень сложно поддается!
Попробую реализовать!
Как раз есть подходящий проект.
Спасибо за идею!
По-моему Ajax уже отходит и устаревает!
Аякс жив и будет жить еще долго, кто бы что не говорил.
Когда-то изучал Аякс, но подзабросил и все ужезабыл!
Возможно, это одна из самых интересных блогов, которые я когда-либо видел. Интересная статья, Забавные комментарии. Так держать!
Я согласен с вами. Вы дали нам с такой большой сбор информации. Большую работу вы сделали, разделяя их на все просто великолепно.
Немногожко дописал + подключил api google (JQ), сейчас юзаю быстродействие на высоте....Но всё же хочу сделать min-версию...
По статье - в целом, все четко расписано. Но я ожидал конкретных рекомендаций к действию. А так пока только общая структура. Надеюсь во второй скучной части будет больше технических деталей.
Очень интересно также будет почитать про СНЯПИМ.
Описано подробно и понятным языком, надо будет попробовать.
Новости Lineage 2 на http://powerstr1ke.ru
Отличная статья, узнал много нового об Аяксе! Очень подромно рассписано!
Хорошая познавательная статья, много узнал об Аяксе!
Ajax уже устарел
Такая подробная статья! Спасибо за разъяснения! Нашел для себя много нового!
Спасибо за статью, хоть аякс устарел но мне ново.
Аякс дело нужное, можно, конечно и без него обойтись, но для большего качества лучше использовать. Спасибо за полезную статью;)
Очень познавательная статья и полезный материал, спасибо!
Спасибо за статейку, давно хотел подучить Аякс
Много узнал нового об Аякс! Спасибо автору!
Полезная статья, материала по этой теме не так уж много!
Это элементарная работа с API, клиент (JS) отправляет запрос серверу и получает ответ в формате JSON, его и парсить не надо, простой eval :)
спасибо! Хорошие советы!
Э-э-э-х, Аякс дело нужное однозначно. По такому материалу может и я с ним смогу наконец-то разобраться по-человечески.
Спасибо, узнал много нового для себя.
ПриватБанк
Очень полезная статья! Признателен автору!
Так подробно разжевали! Даже я немного понял!
хотелось бы еще пост про чат на аякс
Очень информативный пост, много из него узнал!
Спасибо за очень полезный и доступный материал!
Ну насколько я понял, с этой проблемой справился код jquery ajax
Отличный пост, много для себя нового узнал
Это один из хороших статей, вы можете найти в сети объяснить все в деталях, касающихся темы. Я благодарю вас за ваше время обмениваться мнениями и идеями, чтобы много читателей там.
Классная статья! А последний камент просто убил=)))
Хорошая статья, но для себя усвоил не очень много, т.к. хорошо разбирабсь в аякс
Хорошая статья!!! Спасибо!
Интересная статья, но все же это можно реализовать чуть-чуть проще
Спасибо за статью, AJAX это будущий стандарт для ВЕБ'a
Хорошая статья, очень познавательная!
Уже давно стараюсь изучить Аякс, но все не осилю
Еще скажу, меня волнует что это достаточно медленно и могут быть частые ошибки.
5.
И т.д.
Мейнфрейм Впрочем, мы знаем в истории пример подобной архитектуры. В 70-годы были распространены мейнфреймы. Мейнфрейм — такой огромный железный сундук (сервер), к которому подключались рабочие станции (клиенты). Причём, рабочая станция представляла собой просто монитор с клавиатурой. И любые действия клиента на рабочей станции обрабатывалось на сервере, порой даже такие как обработка нажатия на клавишу и обрисовка экрана [2]. Ну, мы знаем, насколько популярны мейнфреймы сегодня…
Мейнфрейм Впрочем, мы знаем в истории пример подобной архитектуры. В 70-годы были распространены мейнфреймы. Мейнфрейм — такой огромный железный сундук (сервер), к которому подключались рабочие станции (клиенты). Причём, рабочая станция представляла собой просто монитор с клавиатурой. И любые действия клиента на рабочей станции обрабатывалось на сервере, порой даже такие как обработка нажатия на клавишу и обрисовка экрана [2]. Ну, мы знаем, насколько популярны мейнфреймы сегодня…
В XML-языках все элементы, вне зависимости от их смысла оформляются с помощью общих синтаксических конструкций.
Автору спасибо за очередной отличный пост) Уже 5 ваших постов прочитал) очень доволен))
Хороший мануальчик, много из него почерпнул!
всё более вытесняя формат традиционных информационных сайтов
действия клиента на рабочей станции обрабатывалось на сервере, порой даже такие как обработка нажатия на клавишу и обрисовка экрана [2]. Ну, мы знаем, насколько популярны мейнфреймы сегодня…
И не поленились же столько написать! Хорошая статья, очень познавательная
Если выводить сайдбар через AJAX, это не будет считаться за клоакинг?
Мейнфрейм Впрочем, мы знаем в истории пример подобной архитектуры. В 70-годы были распространены мейнфреймы. Мейнфрейм — такой огромный железный сундук (сервер), к которому подключались рабочие станции (клиенты). Причём, рабочая станция представляла собой просто монитор с клавиатурой. И любые действия клиента на рабочей станции обрабатывалось на сервере, порой даже такие как обработка нажатия на клавишу и обрисовка экрана [2]. Ну, мы знаем, насколько популярны мейнфреймы сегодня…
Неплохой получился ликбез! Много нового узнал!
Классная статья. Теперь хоть представление имею об Ajax. Плохо только, что страницы на Ajax поисковики не понимают пока. Или понимают?
Никак не осилю эту технологию! Но теперь все начало проясняться!
Супер.Так диржать.
Отличная статья, столько нового узнал!
Прям не пост, а настоящая лекция! Очень понравилось!
Очень подробная статься, немного стало все прояснятся!
Отличный материал и очень доступно изложено!
Интересная вышла статья, очень познавательная!
#
Библиотека контролов придаёт HTML-конструкциям внешний вид и функциональность соответствующего элемента управления.
#
При этом HTML-код элемента не меняется, а на него просто навешивая нужные стили и обработчики событий.
Очень подробный урок, спасибо!
Аякс это классная технология только вот изучить ее не зная азов программирования будет очень трудно!!!
Очень подробный урок! Побольше бы таких!
Отличный материал, очень доступно описанный!
У меня вот освоить Ajax все времени не хватает, основные принцыпы только знаю!
Очень много узнал об Ajax из этой статьи! Довольно познавательно!
Ajax супер, все отлично описано!
Много узнал,спасибо за такую статью
Статья полезная для новичков, почерпнуть знаний можно трошки
C Аяксом все никак не разберусь - все руки не доходят!
День добрый!
Имеется идея часов "Jikhan" - "Global".
Разработка для муниципалитетов имеет диаметр в 27 метров.
Часы одновременно способны показывать реальное время и реальное событие с любой точки земли, откуда смогут исходить информации на электронных носителях.
Макет данных часов (в простой механической разработке обкатывался в течении нескольких лет.
Отличная статья, очень много почерпнул об Аяксе!
Wow, that’s an incredibly nice read!
Отличная статья
Очень интересная статья! Подробно и доступно все описанно!
Очень интересно было почитать, хоть с Аяксом и не работаю!
Много узнал,спасибо за такую статью
Хороший материал, все доступно и легко!
Спасибо за такую интересную статью здесь. Я искал что-то подобное в течение достаточно долгого времени, и, наконец, я нашел его здесь.
Увлекательный пост. Я думал на эту тему, так что спасибо за разделение этого с нами! Это мой первый визит на ваш сайт.
Это действительно полезно. Я хотел бы попросить, если все будет правильно, если я заявляю, некоторые, что на мой личный блог. Конечно, я бы компенсировать вам, и ссылку здесь.
Тема замечательная. Я на самом деле никогда не думаю я, возможно, отличное чтение к этому времени, пока не найду этот сайт. Я благодарен за информацию. Спасибо, что вы так любезно поделились информацией с нами.
А я Аякс не изучал, но все-равно было интересно!
Здравствуйте, я люблю читать через вашу почту, я хотел оставить комментарий мало, чтобы поддержать вас и желаем вам хорошего продолжения. Желаю вам удачи во всех ваших усилий.
большой вдохновляющей статье. Я довольно много довольны вашей хорошей работы. Вы ставите действительно полезной информации. Ждем вас в следующем посте.
Интересная информация, хоть я и далек от програмщины!
Ценная информация и отличный дизайн у тебя здесь! Я хотел бы поблагодарить Вас за обмениваться мнениями и времени на то, что вы пост!
Спасибо за это читать мат. Ну, это мой первый визит на ваш сайт! Но я восхищаюсь драгоценное время и усилия, которые вы вложили в него, особенно в интересных статей вы разделяете здесь!
ателен для исполнения!
ателен для исполнения!
Я вот с аяксом никак не разберусь, но после этой статьи все стало проясняться!
#
Смешивание бизнес-логики и пользовательского интерфейса;
#
Сложно реализовать несколько пользовательских интерфейсов;
#
Сторонни программы не могут обращаться к серверу (если не написан специальный api);
#
Большая часть нагрузки по обработке интерфейса ложится на сервер.
Прекрасный материал, очень подробно, легко и доступно!
Спасио за статью, узнал много нового, буду работать над сайтом.
Отличный материал, много для себя почерпнул, теперь буду использовать!
#.Net работают поверх .Net Framework, а протокол HTTP работает поверх TCP/IP.
Система «браузер — web-сервер» действительно имеет клиент-серверную архитектуру: web-сервер принимает и обрабатывает запросы, а браузер визуализирует результат.
Однако, здесь мы говорим не о системе «браузер — web-сервер», а о работающих поверх неё web-приложениях.
Подписался на обновление. Буду следить за вашими новостями.
Отличный урок, начал кое-что понимать об Аяксе!
Очень познавательная информация. Многое из написанного не знал.Спасибо за полезную статью.
Хорошая статья, много для себя узнал! Хоть я и не программирую, все-равно было интересно!
Вторая часть – более занудная будет содержать много технических деталей и выйдет в следующий раз.
Отличная статья, очень много из нее узнал об Ajax
Очень доступно и просто написана статья! Было очень интересно почитать!
<a href="http://holo-mf.ru" > Сайтик </a> <a href="http://yragent.ru/" >сделан </a> <a href="http://micro-form.ru"> очень </a> <a href="http://microform.su" >профессионально, </a> <a href="http://holomaster.ru" > и легко им пользоватся.</a> <a href="http://xn--h1aeecjamc8a.xn--p1ai" > И придратся не к чему, </a> <a href="http://микроформ.рф" > а я так люблю покритиковать... </a>
Отличный урок, теперь стал лучше понимать эту технологию!
Полезная инфа, очень доступно изложена!
1.
Бизнес-логика не смешивается с пользовательским интерфейсом.
2.
Можно реализовать несколько клиентов с разными пользовательскими интерфейсами: интерфейс командной строки, оконный Windows-интерфейс, Flash, web-интерфейс, мобильный интерфейс и т.д.
3.
Клиентский компьютер не требователен к ресурсам;
4.
И т.д.
Полезнинько :)
А то чет мне С++ поднадоел как-то :(
А почему в блог перестал писать-то интересные статкйки вроде получались...
При этом HTML-код элемента не меняется, а на него просто навешивая нужные стили и обработчики событий.
По этому пока не понятна ваша рекомендация использовать обе разметки.
да кстати, где еще статейки? интереснож
По этому пока не понятна ваша рекомендация использовать обе разметки.
По этому пока не понятна ваша рекомендация использовать обе разметки.
А почему в блог перестал писать-то интересные статкйки вроде получались...
Речь идёт о клиент-серверных приложениях с конечным пользователем. В клиент-серверных приложениях вроде «клиент — сервер базы данных», пользовательский интерфейс, разумеется, отсутствует.
Обычный Ajax - это большая нагрузка на сервер, а тут вроде все ОК, интересная идея :)
По этому пока не понятна ваша рекомендация использовать обе разметки.
Я думаю, что до тех пор, пока нет полной самостоятельности машин, и о чувствах их идти речь не может. Все будет лишь после полный автоматизации, но тогда, как уже говорилось, будет новая жизнь
По этому пока не понятна ваша рекомендация использовать обе разметки.
Я думаю, что до тех пор, пока нет полной самостоятельности машин, и о чувствах их идти речь не может. Все будет лишь после полный автоматизации, но тогда, как уже говорилось, будет новая жизнь
Классная статья, очень много нового узнал! Спасибо!
Очень полезная статья! Я много из нее почерпнул об аяксе!
Я думаю, что до тех пор, пока нет полной самостоятельности машин, и о чувствах их идти речь не может. Все будет лишь после полный автоматизации, но тогда, как уже говорилось, будет новая жизнь
По этому пока не понятна ваша рекомендация использовать обе разметки.
как мне кажется, толчок в развитии веб-технологий не помешал бы
Отличный материальчик, очень познавательная!
О как бы пригодилось, спасибки!
Отличная статья, столько и не знал об Аяксе!!!
спасибо за крутую статью
Классная статья, очень долго ее изучал, но зато много нового узнал!
Полезная статейка, много нашел интересного для себя! Буду дальше осваивать Аякс!
Отличная статья, очень подробно, просто и доходчиво все описано!
Отличный урок, очень познавательный!
Очень подробно все расписано! Много чего узнал!
Тоже самое происходит с электронной почтой, хотя социальные сети уже начинают сильно конкурировать.
таких, как использование серверного JavaScript на платформе Mozilla Rhino, прототипно-ориентированная ORM и поддержка SPARQL — языка запросов к Semantic Web
Хороший материал, все очень понятно расписанно!
уже совсем запутался, сколько этих языков программирования новых появляется...
Отличный материал, очень познавательный, для себя нашел очень много нового!
Раньше очень мало знал про аякс, а теперь нашел в статье очень много полезного!
Раньше очень мало знал про аякс, а теперь нашел в статье очень много полезного!
ьше очень мало знThis website has a lot of good quality stuff,By the way I am going to add this web publication to my favorites.
В настоящий момент мир вступает в эпоху расцвета богатых web-приложений.
Программы, работающие через Веб, все больше вытесняют традиционные десктопные приложения. Gmail, Google Map, online-офис, даже web-операционные системы… Список можете продолжить сами.
Parfumer
Новости Lineage 2, Aion, WoW, Tera на http://mmosoft.ru
зыков программирован
никак Аякс изучить не могу! А эта статейка помогла мне многое понять!
Уже давно интересуюсь Ajax-ом но никогда его неиспользую так как постоянно находжу компромисное решение при написании какой то странички. А статейка в самый раз, надо сохранить, пригодится.
Спасибо большое
Очень полезная статейка, нашел здесь много интересного для себя!
Не очень хорошо знаю Ajax, но эта статейка позволила заполнить некоторые пробелы!
статья действительно хорошая.
<a href="http://s-boutique.com.ua/detskoe.html?product_type=2875">детская обувь киев</a>
Информативненько. Давно уже собираюсь освоить аякс, только это сложновато для меня пока что. Проще поручить исполнителю и не вникать во все тонкости, нельзя же уметь всего.
Полезная статья, теперь немного больше знаю об Аяксе!
Очень полезная информация, нигде такого полезного материала об Аяксе не встречал!
Отличный материал, не знал многого об Аяксе!
Очень классно написанна статья, все понятно, читать легко!
Отличный материальчик! Много нового узнал!
Например, в Wiki-разметке для задания горизонтальной линии используют та конструкция внешне напоминает линию; для задания списка перед каждым пунктом ставят *, т.к. она внешне напоминает маркер списка.
Аякс дело нужное однозначно. По этому материалу может и я с ним смогу наконец-то разобраться по-нормальному.
Отличная статья! Помогла мне многое узнать об этой отличной технологии Аякс!
Хороший материал, начал лучше понимать аякс!
Никак руки не доходят изучить Аякс! Хотя кое-что теперь понял!
Чтож, придется просить пользователей присылать их по емейлу :)Это хорошая идея по поводу совершенного AJAX, но все равно предварительно потребуется каким-то образом иметь у пользователя все необходимые скрипты и непосредственно странички.
Раз It’s hard to sort the good from the bad sometimes, but I think you’ve nailed it. You write very well which is amazing
Отличный урок! Теперь немного знаю об Аяксе!
Всегда пытался освоить технологию Аякс! Теперь знаю ее намного лучше!
Логично
тема неплохая =) у неё есть будушее это факт!побольше бы таких тем