Направо към съдържанието

Node.js

от Уикипедия, свободната енциклопедия
Node.js
Информация
АвторРаян Дал
РазработчикNode.js Developers, Joyent, Github Contributors
Начална версия27 май 2009 г.[1]
Последна версия20.0.0
Програмен езикC, C++, JavaScript
Операционна системаMicrosoft Windows (по-стари версии изискват Cygwin), GNU/Linux, macOS, Solaris, FreeBSD, OpenBSD, webOS, NonStop OS
СтатусАктивен
Вид софтуерEvent-driven networking
ЛицензMIT
Уебсайтnodejs.org
Node.js в Общомедия

Node.js е многоплатформена среда за изпълнение на сървърни и мрежови приложения с отворен код. Приложенията се пишат на JavaScript и могат да се изпълняват в Node.js среда на Microsoft Windows, GNU/Linux, macOS и IBM.

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

Node.js използва JavaScript двигателя V8 на Google, за да изпълнява код и голяма част от основните модули са написани на JavaScript. Node.js съдържа вградени библиотеки, които позволяват приложенията да работят като сървъри, без софтуер като Apache HTTP Server или IIS.

Node.js придобива популярност като сървърна платформа и се използва от Microsoft,[2][3] Yahoo!,[4] Walmart,[5] Groupon,[6] SAP,[7] LinkedIn,[8][9] Rakuten, PayPal,[10][11] Voxer,[12] GoDaddy[13] и други.

Раян Дал, създател на Node.js

Node.js е създаден от Раян Дал и други разработчици, работещи в Joyent. Node.js е създаден и първоначално пуснат за употреба под Linux през 2009 г. Разработването и поддръжката са били под ръководството на Раян Дал и спонсорирани от Joyent, фирмата, където Дал е работил.[14]

Дал е бил вдъхновен да създаде Node.js след като вижда прогреса на качване на файл под Flickr. Браузърът не е знаел каква част от файла е бил качен и се е налагало от своя страна да отправя запитване към уеб сървъра. Дал е смятал, че просто трябва да има по-лесен начин.[15]

Получава международно внимание след своя дебют по време на учредителната конференция JSConf EU на 8 ноември 2009.[16][17] Дал представя Node.js с неговата комбинация от JavaScript двигателя на Google V8, цикъла на събитията и входно-изходния програмен интерфейс на ниско ниво. Проектът получава бурни аплодисменти и оттогава се радва на безпрецедентен растеж, популярност и приемственост.

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

През юни 2011 г., Microsoft си партнира с Joyent, за да създадат версия на Node.js[18] за Windows. Първата Node.js версия поддържаща Windows, е пусната на пазара през юли месец същата година.

През януари 2012 г. Дал отстъпва своето място, издигайки своя колега и създател на npm Исак Шлютер. Той поема ръководството над проекта.[19]

През януари 2014 г. Шлютер обявява Тимоти Дж. Фонтайн за новия ръководител на проекта Node.js.[20]

През декември 2014, Федор Индутни стартира io.js, форк на Node.js. Поради вътрешни сблъсъци относно управлението на Joyent, io.js бива създаден като алтернатива с отворено управление с отделен технически комитет.[21]

Node.js позволява създаването на уеб сървъри и мрежови инструменти, използвайки JavaScript и колекция от модули, които боравят с различните функционалности на ядрото.[22][23][24][25] Модулите се грижат за входно-изходната система, работата в мрежа (HTTP, TCP, UDP, DNS, или TLS / SSL), двоичните данни (буфери), криптографските функции, потока от данни, както и други основни функции.[22][24][26] Модулите на Node.js имат семпъл и елегантен приложно-програмен интерфейс, което от своя страна намалява сложността при писането на сървърни приложения.[22][24]

Могат да бъдат използвани софтуерни рамки, с цел да бъде ускорено разработването на приложения – достъпни за публично ползване са софтуерните рамки Express.js, Socket.io и Connect.[22][27] Node.js приложения могат да работят под Microsoft Windows, Unix и macOS сървъри. Node.js приложения, като алтернатива, могат да бъдат написани с CoffeeScript (по-четима форма на JavaScript), Microsoft TypeScript (силно типизирана форма на JavaScript), или който и да е друг програмен език, на който може да се компилира JavaScript.[28]

Node.js се използва предимно за изграждане на мрежови програми като уеб сървъри, което го прави подобен на PHP и Python.[23] Най-голямата разлика между PHP и Node.js е, че PHP е език за блокиране (командите се изпълняват само след като предишната команда е завършила с изпълнението си), докато при Node.js изпълнението протича по различен начин (командите се изпълняват паралелно и използват обратни извиквания, за да сигнализират своето завършване).[23]

Node.js дава възможност за развитие на бързи уеб сървъри под JavaScript.[22] Разработчиците могат да създават високо мащабируеми сървъри. Това става с помощта на опростен модел, който използва обратни извиквания към сигнала за завършване на командата.[22] Node.js е създаден, защото е трудно постигането на съгласуваност при много сървърни езици за програмиране, което често води до лошо изпълнение. Node.js свързва лекотата на скриптов език (JavaScript) с мощността на Unix мрежово програмиране.[22]

Node.js е създадена на двигателя на Google V8 JavaScript, защото:

  • V8 е с отворен код под лиценза на BSD
  • V8 е изключително бърз
  • V8 е фокусиран върху уеб, така че може да се каже че е специалист в областта на не малко основи в интернет пространството като HTTP, DNS, TCP
  • JavaScript е добре познат език в рамките на уеб програмирането, което го прави достъпен за много уеб разработчици

Хиляди библиотеки с отворен код са били създадени за Node.js и могат да бъдат изтеглени безплатно от интернет страницата на проекта. Node.js разчита на общност от разработчици, концентрирани около два адресни списъка и IRC канал # node.js на freenode. Обществото от програмисти, занимавали се с Node.js се събира на NodeConf, годишна конференция фокусирана върху Node.js.[29]

Технически характеристики

[редактиране | редактиране на кода]

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

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

V8 е двигателят за JavaScript, създаден специално за браузъра Google Chrome, чийто код Google отваря през 2008 година. Написан под С++, V8 компилира изходния код (JIT) до машинен код на момента, замествайки интерпретацията в реално време.

Node.js съдържа libuv, който от своя страна поема асинхронните събития. V8 осигурява средата за изпълнение за JavaScript. Libuv е слой за абстракция на мрежата, както и за функционалността на файловата система под Windows и POSIX-базирани системи като Linux, macOS и Unix.

Главната функционалност на Node.js е внедрена в JavaScript библиотеката. Свързващите части на Node.js, писани на С++ свързват всички тези технологии една с друга, както и с операционната система.

Управление на пакети

[редактиране | редактиране на кода]

npm е предварително инсталиран пакетен мениджър (опция за управление на пакетите) за сървърна платформа от типа Node.js. Този мениджър се използва за инсталацията на Node.js програмите от npm регистъра. Организирайки инсталирането и управлението на външни Node.js програми, той позволява на програмистите да изграждат приложенията си по-бързо. npm не трябва да се бърка с CommonJS require() командата, защото той не се използва за зареждане на код, а за инсталиране на код и управление на неговите зависимости от командния ред. Пакетите, които се намират в npm регистъра варират от прости спомагателни библиотеки като underscore.js до по-сложни мениджъри на задачи като Grunt.

В комбинация с браузер, база данни за документи (от типа на MongoDB или CouchDB), както и с JSON, Node.js предоставя унифициран JavaScript стек за разработване. Със засиленото внимание спрямо клиентските рамки, както и с адаптирането на основно сървърни шаблони за разработка като MVC, MVP, MVVM и така нататък, Node.js позволява преизползването на същия модел и обслужващ интерфейс, както за сървъра така и за клиентите.

Цикъл на събитията

[редактиране | редактиране на кода]

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

Интегрирани среди за разработка на десктоп
  • Atom (безплатна с отворен код) Бележка: прехвърли се на io.js след версия 0.177.0
  • Brackets (безплатна с отворен код)
  • Sublime Text (комерсиална)
  • JetBrains IntelliJ IDEA (комерсиална)
  • JetBrains WebStorm (комерсиална)
  • Microsoft Visual Studio с Node.js Tools for Visual Studio[30] (комерсиална)
  • Microsoft Visual Studio с TypeScript (комерсиална)
  • Nodeclipse Enide Studio (безплатна с отворен код, Eclipse-базирана)
  • NoFlo – флоу-базирана програмна среда, интегрирана с GNOME APIs[31]
Онлайн кодови редактори
Среди за изпълнение и дебъгери
Управление на производителност на приложенията
  • ruxit (облачна услуга, комерсиална) – SAAS-базирзно APM решение[32]
Рамки

io.js е разклонение на Node.js, стартирало през декември 2014 г. от сътрудник на Node.js проекта. Очаква се през март 2015 г. io.js да бъде обявен за стабилен. Причината за разклоняването на io.js от Node.js, е че авторите са искали проект извън корпоративното управление, и по тази причина са създали система за „отворено управление“, състояща се от техническа комисия, от която са част авторите.

io.js подобно на Node.js, е мулти-платформена среда за изпълнение на сървърни и мрежови приложения с отворен код. Приложенията на io.js са написани на JavaScript, и могат да бъдат стартирани в io.js среда за изпълнение под операционни системи macOS, Microsoft Windows, Linux. io.js предоставя задвижвана от събития архитектура и неблокираща входно-изходна система за програмиране на приложенията (API), която оптимизира производителността и мащабируемостта на дадена програма. Използва JavaScript двигателя V8 на Google, за да изпълнява код.

Подобни среди за разработка достъпни за други езици за програмиране са:

  1. Tags · nodejs/node-v0.x-archive · GitHub // github.com. Посетен на 2 август 2014.
  2. Here's why you should be happy that Microsoft is embracing Node.js // The Guardian, 9 ноември 2011. Посетен на 10 май 2012.
  3. WebMatrix – Front End Web Developers take note (ASP.NET, PHP, node.js and more) // Посетен на 2 август 2014.
  4. Yahoo! Announces Cocktails – Shaken, Not Stirred // Архивиран от оригинала на 2015-04-08. Посетен на 7 април 2015.
  5. Why Walmart is using Node.js // VentureBeat, 24 януари 2012. Посетен на 10 май 2012.
  6. Geitgey, Adam. I-Tier: Dismantling the Monoliths // Groupon, 30 октомври 2013. Архивиран от оригинала на 2015-09-10. Посетен на 30 април 2014.
  7. SAP AppBuilder // SAP, 10 март 2014. Посетен на 10 март 2014.
  8. You'll never believe how LinkedIn built its new iPad app // VentureBeat, 2 май 2012. Посетен на 10 май 2012.
  9. Blazing fast node.js: 10 performance tips from LinkedIn Mobile // Посетен на 7 април 2015.
  10. Clash of the Titans: Releasing the Kraken, NodeJS @paypal // fluentconf.com, 28 май 2013. Посетен на 11 септември 2013.
  11. All such companies and their products in which Node.js is used // Посетен на 2 август 2014.
  12. The Node Ahead: JavaScript leaps from browser into future, The Register, 1 Mar 2011
  13. Why GoDaddy’s Nodejitsu deal is great for Node.js, VentureBeat, 10 Feb 2015
  14. Alex Handy. Node.js pushes JavaScript to the server-side // SDTimes, 24 юни 2011. Посетен на 4 септември 2011.
  15. Harris, Amber. The Birth of Node: Where Did it Come From? Creator Ryan Dahl Shares the History // Devops Angle, 1 април 2012. Архивиран от оригинала на 2014-10-18. Посетен на 26 октомври 2013.
  16. Ryan Dahl at JSConf EU 2009
  17. Ryan Dahl at JSConf EU 2009 Video
  18. Porting Node to Windows // Архивиран от оригинала на 2015-07-01. Посетен на 2 август 2014.
  19. Dahl, Ryan. New gatekeeper // Посетен на 26 октомври 2013.
  20. Schlueter, Isaac. The Next Phase of Node.js // 15 януари 2014. Архивиран от оригинала на 2015-02-11. Посетен на 21 януари 2014.
  21. Krill, Paul. Why io.js Decided to Fork Node.js // JavaWorld, Dec 4, 2014. Архивиран от оригинала на 2017-06-30. Посетен на Dec 15, 2014.
  22. а б в г д е ж Professional Node.js: Building Javascript Based Scalable Software, John Wiley & Sons, 01-Oct-2012
  23. а б в Node.js for PHP Developers, O'Reilly Media, Inc., 2013
  24. а б в Node.js Essentials, Packt Publishing, 09-Sep-2014
  25. Smashing Node.js: JavaScript Everywhere, John Wiley & Sons, 14-Aug-2012
  26. Modules, Nodejs Website
  27. Express.js Guide: The Comprehensive Book on Express.js, Azat Mardan, 28-May-2014
  28. CoffeeScript on Node.js, O'Reilly Media, Inc., 15-Apr-2013
  29. Finley, Klint. NodeConf Schedule Announced // ReadWriteHack, 7 април 2011. Архивиран от оригинала на 2012-09-17. Посетен на 2 август 2014.
  30. Node.js Tools for Visual Studio // Codeplex. Архивиран от оригинала на 2018-01-16. Посетен на 2 август 2014.
  31. Bergius: Flowhub and the GNOME Developer Experience // LWN.net. 2 май 2014. Посетен на 24 май 2014.
  32. Mike Kopp. There’s a new kid in town: node.js monitoring // blog.ruxit.com, 27 ноември 2014. Посетен на 28 ноември 2014.
  33. Node.js Framework Comparison: Express vs. Koa vs. Hapi Архив на оригинала от 2015-07-05 в Wayback Machine., AirPair
  34. 13 fabulous frameworks for Node.js, InfoWorld