AJAX короткий лікнеп в HTTP-запити без оновлення сторінки - DataLife Engine (DLE)

Розділи сайту

Інформація

Авторизація на сайті

Реєстрація на сайті

AJAX: короткий лікнеп у HTTP-запитах без оновлення сторінки

цією посадою ми відкриваємо офіційний блог CMS DataLife Engine. У вільні від роботи над новою версією вашої улюбленої CMS годинник ми будемо публікувати тут матеріали про індустрію веб-розробки, хороші та погані тренди, мануали, керівництва та лайфхаки по DLE і бог ще знає що

У своєму першому пості ми хотіли б поговорити про таку чудову технологію, як AJAX. Ви, напевно, помічали це слово на нашій «коробці»? Давайте розберемося що це таке і навіщо він потрібен.

Що собою представляв Інтернет у вже далеких 90-х? Набір статичних HTML сторінок. Завданням веб-сайту було просте інформування відвідувача без будь-якої комунікації.

лікнеп

Поступово сайти ставали все більш інтерактивними. З'явилися форми і дані користувача стали оброблятися найпростішими CGI-скриптами.

Якщо вам слово «протокол HTTP» оповите мороком містицизму, то поспішимо якнайшвидше його розвіяти. HTTP є лише набір текстової інформації, оформленої за певними правилами.

Та частина HTTP-запиту, яка до двох переносів рядка "\n \n" називається заголовком-запиту, а та, що потім – тілом.

Дані користувача в HTTP-запиті передаються двома способами:

  • у заголовку запиту (метод GET)
  • у тілі запиту, тобто після двох переносів рядка \n \n (метод POST)
Передача даних користувача методом GET в заголовку виглядає наступним чином:

У цьому прикладі браузер повідомляє сервер, що користувача звуть Іван. Найімовірніше ці дані було введено з форми. Подібнийзапит формує ваш браузер щоразу, коли ви натискаєте на кнопку відправити у формі.

Як бачимо, різниця між GET і POST негаразд велика. До вже відомих заголовків додався «Content-length», що повідомляє розмір запитів, що надсилаються в тілі, в байтах.

Поштовхом до розвитку інтерактивності Інтернету стала поява в середині 90-х витонченої мови PHP, на плечі якої було покладено обов'язок обробки даних і генерації HTML сторінок. Взаємодія користувача та сайту будувалася за схемою:

  • Користувач вводить дані у форму
  • Браузер відправляє HTTP-запит
  • Сервер передає дані PHP
  • PHP робить обробку даних, генерує оновлену сторінку і передає їх серверу
  • Сервер відправляє сторінку браузеру в HTTP-відповіді
  • Браузер обробляє отриману інформацію та виводить користувачу оновлену сторінку
Саме за такою схемою працювали (і продовжують працювати) багато сайтів. Як ви могли помітити, кожен етап взаємодії користувача із сайтом неминуче відбувається тут із перезавантаженням сторінки.

Для потреб Інтернету епохи «Web 1» цього було цілком достатньо. Проте Інтернет розвивався. І чим більше людей у ​​нього приходило, чим більше спільнот та сервісів ставало, тим більшої інтерактивності вимагали користувачі.

Паралельно з розвитком серверної мови PHP тихо і непомітно йшов розвиток іншого вкрай корисного інструменту - JavaScript. На відміну від PHP, код JavaScript (JS) виконується повністю на стороні клієнта, в браузері. Сервер пересилає JS-код «як є». Спочатку JS використовувався лише як кумедний веб-помічник, покликаний зробити сторінки трохи більш живими, додати віконців, що спливають, рухливих.елементів тощо. І JS успішно справлявся з цим завданням, перебудовуючи HTML сторінку «на льоту». Варто відзначити, що сьогодні JavaScript проник і на сервер, у формі гучної платформи node.js, що останніми роками, але це вже зовсім інша історія.

Якоїсь миті, веб-розробники поставили цілком логічне питання: а навіщо, власне, щоразу неодмінно оновлювати ВРЮ сторінку. Адже це по-перше створює додаткове навантаження на сервер, якому доводиться заново виконати весь скрипт генерації сторінки, а по-друге, робить спілкування користувача з сервісом значно повільнішим, і по-третє змушує користувача завантажувати більше інформації, з'їдаючи частину інтернет-каналу.

Комплекс технологій, що забезпечують взаємодію користувача з сервісом без перезавантаження сторінки та отримав назву AJAX (Asynchronous javascript and XML). Заради справедливості, слід зазначити, що AJAX – це скоріше ідеологія взаємодії, аніж якась конкретна технологія. З технічного погляду можливі різні варіанти його реалізації.

Отже, на заміну наведеної вище «класичної» схеми приходить AJAX:

  • У відповідь на HTTP-запит користувача сервер надсилає йому згенеровану засобами PHP (або іншої мови) HTML-сторінку
  • За необхідності (підвантаження новин, відправлення даних з форми) браузер користувача надсилає HTTP-запит у фоновому режимі, не перезавантажуючи сторінку
  • Обробник на сервері отримує дані, обробляє їх та відправляє потрібну інформацію назад клієнту
  • Браузер отримує відповідь на свій запит і javascript «на льоту» перебудовує HTML-сторінку (наприклад, додаючи новини, що тільки що надійшли)
Як видно із зазначеної схеми, при використанні AJAX клієнт та серверобмінюються лише необхідною інформацією, а генерація оновленої сторінки перекладається із сервера на клієнта.

Такий підхід уможливлює створення по-справжньому інтерактивних та «живих» сторінок.

лікнеп

Підсумуємо все вищесказане. Завдяки грамотному використанню AJAX можна досягти таких цілей:

ajax

короткий

AJAX – добро чи…

Зрозуміло, у всякої технології є свої плюси та мінуси. Зокрема, завжди знайдуться люди, які експлуатуватимуть технологію, що сподобалася, ну вже занадто часто, до місця і не до місця. В результаті, в мережі можна виявити сайти, які буквально безперервно бомбардують свої сервери HTTP-запитами, постійно щось оновлюють, підвантажують. Заради інтересу, можете переглянути список з'єднань при 10-20 відкритих вкладках у браузері (якщо ви використовуєте windows – введіть у командному рядку «netstat – a»). Ми побачимо, що на якихось портах постійно відкриваються і зникають з'єднання. Браузер клієнта в 2016 році справді живе дуже насиченим життям, весь час щось відправляє, приймає, шарудить, перебудовує, підвантажує картинки. Перекладання процесу формування сторінки на клієнта, у поєднанні з повсюдним використанням адаптивного дизайну, призводить до того, що браузер починає їсти надто багато ресурсів (насамперед оперативної пам'яті та інтернет-з'єднання). Та й серверу вже доводиться не солодко від великої кількості запитів. А це не є добре.

Тому ми вважаємо, що використовувати AJAX потрібно з розумом, там, де це дійсно необхідно. Впроваджуючи нові фічі ми постійно пам'ятаємо питання «а яке навантаження ця дія дасть на сервер? А на клієнта? Тільки так, розгойдуючись від думки про клієнта до думки про сервер можна досягти ідеального балансупродуктивності та інтерактивності.