Server side javascript что это

Чем на самом деле является Node.js?

Server side javascript что это. image loader. Server side javascript что это фото. Server side javascript что это-image loader. картинка Server side javascript что это. картинка image loader

Node.js это — среда выполнения JavaScript. Что же это значит, и как работает?
Окружение Node.js включает все, что вам нужно для выполнения программы, написанной на JavaScript.
Server side javascript что это. image loader. Server side javascript что это фото. Server side javascript что это-image loader. картинка Server side javascript что это. картинка image loader
Раньше вы могли запустить JavaScript только в браузере, но однажды разработчики расширили его, и теперь вы можете запускать JS на своем компьютере в качестве отдельного приложения. Так появился Node.js.

Теперь вы можете сделать гораздо больше с JavaScript, чем просто интерактивные веб-сайты.

Теперь у JavaScript есть возможность делать то, что могут делать другие скриптовые языки программирования, такие как Python.

Оба — браузерный JavaScript и Node.js запускаются в среде выполнения V8. Этот движок использует ваш JS код, и преобразует его в более быстрый машинный код. Машинный – низкоуровневый код, который компьютер может запускать без необходимости сначала его интерпретировать.

Почему Node.js?

— Node.js — среда выполнения JavaScript, основанная на JavaScript движке V8 из Chrome.
— Node.js использует управляемую событиями, неблокирующую модель ввода-вывода, которая делает ее легкой и эффективной.
— Пакетная экосистема Node.js, npm, является самой большой экосистемой библиотек с открытым исходным кодом в мире.

Мы уже обсуждали первую строку этого определения: «Node.js — среда выполнения JavaScript, основанная на JavaScript движке V8 из Chrome». Теперь давайте разбираться в двух других строках, так мы сможем понять, почему Node.js так популярен.

I/O означает ввод/вывод. Это может быть что угодно: от чтения/записи локальных файлов до HTTP-запроса в API. I/O занимает время и, следовательно, блокирует другие функции.

Рассмотрим сценарий, в котором мы запрашиваем user1 и user2 из бекенда, а затем печатаем их на экране / в консоли. Ответ на этот запрос требует времени, но оба запроса пользовательских данных могут выполняться независимо и в одно и то же время.

Server side javascript что это. image loader. Server side javascript что это фото. Server side javascript что это-image loader. картинка Server side javascript что это. картинка image loader

Блокирование ввода-вывода

В методе блокировки запрос данных user2 не запускается до тех пор, пока данные user1 не будут напечатаны на экране.

Если это был веб-сервер, нам нужно было бы начать новый поток для каждого нового пользователя. Но JavaScript однопоточен (но он имеет однопоточный цикл событий, о котором мы поговорим чуть позже). Таким образом, это сделает JavaScript не очень подходящим для многопоточных задач.

Неблокирующий ввод-вывод

С другой стороны, используя неблокирующий запрос, вы можете инициировать запрос данных для user2, не дожидаясь ответа на запрос user1. Вы можете инициировать оба запроса параллельно.

Неблокирующий ввод-вывод устраняет необходимость многопоточности, поскольку сервер может обрабатывать несколько запросов одновременно.

Цикл событий JavaScript

Если у вас есть 26 минут, посмотрите отличное видео-объяснение Node Event Loop:

Если нету, вот пошаговое объяснение того, как работает Event Loop в JavaScript:

Server side javascript что это. image loader. Server side javascript что это фото. Server side javascript что это-image loader. картинка Server side javascript что это. картинка image loader

1. Посылаете main() в стек вызовов.

2. Посылаете console.log() в стек вызовов. Он запускается сразу и появляется.

3. Посылаете setTimeout(2000) в стек. setTimeout(2000) это — Node API. Когда мы его вызываем, мы регистрируем пару событие-коллбек. Событие будет ждать 2000 миллисекунд, а потом вызовет коллбек.

4. После регистрации, setTimeout(2000) появляется в стеке вызовов.

5. Теперь второй setTimeout(0) регистрируется таким же образом. Теперь у нас есть два API-интерфейса Node, ожидающих выполнения.

6. После ожидания 0 секунд setTimeout(0) перемещается в очередь выполнения коллбеков (callback queue), и то же самое происходит с setTimeout(2000).

7. В очереди выполнения коллбеков функции ждут, когда стек вызовов будет пустым, потому что только одна функция может выполняться одновременно. Это обеспечивает event loop.

8. Вызывается последняя console.log(), а main() вызывается из стека вызовов.

9. Цикл событий видит, что стек вызовов пуст, а очередь обратного вызова — нет. Таким образом, он перемещает обратные вызовы (по порядку) в стек вызовов для выполнения.

Server side javascript что это. image loader. Server side javascript что это фото. Server side javascript что это-image loader. картинка Server side javascript что это. картинка image loader
Это библиотеки, построенные сообществом. Они решат большинство часто встречающихся проблем. npm (менеджер пакетов Node) содержит пакеты, которые вы можете использовать в своих приложениях, чтобы сделать вашу разработку более быстрой и эффективной.

Require

Require исполняет три функции:

Загружает модули, поставляемые в комплекте с Node.js, например из файловой системы или HTTP, из API Node.js.
Загружает сторонние библиотеки, такие как Express и Mongoose, которые вы устанавливаете из npm.
Позволяет создавать собственные файлы и делить проект на модули.
Require — это функция, и она принимает параметр «путь» и возвращает module.exports.

Node модули

Node модули это — многоразово используемые блоки кода, существование которых не случайно не влияет на другой код.

Вы можете написать свои собственные модули и использовать их в различных приложениях. Node.js имеет набор встроенных модулей, которые вы можете использовать без специальной установки.

V8 ускоряет JavaScript, используя C ++

V8 – движок с открытым исходным кодом, написанный на C ++.

V8 реализует сценарий ECMAScript, как указано в ECMA-262. ECMAScript был создан Ecma International для стандартизации JavaScript.

V8 может работать автономно или может быть встроен в любое приложение C ++. Благодаря этому, вы можете написать свой собственный код на C ++, и сделать его доступным для JavaScript.

События

События – это все, что произошло в нашем приложении, и на что мы можем ответить.

В Node есть два типа событий:

Источник

Всё что вам нужно знать о Node.js

Server side javascript что это. 1*NYcVIgKtefWG3f8sGdPZQw. Server side javascript что это фото. Server side javascript что это-1*NYcVIgKtefWG3f8sGdPZQw. картинка Server side javascript что это. картинка 1*NYcVIgKtefWG3f8sGdPZQw

В наши дни платформа Node.js является одной из самых популярных платформ для построения эффективных и масштабируемых REST API’s. Она так же подходит для построения гибридных мобильных приложений, десктопных программ и даже для IoT.

Я работаю с платформой Node.js более 6 лет и я на самом деле люблю её. Этот пост главным образом пытается быть путеводителем по тому, как Node.js работает на самом деле.

Мир до Node.js

Многопоточный сервер

Веб-приложения, написанные следуя клиент/серверной архитектуре, работают по следующей схеме — клиент запрашивает нужный ресурс у сервера и сервер отправляет ресурс в ответ. В этой схеме сервер, ответив на запрос, прерывает соединение.

Такая модель эффективна поскольку каждый запрос к серверу потребляет ресурсы (память, процессорное время и т.д.). Для того чтобы обрабатывать каждый последующий запрос от клиента, сервер должен завершить обработку предыдущего.

Значит ли это, что сервер может обрабатывать только один запрос за раз? Не совсем! Когда сервер получает новый запрос он создаёт отдельный поток для его обработки.

Поток, если простыми словами, это время и ресурсы, что CPU выделаят на выполнение небольшого блока инструкций. С учётом сказанного, сервер может обрабатывать несколько запросов одновременно, но только по одному на поток. Такая модель так же называться thread-per-request model.

Server side javascript что это. 0*DArjASADVjunQlwb. Server side javascript что это фото. Server side javascript что это-0*DArjASADVjunQlwb. картинка Server side javascript что это. картинка 0*DArjASADVjunQlwb

Для обработки N запросов серверу нужно N потоков. Если сервер получает N+1 запросов, тогда он должен ждать пока один из потоков не станет доступным.

На рисунке выше, сервер может обрабатывать до 4 запросов (потоков) единовременно и когда он получает следующие 3 запроса, эти запросы должны ждать пока любой из этих 4 потоков не станет доступным.

Один из способов избавиться от ограничений — добавить больше ресурсов (памяти, ядер процессора и т. д.) на сервер, но это не самое лучшее решение….

Server side javascript что это. 0*ojcusKL4MarGcHU3. Server side javascript что это фото. Server side javascript что это-0*ojcusKL4MarGcHU3. картинка Server side javascript что это. картинка 0*ojcusKL4MarGcHU3

И, конечно, не забываем о технологических ограничениях.

Ограниченное число потоков на сервере не единственная проблема. Возможно, Вам стало интересно почему один поток не может обрабатывать несколько запросов одновременно? всё из-за блокирующих операций ввода/вывода.

Server side javascript что это. 0*ryyQ4AXdQk0XHMOn. Server side javascript что это фото. Server side javascript что это-0*ryyQ4AXdQk0XHMOn. картинка Server side javascript что это. картинка 0*ryyQ4AXdQk0XHMOn

Допустим, Вы разрабатываете онлайн магазин и Вам нужна страница где пользователь может просматривать список всех товаров.

Пользователь стучится на http://yourstore.com/products и сервер рендерит HTML файл со всеми продуктами с базы данных в ответ. Совсем не сложно, да?

Но, что же происходит за кулисами?

На сколько медленны операции ввода/вывода? Ну это зависит от конкретной. Давайте обратимся к таблице:

Server side javascript что это. 1* 913aQKmO72gNaBLvHv0mA. Server side javascript что это фото. Server side javascript что это-1* 913aQKmO72gNaBLvHv0mA. картинка Server side javascript что это. картинка 1* 913aQKmO72gNaBLvHv0mA

Операции сети и чтения с диска слишком медленные. Представьте сколько запросов или обращений к внешним API ваша система могла бы обработать за это время.

Подбивая итоги: операции ввода/вывода заставляют поток ждать и тратить ресурсы впустую.

Server side javascript что это. . Server side javascript что это фото. Server side javascript что это-. картинка Server side javascript что это. картинка

Проблема C10K

Проблема

C10k (англ. C10k; 10k connections — проблема 10 тысяч соединений)

В ранние 2000-е, серверные и клиентские машины были медленными. Проблема возникала при параллельной обработке 10 000 клиентских соединений к одной машине.

Но почему традиционная модель thread-per-request (поток на запрос) не могла решить эту проблему? Что ж, давайте используем немного математики.

Нативная реализация потоков выделаят больше 1 Мб памяти на поток, выходя из этого — для 10 тысяч потоков требуется 10 Гб оперативной памяти и это только для стека потоков. Да, и не забывайте, мы в начале 2000-х!!

Server side javascript что это. 0*w38cY1A1fj80Q3oZ. Server side javascript что это фото. Server side javascript что это-0*w38cY1A1fj80Q3oZ. картинка Server side javascript что это. картинка 0*w38cY1A1fj80Q3oZ

В наши дни серверные и клиентские компьютеры работают быстрее и эффективней и почти любой язык программирования или фреймворк справляются с этой проблемой. Но фактически проблема не исчерпана. Для 10 миллионов клиентских соединений к одной машине проблема возвращается вновь (но теперь она C10M Problem).

JavaScript спасение?

Осторожно, спойлеры.
Node.js на самом деле решает проблему C10K… но как?!

Серверный JavaScript не был чем-то новым и необычным в начале 2000-х, на тот момент уже существовали реализации поверх JVM (java virtual machine) — RingoJS и AppEngineJS, что работали на модели thread-per-request.

Но если они не смогли решить проблему, тогда как Node.js смог?! Всё из-за того, что JavaScript однопоточный.

Node.js и цикл событий

Node.js

Node.js это серверная платформа, что работает на движке Google Chrome — V8, который умеет компилировать JavaScript код в машинный код.

Node.js использует событийно-ориентированную модель и неблокирующую ввод / вывод архитектуру, что делает его легковесным и эффективным. Это не фреймворк, и не библиотека, это среда выполнения JavaScript.

Давайте напишем маленький пример:

Server side javascript что это. . Server side javascript что это фото. Server side javascript что это-. картинка Server side javascript что это. картинка

Node.js использует неблокирующие ввод/вывод операции, что же это значит:

Давайте напишем пример, в котором на запрос к /home сервер в ответ шлёт HTML страницу, а для всех других запросов — ‘Hello World’. Что бы отослать HTML страницу сначала ее нужно прочитать из файла.

Server side javascript что это. 1*QFZX lFTpYp l9S2Ffl 7A. Server side javascript что это фото. Server side javascript что это-1*QFZX lFTpYp l9S2Ffl 7A. картинка Server side javascript что это. картинка 1*QFZX lFTpYp l9S2Ffl 7A

Server side javascript что это. 1*NTT76UmAMvByEh4LjOK8iA. Server side javascript что это фото. Server side javascript что это-1*NTT76UmAMvByEh4LjOK8iA. картинка Server side javascript что это. картинка 1*NTT76UmAMvByEh4LjOK8iA

Функции что попадают в http.createServer и fs.readFile как аргументы — колбэки. Эти функции будут выполнены в какой-то из моментов в будущем (Первая, как только сервер получит запрос, а вторая — когда файл будет прочитан с диска и помещён в буфер).

Пока файл считывается с диска, Node.js может обрабатывать другие запросы и даже считывать файл снова и всё это в одном потоке… но как?!

Цикл событий

Цикл событий — это магия, которая происходит внутри Node.js. Это буквально бесконечный цикл и на самом деле один поток.

Server side javascript что это. 0*3ykDNt6A2A0RCzYH. Server side javascript что это фото. Server side javascript что это-0*3ykDNt6A2A0RCzYH. картинка Server side javascript что это. картинка 0*3ykDNt6A2A0RCzYH

Libuv — C библиотека которая реализует этот паттерн и является частью ядра Node.js. Вы можете узнать больше о libuv здесь.

Цикл событий имеет 6 фаз, каждое исполнение всех 6 фаз называют tick-ом.

Server side javascript что это. . Server side javascript что это фото. Server side javascript что это-. картинка Server side javascript что это. картинка

Хорошо, есть только один поток, и этот поток и есть цикл событий, но тогда кто выполняет все операции ввода/вывода?

Обратите внимание.
Когда циклу событий нужно выполнить операцию ввода/вывода он использует поток ОС с тредпула (thread pool), а когда задача выполнена, коллбэк ставится в очередь во время фазы pending callbacks.

Server side javascript что это. 0*i07kgjIqG zhLaD1. Server side javascript что это фото. Server side javascript что это-0*i07kgjIqG zhLaD1. картинка Server side javascript что это. картинка 0*i07kgjIqG zhLaD1

Разве это не круто?

Проблема CPU-ёмких задач

Node.js кажется идеальным! Вы можете создавать всё, что захотите.

Давайте напишем API для вычислений простых чисел.

Простое число — это целое (натуральное) число больше единицы и делимое только на 1 и на само себя.

Server side javascript что это. 0*jymtgqRKijzJ89pj. Server side javascript что это фото. Server side javascript что это-0*jymtgqRKijzJ89pj. картинка Server side javascript что это. картинка 0*jymtgqRKijzJ89pj

Дано число N, API должен вычислять и возвращать первые N простых чисел в список (или массив).

Server side javascript что это. 1*GgTW00 UazqbtWX6kgq0yw. Server side javascript что это фото. Server side javascript что это-1*GgTW00 UazqbtWX6kgq0yw. картинка Server side javascript что это. картинка 1*GgTW00 UazqbtWX6kgq0yw

Server side javascript что это. 1*YRTaAqtlvCMvN TBUf1C5Q. Server side javascript что это фото. Server side javascript что это-1*YRTaAqtlvCMvN TBUf1C5Q. картинка Server side javascript что это. картинка 1*YRTaAqtlvCMvN TBUf1C5Q

prime.js это реализация нужных вычислений: функция isPrime проверяет является ли число простым, а nthPrime возвращает N таких чисел.

Предположим, к нам стучатся 3 клиента и пытаются получить доступ к нашему не блокирующемуся вводом/выводом API:

Server side javascript что это. 0*PNYOMTyjLAjDDSuz. Server side javascript что это фото. Server side javascript что это-0*PNYOMTyjLAjDDSuz. картинка Server side javascript что это. картинка 0*PNYOMTyjLAjDDSuz

Когда третий клиент шлёт запрос — главный поток блокируется и это главный признак проблемы CPU-ёмких задач. Когда главный поток занят исполнением «тяжёлой» задачи он становится недоступен для других задач.

Источник

Node.js и JavaScript для серверной разработки

В 2009-м платформа Node.js сделала свои скромные первые шаги в бескрайнем мире разработки бэкендов. Это была первая состоявшаяся попытка использования JavaScript в серверных приложениях. Сегодня будет крайне затруднительно найти веб-разработчика, который не слышал о Node. Но нельзя сказать, что существование Node было безоблачным. Эта платформа пережила раскол сообщества, была предметом форумных войн и многих довела до отчаяния.
Server side javascript что это. image loader. Server side javascript что это фото. Server side javascript что это-image loader. картинка Server side javascript что это. картинка image loader

Возможно, вы думаете, что подобные заявления звучат слишком уж напыщенно. Однако, попробуйте поискать в Google, и вы столкнётесь с неистощимым источником бесконечных споров. Среди рассуждений не в пользу Node, которые могут вам встретиться, есть, например, такие, которые, вопрошая о том, что случилось с аксиомой об использовании лучшего из имеющихся инструментов для решения некоей задачи, указывают, что JS и рядом не стоял с правильным серверным инструментарием. Другие критические замечания о JS, вроде «Callback hell is real», призывающие поверить в реальность ада коллбэков, звучат как строчки из стихотворения. Некоторые из критиков Node выражаются более прямо и однозначно: «Node — это раковая опухоль».

Полагаю, настало время восстановить истинное положение вещей, расставить все точки над «i» в том, что касается платформы Node.js и JavaScript в роли языка серверной разработки. Сегодня мы поговорим о современном состоянии и развитии Node.js, о наиболее удачных вариантах использования этой платформы, о её ограничениях, и о технологиях, созданных на её основе.

Современное состояние Node.js как серверной платформы

Прежде чем говорить о том, как выглядит сегодня серверная платформа Node, вспомним о том, что это такое.

А именно, это среда выполнения JavaScript, построенная на базе JS-движка V8, разработанного Google и применяемого в Google Chrome. Node.js использует неблокирующую модель ввода-вывода, управляемую событиями, которая делает эту платформу простой и эффективной.

В начале этого материала Node показан как прямо-таки кошмар программиста. Однако, эта платформа не случайно стала весьма популярной. Тут мы не станем опираться на голословные утверждения. Лучше взглянем на факты. А именно, свежее исследование Stack Overflow показывает, что Node.js — это, на сегодняшний момент, самая популярная среди разработчиков технология.

Server side javascript что это. image loader. Server side javascript что это фото. Server side javascript что это-image loader. картинка Server side javascript что это. картинка image loader

Кроме того, JS — это язык, популярность которого за последние пять лет растёт быстрее, чем у других языков, при том, что C# и PHP теряют позиции. Распространённость JavaScript, если даже не говорить исключительно о Node, идёт вверх.

Server side javascript что это. image loader. Server side javascript что это фото. Server side javascript что это-image loader. картинка Server side javascript что это. картинка image loader

Как можно объяснить то, что JavaScript, в роли серверного языка, был столь быстро и широко принят сообществом разработчиков? Проще говоря, Node пережил стадию, в которой воспринимался как некая забава, и вошёл в фазу стабильности и зрелости. Вокруг него сформировалось мощное сообщество, размер которого неуклонно растёт. Экосистема Node также достойна упоминания, так как, например, менеджер пакетов Node, npm, в настоящий момент представлен самым большим реестром ПО в интернете.

Node.js не только совершил революцию в серверной разработке, но благодаря ему сделан вклад и в производительность клиентских приложений, так как к развитию V8 были привлечены серьёзные силы. Кроме того, он играет заметную роль в расширении всей экосистемы JavaScript и в совершенствовании современных JS-фреймворков, таких, как Angular, React или Vue.

С течением времени Node смог опровергнуть предрассудки ранних дней. Вот некоторые из них.

JavaScript-код для Node.js печально известен сложностью отладки.

Для отладки серверных JS-приложений можно использовать те же самые методики, которые применяются для отладки клиентского кода, применяя node-inspector, где собраны средства инструментов разработчика Chrome.

Далее, например, разработчики из Joyent, которые кое-что понимают в деле отладки и профилирования Node-приложений, уже давно выпустили универсальный отладчик DTrace.

Node нельзя использовать для разработки серверных приложений корпоративного класса.

Это утверждение тоже не соответствует действительности. На базе Node можно создавать корпоративные системы. Сложность заключается лишь в том, что в нём имеется не особенно много встроенных средств, упрощающих создание подобных систем. Однако, заметные игроки IT-рынка используют Node в качестве корпоративной веб-платформы. Среди них — Netflix. PayPal, Yahoo!, Walmart.

JavaScript — это динамический язык, поэтому, работая на нём, нельзя использовать нечто вроде статической проверки типов при компиляции.

Это правда. Однако, в экосистеме JS появились средства вроде TypeScript и Flow, которые нацелены на работу с типами в JS, что позволяет повысить стабильность и предсказуемость программ, упростить отладку. В этой сфере можно воспользоваться и возможностями Closure Compiler от Google.

JavaScript не создавался как язык для серверной разработки.

Тут можно лишь сказать, что JS уже мог работать на серверах, тогда же, когда Netscape встроила поддержку этого языка в свой браузер. А было это аж в 1995-м. JS обычно называют языком клиентской веб-разработки лишь потому, что он полностью захватил эту сферу.

На самом деле, этот список можно продолжать и продолжать.

Теперь поговорим о сценариях использования Node.js и о его ограничениях для того, чтобы лучше понять место этой технологии в современном мире.

Сценарии применения Node

Итак, зачем вообще рассматривать Node.js как средство серверной разработки в применяемом вами стеке технологий?

▍Преимущества и общие характеристики

Позвольте мне в двух словах обозначить самое важное:

Скажем, вам нужны инструменты для кодирования видео. Для того, чтобы оснастить ими свой проект, написанный на JavaScript, вам не придётся искать какие-то малораспространённые таинственные библиотеки для Node. Вы вполне сможете воспользоваться проверенными инструментами, наладив взаимодействие с ними из Node. Или, например, если имеется некая библиотека на Python, выполняющая необходимые вам сложные вычисления, специально для работы с ней можно запустить микросервис и обращаться к соответствующим функциям этой библиотеки через REST API.

Учитывая всё вышесказанное, можно выделить следующие варианты использования Node.js, в которых он в полной мере раскрывает свои сильные стороны.

▍Сценарий №1. Приложения реального времени

Приложения для совместной работы (такие, как Trello и Google Docs), интерактивные чаты, системы мгновенного обмена сообщениями и онлайн-игры — это примеры приложений реального времени, при разработке которых особенности архитектуры Node.js могут сослужить вам хорошую службу.

Время, необходимое этим приложениям для выполнения тех или иных действий, можно охарактеризовать, с точки зрения пользователя, словами «немедленно» и «сейчас». Для нормальной работы таких приложений система, на которой они основаны, должна обеспечивать очень высокую скорость отклика на действия пользователя и низкий уровень задержек. Node отвечает этим требованиям.

Node облегчает обработку множества запросов от клиентов, его архитектура способствует эффективному использованию библиотек, он обеспечивает очень быструю синхронизацию данных между клиентом и сервером.

▍Сценарий №2. Одностраничные приложения

Одностраничное приложение — это приложение, которое представлено единственной загружаемой в браузер веб-страницей, содержимое которой динамически обновляется в ходе взаимодействия с ней пользователя. Большая часть нагрузки при работе таких приложений ложится на клиентскую часть системы, написанную на JavaScript.

Даже хотя одностраничные приложения — это значительный шаг в эволюции веб-разработки, есть у них и проблемы, которые, например, касаются рендеринга. В частности, это может плохо повлиять на поисковую оптимизацию страниц. Популярное решение этих проблем заключается в серверном рендеринге средствами Node.js.

▍Сценарий №3. Масштабируемость

Сервер на Node никогда не окажется гораздо мощнее, чем нужно. Красота архитектуры Node заключается в её минималистичности, в том, что серверную часть приложений можно масштабировать в зависимости от потребностей проекта. Секрет тут кроется в правильном отношении к производительности.

Даже название предмета нашего разговора, «node» акцентирует внимание на возможности построения систем из множества небольших распределённых вычислительных узлов, которые могут обмениваться друг с другом данными.

Модульность Node позволяет создавать маленькие приложения, не сталкиваясь при этом с необходимостью поддержки огромной инфраструктуры, многие части которой в некоем конкретном случае окажутся незадействованными. При разработке Node-приложений программист выбирает именно то, что ему нужно, и, при необходимости, расширяет решение.

Однако, надо отметить, что подобным возможностям масштабирования сопутствуют и определённые сложности. И, если потерять бдительность, Node.js может стать… опасным.

Ограничения Node.js

Если говорить честно, то Node позволяет разработчику, что называется, «выстрелить себе в ногу». В этом мире за всё надо платить, в том числе — и за широкие возможности по настройке системы и по подгонке её под свои нужды. Если работать с Node, не имея достаточного опыта или регулярно пуская дело на самотёк — можно столкнуться с серьёзными проблемами вроде потери клиентов.

В противовес более традиционным подходам, жёстко регламентирующим те или иные архитектурные особенности систем, структуру, которая поддерживает серверную часть вашего приложения, создаёте именно вы. В результате, тут приходится принимать множество решений, то есть, разработчику необходимо точно знать — чем именно он занимается, и что будет с проектом, если его потребуется расширить.

В случае с другими языками, вроде Ruby, и широко известного фреймворка Ruby on Rails, например, в ходу идея, которая заключается в преимуществе соглашений над конфигурированием системы. Эти традиционные фреймворки буквально ведут разработчика за руку, показывая ему правильный, безопасный путь решения типичных задач.

Node переворачивает всё, так сказать, с ног на голову. Разработчику даётся больше свободы, но путь к реализации задуманного может оказаться полным опасностей, если в ходе работы будут приняты неверные решения. Тут уместно будет вспомнить о пресловутом «аде коллбэков», который вдруг окажется совершенно реальным.

Server side javascript что это. image loader. Server side javascript что это фото. Server side javascript что это-image loader. картинка Server side javascript что это. картинка image loader

Это не означает, что на Node нельзя создавать большие серверные приложения, но вышесказанное стоит постоянно держать в голове.

Даже создатель Node.js, Райан Даль, в итоге, перед переходом к другим проектам, осознал ограничения системы. Он высказался на этот счёт весьма однозначно:

«Думаю, Node — это не лучшая система для создания крупномасштабных серверных проектов. Я бы использовал для этого GO. И, честно говоря, именно поэтому я и оставляю работу над Node. Я однажды понял, что, на самом деле, это вовсе не самая лучшая система для серверной разработки».

Ранее упомянутые предубеждения, касающиеся Node, были справедливы до определённого момента не такого уж и длинного жизненного пути Node, и они, до некоторой степени, всё ещё — не пустой звук. Node достаточно повзрослел и вырос, его слабые стороны, при необходимости и наличии времени, вполне можно обойти. А инструменты, разработанные сообществом, позволяют создать на базе Node.js практически всё, что угодно.

Популярные вспомогательные средства для серверной разработки на JS

Не слишком давно, если некто задумывался о том, чтобы создавать все части своей системы на JS, в голову тут же приходила мысль о стеке MEAN (MongoDB, Express, Angular и Node).

Этот набор инструментов и в наши дни не потерял актуальности, однако, в настоящее время в экосистеме JS имеется гораздо больше интересных инструментов как для клиентской, так и для серверной разработки, поэтому не стоит ограничиваться MEAN.

Вот несколько популярных современных серверных JS-фреймворков:

Итоги

Задача этой статьи не в том, чтобы сделать некий итоговый вывод о том, предлагает ли экосистема Node.js самые лучшие средства для серверной разработки. Здесь не идёт речь и о том, чтобы склонить кого-либо к использованию Node. Я, к тому же, не собираюсь говорить, что Node значительно превосходит другие популярные серверные среды, разработка в которых ведётся с использованием Java, C#, C++, PHP, Python, Go или Ruby.

Полагаю, самое главное, что мне хотелось сделать — так это показать, что между безапеляционными «да» и «нет», которые можно встретить во многих рассуждениях о Node и о JS как о серверном языке, если обширная область «может быть».

И, нравится это кому-нибудь или нет, интерес к Node постоянно растёт.

Server side javascript что это. image loader. Server side javascript что это фото. Server side javascript что это-image loader. картинка Server side javascript что это. картинка image loader

В завершение этого материала мне хотелось бы сказать, что не стоит относиться к любому фреймворку как к палочке-выручалочке, которая волшебным образом решит все проблемы. Node.js — это просто один из инструментов в колоссальной вселенной веб-разработки. В некоторых ситуациях он решает поставленные перед ним задачи исключительно хорошо, а в других работа с ним может превратиться в кошмар.

В задачи каждого разработчика входит тщательный подбор технологий, подходящих для реализации любого нового проекта. При этом важно учитывать все возможности и не отбрасывать сходу имеющиеся альтернативы.

Надеюсь, мой рассказ о Node поможет вам принять правильное решение при выборе серверной платформы для вашего очередного проекта.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *