Pull to refresh

Node.js и эра JavaScript

Reading time2 min
Views13K
Original author: Michael E. Driscoll
Три месяца назад мы решили отказаться от использования 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,
персональный сайт.
Tags:
Hubs:
+42
Comments210

Articles