Node.js і ера JavaScript

Три місяці тому ми вирішили відмовитися від використання 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,

персональний сайт.