
- •Розділ і: еволюція інструментальних технологій в середовищі Ruby on Rails
- •1. Знайомство з Ruby on Rails
- •2. Поговоримо про Ruby
- •3 . Філософія Ruby
- •4. Можливості Ruby
- •5. Переваги Rails
- •6. Філософія Ruby on Rails
- •7. Як працює mvc в Ruby on Rails?
- •8. Active Record
- •9. Скаффолдинг
- •10. Ajax (Asynchronous JavaScript and xml)
- •1. Популярність серед користувачів
- •2. Мови програмування
- •3. Концептуальна суть Rails та Django
- •4. Модель і база даних
- •5. Url Роутинг та контроллери
- •6. Контроллер, вид
- •7. Шаблон і форма
- •8. Адміністрування користувача
- •9. Ajax
- •10. Засоби для тестування
10. Ajax (Asynchronous JavaScript and xml)
Досить недавно (кілька років тому) вважалось, що браузери не в змозі самостійно обробляти дані. При створенні ужитку, який використовує браузер, тому ж самому браузеру направлялися дані – і це єдиний час коли про нього згадували. Час від часу користувачу потрібно було заповнити поля форми чи клікнути на гіперпосилання, тим самим пробуджуючи програму від сплячки вхідним запитом. У відповідь вона відсилала користувачу готову сторінку, а увесь рутинний процес вертався у своє русло.
Проте, можливості браузера набагато більші, ніж ми собі уявляємо. Він вміє працювати з програмним кодом (майже всі браузери працюють з JavaScript та підтримують flash-технології). Виявляється , також, що JavaScript на браузері може у фоновому режимі взаємодіяти з програмою на сервері, обновляючи, таким чином інформацію, призначену для користувача. Jesse James Garret (вчений-дослідник із Флориди, який керував проектом по розробці AJAX, один з розробників Google Maps) назвав такий метод взаємодії AJAX, що колись означало Asynchronous JavaScript and XML. А зараз – це потужна технологія, що дозволяє зменшити потреби браузера. Цей напрям розвитку веб ужитків яскраво демонструє те, що програми не повинні бути повільними, але навпаки – скорочувати час реакції браузера на певні дії користувача. За допомогою AJAX частково пришвидшується перехід від настільних до веб ужитків1.
Отже, AJAX – це техніка побудови більш інтерактивних, динамічних та цікавих сторінок. Наприклад, мені потрібно відобразити на сторінці певний елемент, який після кожної конкретної дії буде обновлюватися. Проте нелогічно буде якщо для досягнення цього результату я буду обновлювати цілу сторінку замість цього елементу. Саме у такому випадку приходить на допомогу AJAX (прикладом елементів може бути годинник, корзина покупця, частина таблиці, що змінилася у ході роботи та ін.).
AJAX є асинхронним, тобто, бібліотеки JavaScript можуть з’єднуватися з сервером в будь-який момент, а веб сторінка тим часом не завмирає в очікуванні відповіді. Він використовує JavaScript на браузері, будь-яку мову програмування на сервері, та XML для задання повідомлень.
Як же ж саме працює AJAX на Rails?
Зазвичай, використання AJAX потребує достатньо великих навиків як у дизайні, так і у програмуванні. Але коли ми маємо справу з Rails – все зводиться до простого використання цієї технології до такої степені, що використовувати її – те саме, що не використовувати.
Отже, розглянемо особливості реалізації AJAX на Rails. Як тільки браузер сформував і відобразив початкову сторінку, дії користувача заставляють його відображати нову веб сторінку (така суть закладена у будь-яку веб програму). Та за допомогою лише кількох кроків можна позбутися цього:
активація тригера: тригер активується в тому випадку, коли користувач нажав кнопку, посилання чи заповнив поля форми;
виклик веб клієнтом сервера: метод JavaScript, що називається XMLHttpRequest, відсилає дані, які зв’язані з тригером, обробнику подій на сервері. Даними можуть виступати ID прапорця, текст в полі вводу, або ж і ціла форма;
сервер пророблює деякі дії: обробник дії зі сторони сервера (а в нашому випадку це контроллер дії Rails) пророблює певні операції з даними і повертає HTML фрагмент веб клієнту;
клієнт отримує відповідь: JavaScript зі сторони клієнта, який Rails створює автоматично, отримує фрагмент HTML і використовує його для обновлення певної наперед визначеної частини поточної сторінки HTML. Найчастіше зміни відбуваються у тегу <div>2.
Окрім цих кроків можна трохи біше потрудитись, і тоді можна заставити сервер повертати будь-який вид даних у відповідь на AJAX запит.
Для реалізації підтримки AJAX браузером Rails використовує бібліотеки JavaScript Prototype та script.aculo.us. Ці бібліотеки можна використовувати по за середовищем Rails. Проте у ньому вони настільки майстерно вбудовані, що, напевне, нікому цього робити і не захочеться.
Розділ ІІ: RoR і Django: хто кого?
"Any sufficiently advanced technology looks like magic" – A. C. Clarke
Насамперед хочу розпочати із знайомства з Django. Django (Джанго) — високорівневий OpenSource Python-фреймворк для розробки веб-застосунків. Названо його було на честь джазмена Джанго Рейнхардта (у відповідності до музичних смаків одного зі засновників проекту).
Aрхітектура Django подібна на «Модель-Вид-Контролер» (MVC). Однак, те що називається «контролером» в класичній моделі MVC, в Django називається «вид» (англ. view), а те, що мало б бути «видом», називається «шаблон» (англ. template). Таким чином, MVC розробники Django називають MTV ("Модель-Шаблон-Вид").
Першочергово Django був створений для управління сайтами новин LJWorld.com, lawrence.com и KUsports.com компанії The World сompany (Лоуренс, Канзас (en), США). Не зважаючи на те, що розроблявся ще 2003 року, вийшов у світ аж 2005. Але з моменту початку розповсюждення його у статусі програмного забезпечення з відкритими вихідними кодами отримав величезну популярність в усьому світі як платформа до багаточисельних застосунків.
Розробники - засновники проекту: Адріан Головатий (англ. Adrian Holovaty), Саймон Віллісон (англ. Simon Willison), Джекоб Каплан-Мосс (англ. Jacob Kaplan-Moss), Вілсон Майнер (англ. Wilson Miner).
Наразі знайомство з Django закінчимо, так як воно неявно продовжуватиметься у процесі порівняння його з платформою RoR.
Порівнюючи дві молоді, але дуже потужні і перспективні технології, однозначного рішення щодо того яка із них краща, звісно, тяжко досягнути. Тим більше, що з Python і Django я не працювала. Однак, не зважаючи на це, я старатимуся зробити такий аналіз на основі певних теоретичних фактів, а також користуватися досвідом видатного науковця Jonathan S. Linowes із Parkerhill Technology Group LLC та його працею Evaluating Web Development Frameworks: Rails and Django.
Насамперед для порівняння потрібно вибрати певні критерії – пункти, за якими буде оцінюватися той чи інший фреймворк.
Критерій |
Rails |
Django |
Технічний |
|
|
Мова програмування |
Ruby |
Python |
Концепція |
Догматична, розумна, «магічний» результат |
Вільно з’єднана, явний результат програмування |
Структура розміщення файлів |
Строга, функціональна |
Розкидана, гнучка |
База даних/модель |
Заповнення таблиці за допомогою міграцій; Три таблиці бази даних (розробка, тесування, публікація) вбудовані |
Заповнення таблиці відбувається вручну; Немає такої можливості |
URL роутинг |
routes.rb – централізований, описовий; зворотне відображення завершене |
urls.py – розширений, стандартизований; зворотне відображення обмежене |
Контроллер/вид |
Контроллер/вид |
Вид/шаблон |
Форма/шаблон |
Використовує Ruby |
Спеціальна шаблонна мова Django |
Адміністрування даних |
Використання plug-in |
Вбудований інструментарій для адміна |
Адміністрування користувача (аутентифікація, сесії) |
Реєстрацію повинен писати програміст; підтримання сесії; пересилання повідомлень за допомогою “flash” |
Реєстрацію повинен писати програміст; підтримання сесії; пересилання повідомлень за допомогою сесії |
AJAX |
Вбудований |
За бажанням |
RSS/Atom/XML |
Підтримує |
Підтримує |
Поширеність (локація) |
За допомогою lug-in |
Розроблений більш, ніж дюжиною мов |
Підтримка |
|
|
Проект/вихід у світ
|
липень 2004
грудень 2005 |
липень 2005
Вересень 2008 |
Документація |
Багато користувацьких довідників та туторіалів; API посилання – хороші; багато книг, користувацьких блогів, відеоуроків; |
Багато користувацьких довідників та туторіалів; API посилання – хороші; Декілька книг, користувацьких блогів, відеоуроків; |
Засоби для тестування |
Вбудовані |
Не використовує тестові фікстури (проекти) |
Підтримка |
Широкий хостинг; в Україні - обмежений |
Широкий хостинг; в Україні - обмежений |