Node.js като Backkend: Случаи, инструменти и ограничения за най-добро използване

През 2009 г. нова технология направи своето скромно начало в необятната вселена на развитието на бекенда.

Node.js беше първият легитимен опит за въвеждане на JavaScript на страната на сървъра.

Днес ще ви е трудно да намерите уеб програмист, който не е чувал за Node.

След създаването си, той раздели общности, предизвика форумни войни и доведе мнозина до отчаяние.

Мисля, че звуча драматично?

Направете бързо търсене в Google. Ще кацнете на златна мина на спорове. Някои аргументи, на които ще се натъкнете:

„Какво се е случило с аксиомата„ Използвайте най-добрия инструмент за работата “? JavaScript от страна на сървъра НИКОГА не е най-добрият инструмент за работата. “

Някои дори звучат поетично:

„Адът на обратно повикване е истински
Отстраняването на грешки е кучка
JavaScript не е създаден за страната на сървъра
[...] "

А някои са повече ... направо:

„Node.js е неприятна софтуерна библиотека и няма да я използвам.“

За тази публикация реших, че е време да настроите записа направо за Node.js и JavaScript като език за задния текст.

Днес ще обсъдя:

  • Текущото състояние на Node.js;
  • Най-добрите му случаи на използване;
  • Неговите ограничения;
  • Какво можем да очакваме от Node да продължи напред.

Състоянието на Node.js като резервен

Преди да влезем в него, нека си припомним какво точно представлява Node.js:

Това е време на изпълнение на JavaScript, създадено на V8 JS двигателя на Chrome. Node.js използва управляван от събития, не блокиращ I / O модел, който го прави лек и ефективен.

Сега знам, че интрото рисува Node като кошмар за програмисти. Истината е, че е станала широко популярна. Но не приемайте думата ми за това:

Проучването на разработчиците на Stack Overflow за 2017 г. показва, че в момента това е най-използваната технология от разработчиците.

Това е и езикът с най-бързо нарастващата популярност през последните пет години, докато езици като C # и PHP губят пара. Самият JavaScript също е на път.

Как можем да обясним бързото преминаване от оригиналния обратен сигнал към приемането на основния поток за Node.js и JavaScript като резервен език?

Казано по-просто, Node е надживял периода „просто прищявка“ и е влязъл в солиден падеж. Тя е изградила около себе си силна и непрекъснато нарастваща общност и екосистема. Всъщност неговият мениджър на пакети, npm, сега е най-големият софтуерен регистър в мрежата.

Node.js не само революционизира бекенд уеб уеб разработката, но и допринесе за постигане на производителност във фронтенда, като донесе сериозен инженеринг на страната на клиента. Той също така играе роля в разширяването на цялостната JavaScript екосистема и подобряването на съвременните JS рамки като Angular, React или Vue.

С течение на времето се оказа погрешно много от предубежденията, които хората имаха в ранните си дни:

Известно е, че JavaScript & Node.js е трудно да се отстрани.

→ Можете да използвате същия опит за отстраняване на грешки, който имате във фронта, като използвате инспектор на възлите, който пакетира родните Dev Tools на Chrome.

Хората в Joyent също знаят нещо или две за напредналото отстраняване на грешки и профилиране на Node: техният универсален отладчик DTrace беше пуснат преди много време!

Не можете да го използвате за сървърни приложения на корпоративно ниво.

→ Такова инженерство може да бъде постигнато с Node.js: просто няма толкова вградени инструменти, които да ви вземат под ръка. Големи играчи като Netflix, PayPal, Walmart и Yahoo! всички са го използвали. Повече за това по-късно.

JavaScript е динамичен език, така че не получавате статичен пропуск от компилатора.

→ Това е вярно. Въпреки това се появиха инструменти като TypeScript и Flow, за да осигурят такъв тип езикова сигурност. Google Compiler за затваряне също може да направи трика тук.

JavaScript не е създаден за страната на сървъра.

→ Е, JavaScript вече беше на сървъра по същото време, когато Netscape вгради JS в браузъра си, още през 1995 г.! Това е фронтален тип, тъй като е, че е бил пълен монопол над него.

И списъкът продължава и продължава.

Така че нека просто прескочим някои от най-добрите случаи и ограничения за използване, за да добием по-добра представа за позиционирането на Node.

JavaScript за бекенд: Най-добрите случаи на използване на възел

Така че защо дори трябва да считате Node.js за бекенд в стека си?

Общи предимства и характеристики

Позволете ми да уволня някои бързи съобщения за вас:

  • Много вероятно е да предположим, че вече използвате своя фронтленд с JavaScript. В този случай универсалността на кода във вашия стек е голямо предимство, което трябва да имате предвид.
  • Инструменти като уебпакет помагат да се използва повторно код от двата края и да останат съгласувани на всички системни нива.
  • Придвижвайки се с пълен стек на JavaScript, можете да напишете уеб приложение, което визуализира както на браузъра, така и на сървъра безпроблемно. Това е вълнуващо.

Някои са виждали това като проблем за Node.js, като твърдят, че те принуждават да избереш JavaScript докрай. Това не е напълно вярно, тъй като все още можете да използвате правилния инструмент за работата, подробно.

Нека да кажем, че трябва да направите кодиране на видео, няма да търсите езотерична библиотека Node.js: просто ще извикате доказани инструменти в командния ред от Node. Или ако вече има библиотека Python, която може да извърши сложното изчисление, което се изисква, можете да създадете микро услуга и да извикате тези функции чрез REST API.

  • Функцията за асинхронизация / изчакване напълно промени начина, по който пишем асинхронен код, всъщност го прави да изглежда и да се държи малко повече като синхронен код. Подкрепена от Node.js от v7.6, тази функция дойде като част от решението на скандалния ад.

Всичко по-горе прави Node.js чудесно за следните случаи на употреба.

Използвайте случай 1: Приложения в реално време

Приложения за съвместна работа (Trello, Google Docs), чат на живо, незабавни съобщения и онлайн игри са примери за RTA, които се възползват от архитектурата на Node.js.

Тези приложения функционират в рамките на период от време, който потребителите чувстват като непосредствени и текущи. Спецификациите на Node.js са решение за ниската латентност, необходима за ефективното функциониране на тези програми.

Улеснява обработката на множество клиентски заявки, позволява повторно използване на пакети от библиотечен код и синхронизирането на данни между клиента и сървъра се случва много бързо.

Използвайте случай 2: Приложения за една страница

SPAs са уеб приложения, които зареждат една HTML страница и динамично я актуализират, докато потребителят взаимодейства с приложението. Голяма част от работата се случва от страна на клиента, в JavaScript.

Въпреки че това е страхотно развитие в уеб разработката, те имат някои проблеми, когато става въпрос за рендеринг. Това може да повлияе отрицателно например на вашата SEO ефективност. Предаването от страна на сървъра в среда на Node.js е популярна опция за решаването на това.

Използвайте случай 3: Мащабируемост

Node.js никога няма да стане по-голям, отколкото трябва да бъде. Красотата е, че е достатъчно минималистичен, за да персонализирате в зависимост от случая на употреба. Това е ключът към производителността.

Дори името му подчертава, че е направено за сглобяване на множество малки разпределени възли, общуващи помежду си.

Модулността на възела ви позволява да създавате малки приложения, без да се налага да се справяте с раздута, прекомерна екосистема. Вие избирате инструментите, които са ви необходими за работата и след това се мащабирате според нуждите.

Тази мащабируемост обаче не е свободна от усложнения и ако не сте внимателни, Node.js може да стане ... опасен.

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

Безпроблемно казано, Node.js ви позволява лесно да стреляте в крака. Конфигурацията и персонализирането идват на цена и ако сте неопитни или недисциплинирани, може да загубите себе си - или клиента си.

Противно на по-конвенционалния подход, вие създавате структурата, която поддържа вашия бекенд. Това включва много вземане на решения, което означава, че трябва да знаете какво правите и къде отивате, ако проектът ви мащабира.

Например с други езици като Ruby и добре познатата му рамка Ruby on Rails, ние бяхме свикнали с парадигмата „конвенция за конфигуриране“.

При Node.js това върви с токчета. Повече свобода се дава на разработчиците, но пътят може да стане тъмен и страшен, ако вземете грешни решения.

И тогава ще разберете, че „ада на обратно повикване“ наистина е действителна.

Това не означава, че не можете да създавате по-големи сървърни приложения с него, но винаги трябва да имате предвид тези фактори.

Дори създателят на Node.js, Райън Дал, в крайна сметка осъзнаваше ограниченията на системата, преди да напусне да работи по други проекти. Той беше много прозрачен за това:

„[…] Мисля, че Node не е най-добрата система за изграждане на масивна сървърна мрежа. Бих използвал Go за това. И честно казано, това е причината да напусна Node Беше осъзнато, че: о, всъщност това не е най-добрата система от страна на сървъра някога. “

Споменатите по-рано предубеждения бяха верни в един момент от краткия живот на Node.js и все още са до известна степен. Той е узрял и пораснал достатъчно, че можете да работите около тях, ако отделите време. Инструментите, които общността може да ви предложи, можете да правите почти всичко.

Популярни JavaScript инструменти за задния ред

Не толкова отдавна, ако сте се замислили да съставите пълен стек от JS, първото нещо, което ви дойде на ум беше стекът MEAN (MongoDB, Express, Angular & Node).

Днес тя все още е подходяща група инструменти, но сега екосистемата на JavaScript може да предложи много повече от предния ред, за да не можете да се ограничите в това.

Ето някои от по-популярните рамки на JavaScript за задния план през 2017 г.:

  • Express.js все още е най-популярната рамка за Node.js. Това е бърза, ненатрапчива и минималистична уеб рамка. Тя се развива бързо, защото е опростена и ясна. Вероятно е тази по-близка до основните идеи на Node.js за олекотена система с модулен подход.
  • Meteor, от друга страна, използва чист JavaScript и Node.js вътре в много по-голяма архитектура. Meteor е екосистема сама по себе си, която може да е добра за изграждане на по-сложни сървърни приложения. Използването му обаче може да стане по-трудно, ако искате да направите нещо, което не е вградено.
  • Sails.js е MVC рамка в реално време. Той е проектиран да подражава на MVC модела на Ruby on Rails, но с поддръжка на съвременните изисквания за приложения. Това прави чрез API, управлявани от данни с мащабируема, ориентирана към услуги архитектура.
  • Koa.js беше изработен от екипа зад Express. Създаден като „уеб-рамка от следващо поколение за Node.js“, това е по-малка, по-изразителна и по-здрава основа за уеб приложения и API.

Има още много неща за проучване, така че ще изпусна няколко истински бързо: Nest.js, Hapi.js, Socket.io, Mean.js, Total.js, Derby.js & Keystone.js.

Движа се напред

Смисълът на тази статия не беше да стигнем до окончателно заключение дали Node.js предлага най-добрата среда за поддръжка. Нито беше да ви кажа, че трябва да го използвате.

И със сигурност няма да изляза оттам и ще кажа, че е по-добър от другите популярни езици, като например Java, C #, C ++, PHP, Python, Go или Ruby.

Предполагам, че целта тук е да нарисуваме сива зона между черно-белите мнения, които бях чел в Node.js и JavaScript като език за връщане.

Независимо дали ви харесва или не, Node.js видимо е тук, за да остане. )

Node.js се интересува във времето

Никога не трябва да мислите за някаква рамка като сребърен куршум, който по магически начин ще реши всичките ви проблеми. Node.js е просто още един инструмент в необятната вселена на уеб разработката. В някои ситуации работата ще бъде свършена изключително добре, но в други ще бъде болка.

След това е задача на всеки разработчик внимателно да мисли за правилния стек за всеки нов проект. Важно е да знаете всичките си опции и да не отписвате каквато и да е алтернатива от първото движение.

Snipcart, например, работи на .NET архитектура, която също има своя справедлив дял от наисеери. Защо го избрахме?

Това беше точният инструмент за работата в този момент във времето.

Ето се надяваме този преглед да ви помогне да направите решението си за Node!

Какви са вашите мисли за Node.js? И JavaScript като бекенд език? Опитите, които искате да споделите? Сигурен съм, че много от вас имат какво да кажат за това, така че не се колебайте да започнете / да се присъедините към дискусията в коментарите! Ако ви е харесала тази публикация, моля, отделете секунда, за да я споделите в Twitter.

Първоначално тази публикация беше публикувана в блога и бюлетина на Snipcart.