Node.js — один из самых больших взрывов за последние несколько лет. Возможность запускать JavaScript (с этим клиентским языком знакомы многие) на сервере является заманчивой идеей.
Фронтенд-разработчики, которые хорошо знакомы с JavaScript, могут легко расширить свои знания чтобы познакомиться с бэкенд-программированием на стороне сервера.
Node построен на JavaScript-движке V8, таком же как в Google Chrome, и сидит как серверная платформа в вашем приложении. Что это значит? В комплексе LAMP у вас есть веб-сервер (Apache, Nginx и др.) и работа с серверным языком (PHP, Perl, Python) для построения динамического сайта. Серверное программирование применяется для создания прикладной среды путём извлечения данных из базы данных (MySQL) и последующей интерпретации данных веб-сервером для получения веб-страницы.
Когда запрашивается новое соединение, Apache создаёт новый поток или процесс для обработки этого запроса, что делает его многопоточным. Часто ряд ваших дочерних процессов простаивает в ожидании назначения нового запроса. Если вы настроите сервер только для 50 ожидающих процессов и 100 входящих запросов, у некоторых пользователей возникнет таймаут соединения, пока некоторые из этих процессов не освободятся. Конечно, есть несколько способов справиться с такой масштабируемостью более эффективно, но в целом Apache будет использовать один поток на каждый запрос, так что для поддержки всё больше и больше пользователей вам в конечном итоге нужно всё больше и больше серверов.
Вот где Node.js начинает блистать. Node является событийно-управляемым языком, который может играть ту же роль что Apache. Он будет интерпретировать код на стороне клиента для публикации веб-страницы. Они схожи в том, что каждое новое подключение запускает новое событие, но главное различие исходит из того факта, что Node является асинхронным и однопоточным. Вместо использования нескольких потоков, которые сидят в ожидании функции или события для завершения, Node использует только один поток для обработки всех запросов. Хотя на первый взгляд это может показаться неэффективным, на деле всё работает хорошо, учитывая асинхронную природу Node.
Почему Node?
Node позволяет строить в реальном времени открытые API, которые мы можем использовать с нашими приложениями. Передача данных или приложения, такие как чаты, обновления статуса или любой другой сценарий, по которому требуется быстро показать данные в реальном времени — это то, с чем Node справляется лучше всего.
Некоторые примеры использования Node:
- чат-клиент;
- обновления пользователей в реальном времени (как в Твиттере);
- новостная лента;
- интернет-магазин;
- приложение для опроса.
После краткого обзора Node, давайте погрузимся в него и создадим два приложения:
Очень простое приложение для демонстрации основ работы с проектом Node.
Более полноценное приложение, в котором мы отобразим популярные фотографии Instagram.