Три місяці тому ми вирішили відмовитися від використання Django на нашому сайті і переписати все з нуля на серверному JavaScript під Node.js (вже якщо буває в житті стартапу час, коли можна серйозно змінювати інфраструктуру, так це на самому початку шляху - коли є найбільша свобода маневру).
Що змусило нас прийняти таке рішення? Одна проста думка - стек LAMP мертвий. За два десятиліття, що минули з часу його народження, відбулися фундаментальні зміни в протоколах, контенті, серверах і клієнтах, на яких побудований Веб. Можна виділити три ери розвитку павутини:
1. 1991 — 1999: Ера HTML.
У підставі ери HTML лежали документи, в повній відповідності з початковим поданням Тіма Бернерса-Лі про «віртуальний всесвіт взаємопов'язаних документів». Веб наповнювався статичними, створеними вручну файлами, сокирний вид яких у тодішніх браузерах ображав смак навіть самого невибагливого дизайнера. Статичні документи відображалися в статичних клієнтах.
2. 2000 — 2009: Ера LAMP.
У підставі ери LAMP лежали бази даних. Місце документів зайняв стек веб-додатків. CGI, PHP, Ruby on Rails, Django заповнювали HTML-шаблони даними з БД. Тепер сторінки динамічно формувалися на сервері, але в браузер приходили як і раніше в статичному вигляді.
3. 2010 — ??: Ера JavaScript.
У основі ери JavaScript лежать потоки подій. Сучасні веб-сторінки - це вже і не сторінки зовсім, а керовані подіями програми для обміну інформацією. Основа відображення контенту у вебі - об'єктна модель документа - все ще існує, але це вже не стільки форма перегляду розмітки HTML, скільки структура даних у пам'яті, створена програмою на JavaScript.
Архітектура LAMP мертва тому що мало кому зараз хочеться відправляти тонни HTML-розмітки у відповідь на кожен рух користувача. Замість цього краще оновлювати невеликі фрагменти DOM за допомогою AJAX. Але коли обсяг коду JavaScript в наших серверних шаблонах перевалює за 90%, стає ясно - ми робимо все неправильно.
Якщо ми визнаємо це, то побачимо, що головна функція сервера тепер не зберігання документів (ера HTML) або рендеринг шаблонів (ера LAMP), а доставка даних і функцій для їх обробки. Сервер повинен віддати клієнтові код програми, а потім дані, які програма вставить в DOM.
Крім того, сервер повинен відстежувати потік подій (дії клієнта або повідомлення від інших серверів, наприклад зміну курсу акцій) і розсилати клієнтам оновлені дані у відповідь на ці події.
Архітектура Node.js ідеально підходить для цих функцій. Оскільки JavaScript використовується і клієнтом, і сервером, стає можливим перенести частину обчислень у браузер, без особливих проблем з розголошенням інтерфейсів і без необхідності двічі писати код, що робить одне і те ж, різними мовами (наприклад, валідація форм).
Node.js відмінно підходить і для роботи з потоками подій. Завдяки асинхронній, неблокуючій архітектурі, він неймовірно швидкий. Він використовує HTTP 1.1 і може тримати тисячі відкритих з'єднань одночасно.
Нарешті, варто згадати, що події - це не що інше, як пакети даних, а JSON поступово стає lingua franca для даних в сьогоднішній павутині. Саме JSON найбільш зручний для програм JavaScript на боці клієнта. І для Node.js це - рідний формат.
Ера JavaScript перетворить Веб з глобальної цифрової бібліотеки на глобальну цифрову нервову систему, можливості якої ми тільки починаємо усвідомлювати.
Про автора:
профіль на LinkedIn,
персональний сайт.





