Pending

Node.js

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
Node.js
ТипСередовище виконанняJavaScript
АвторРаян Дал
РозробникиNode.js Developers,Joyent,contributors
Перший випуск27 травня2009;15 років тому(2009-05-27)[1]
Стабільний випуск14.8.0 (11 серпня2020;4 роки тому(2020-08-11)[2])
Операційна системаMac OS X,Linux,Solaris,FreeBSD,OpenBSD,Windows,webOS,NonStop OS
Мова програмуванняC,C++,JavaScript
Доступні мовиJavaScript
Стан розробкиактивний
ЛіцензіяMIT License
Онлайн-документаціяnodejs.org/en/docs
Репозиторійgithub /nodejs/node
Вебсайтnodejs.org

Node.js— платформа звідкритимкодомдля виконання високопродуктивних мережевихзастосунків,написаних мовоюJavaScript.Засновником платформи єРаян Дал(Ryan Dahl). Якщо раніше JavaScript застосовувався для обробки даних в браузері користувача, тоnode.jsнадав можливість виконувати JavaScript-скрипти на сервері та відправляти користувачеві результат їхнього виконання. ПлатформаNode.jsперетворила JavaScript на мову загального використання з великою спільнотою розробників.

Node.jsмає наступні властивості:

Для керування модулями використовується пакетний менеджерnpm(node package manager).

Історія

[ред.|ред. код]
Раян Дал, творець Node.js, у 2010

Node.js був спочатку написанийРаяном Далому 2009 році[4]приблизно через тринадцять років після появи першого серверного середовищаJavaScript,LiveWire Pro Web відNetscape.[5]Первісний випуск підтримував лишеLinuxтаMac OS X.Його розробку та обслуговування очолював Дал, а згодом і компаніяJoyent.[6]

Дал розкритикував обмежені можливості найпопулярнішоговебсервера2009 року,Apache HTTP Server,обробляти безліч одночасних з'єднань (до 10 000 і більше) та найпоширеніший спосіб створення коду (послідовне програмування), коли код або блокував весьпроцесабо залучає кілька стеків виконання у разі одночасного з'єднання.[7]

Дал продемонстрував проєкт на першій європейській JSConf8 листопада2009року[8][9][10]Node.js поєднував у собі JavaScript-рушійGoogle V8,цикл обробки подій на основі C-бібліотек, і низькорівневий API вводу-виводу.[11]

У січні 2010 року для середовища Node.js був введенийменеджер пакетівпід назвоюnpm.[12]Менеджер пакетів полегшує програмістам публікацію та обмінсирцевим кодомбібліотек Node.js і призначений для спрощення встановлення, оновлення та видаленнябібліотек.[11]

У червні 2011 рокуMicrosoftта Joyent реалізувалиWindows-версію Node.js.[13]Перше складання Node.js, що підтримує Windows, випущене в липні 2011 року.

У січні 2012 року Дал відійшов у сторону, заохочуючи колегу і творця npm Ісаака Шлютера (Isaac Schlueter) до управління проєктом.[14]У січні 2014 року Шлютер оголосив, що проєкт буде очолювати Тімоті Фонтен (Timothy J. Fontaine).[15]

У грудні 2014 року Федір Індутний, незадоволений надто консервативним циклом оновлень, випустив io.js,форкNode.js. Через внутрішній конфлікт щодо управління Joyent, Io.js був створений як відкрита альтернатива управління з окремим технічним комітетом.[16][17]На відміну від Node.js,[18]автори планували постійно оновлювати io.js з найсвіжішими випусками JavaScript-рушія V8.[19]

У лютому 2015 року було оголошено про намір створити нейтральний фонд Node.js. До червня 2015 року спільноти Node.js та io.js проголосували за спільну роботу в рамкахNode.js Foundation.[20]

У вересні 2015 року Node.js v0.12 та io.js v3.3 були об'єднані разом у Node v4.0.[21]Це об'єднання принесло можливості V8 ES6 в Node.js і довготривалий цикл випуску підтримки.[22]Станом на 2016 рік вебсайт io.js рекомендував розробникам перейти на Node.js і не планувати подальших випусків io.js через злиття.[23],нині той домен переадресовує запити на офіційнийсайт nodejs.org[Архівовано15 березня 2017 уWayback Machine.].

ПлатформаNode.jsпризначена для виконання високопродуктивних мережевихзастосунків,написаних мовою програмування JavaScript. Платформа окрім роботи із серверними скриптами длявеб-запитів, також використовується для створення клієнтських та серверних програм.

В платформі використовується розроблений компанієюGoogleрушійV8.

Для забезпечення обробки великої кількості паралельних запитів у Node.js використовується асинхронна модель запуску коду, заснована на обробці подій в неблокуючому режимі та визначенні обробників зворотніх викликів (callback). Як способи мультиплексування з'єднань підтримуєтьсяepoll,kqueue,/dev/pollіselect.Для мультиплексування з'єднань використовуєтьсябібліотекаlibuv,для створення пулунитей(thread pool) задіяна бібліотекаlibeio,для виконанняDNS-запитів у неблокуючому режимі інтегрований c-ares. Всі системні виклики, що спричиняють блокування, виконуються всередині пулу потоків і потім, як і обробники сигналів, передають результат своєї роботи назад через неіменовані канали (pipe).

За своєю суттю Node.js схожий на фреймворкиPerlAnyEvent,RubyEvent MachineіPythonTwisted,але цикл обробки подій (event loop) у Node.js прихований від розробника і нагадує обробку подій увеб застосунку,що працює вбраузері.При написанні програм для Node.js необхідно враховувати специфікуподієво-орієнтованого програмування,наприклад, замість виконання

varresult=db.query("select..");

з очікуванням завершення роботи і наступною обробкою результатів, в Node.js використовує принцип асинхронного виконання, тобто код трансформується в

db.query("select..",function(result){/* обробка результату */});

При цьому управління миттєво перейде до коду який слідує після виклику функції db.query, а результат запиту буде оброблений як тільки будуть оброблені дані. Жодна функція в Node.js не повинна безпосередньо виконувати (блокуючі) операції вводу/виводу — для отримання даних з диска, від іншого процесу або з мережі потрібна установка callback-обробника.

Для розширення функціональності застосунків на базі Node.js підготовлена велика колекція модулів, в якій можна знайти реалізаціюHTTP,SMTP,XMPP,DNS,FTP,IMAP,POP3серверівіклієнтів,модулі для інтеграції з різними вебфреймворками, обробникиWebSocketіAJAX,конектори доСКБД(MySQL,PostgreSQL,SQLite,MongoDB), шаблонізатори,CSS-рушії, реалізації криптоалгоритмів і систем авторизації (наприклад,OAuth),XML-парсери.

Приклад використання

[ред.|ред. код]

Приклад програми, що запускаєвебсервер,виводить в консоль повідомлення, та на коженHTTPзапит відповідає повідомленням«Hello World»

varhttp=require('http');// Завантажуємо модуль http

// Створюємо web-сервер і вказуємо функцію обробки запиту
varserver=http.createServer(function(req,res){
console.log('Початок обробки запиту');
// Передаємо код відповіді і заголовки
res.writeHead(200,{
'Content-Type':'text/plain; charset=UTF-8'
});
res.end('Hello world!');
});

// Запускаємо web-сервер
server.listen(1991,"127.0.0.1",function(){
console.log('Сервер запущено за адресою http://127.0.0.1:1991/');
});

Версії

[ред.|ред. код]
Випуск Кодове ім'я Дата випуску Статус LTS Активний запуск LTS Початок технічного обслуговування Кінець обслуговування
8.x Carbon[24] 2017-05-30 Older version, yet still supported:Технічне обслуговування 2017-10-31 2019-01-01[25] 2019-12-31
9.x 2017-10-01 Немає LTS N/A 2018-06-30
10.x Dubnium[24] 2018-04-24 Older version, yet still supported:Технічне обслуговування 2018-10-30 2020-04-01 2021-04-01
11.x 2018-10-23 Немає LTS N/A 2019-06-30
12.x Erbium[24] 2019-04-23 Current stable version:Активна 2019-10-22 2021-04-01 2022-04-01
13.x 2019-10-22 Немає LTS N/A Червень 2020
14.x Квітень 2020 Future release:Очікує Жовтень 2020 Квітень 2022 Квітень 2023

Модулі

[ред.|ред. код]

Стандартна поставка node.js включає в себе кількадесят модулів, у яких реалізовані типові операції для взаємодії з операційною системою, файловою системою, мережею і протоколами, утиліти для обробки даних.

Крім того є доступними безліч модулів від незалежних розробників, програмісти можуть отримати їх з відкритих репозиторіїв і використовувати у своїх проектах.

Одним з широко використовуваних стандартних модулів є FileSystem[26],який є вбудованим та містить операції роботи з файлами.

constfs=require("fs");
fs.readFile("test.txt",function(err,data){
if(err)throwerr;
console.log(data);
});

Цей код виведе текст з файлаtest.txt,що знаходиться в тій же теці де й сам js-скрипт. Проте результат буде повернутий в бінарному, не читабельному вигляді. Для цього потрібно виконати перетворення об'єктуdataз бінарного типу на текстовий:

constfs=require("fs");
fs.readFile("test.txt",function(err,data){
if(err)throwerr;
data=String(data);// перетворення типів
console.log(data);
});

Виноски

[ред.|ред. код]
  1. node-v0.x-archive on GitHub.Архіворигіналуза 28 квітня 2015.Процитовано 2 August 2014.
  2. Node.js 14 ChangeLog.Архіворигіналуза 18 липня 2020.Процитовано 16 серпня 2020— черезGitHub.
  3. https://github /nodejs/node/blob/master/LICENSE
  4. About Node.js, and why you should add Node.js to your skill set?.Training.Training. Архіворигіналуза 1 квітня 2017.Процитовано 23 жовтня 2016.
  5. Netscape opens intranet attack.CNET(англ.).Архіворигіналуза 30 грудня 2019.Процитовано 20 квітня 2017.
  6. Ryan Dahl (9 листопада 2010).Joyent and Node.Google Groups. Архіворигіналуза 31 травня 2019.Процитовано 5 лютого 2015.
  7. PHP 7 vs Node.js? They Can Be Partners, Not Competitors For a Developer!.Архіворигіналуза 23 лютого 2017.Процитовано 21 December 2016.
  8. Sams Teach Yourself Node.js in 24 Hours[Архівовано23 березня 2017 уWayback Machine.],Sams Publishing, 05-Sep-2012
  9. Ryan Dahl at JSConf EU 2009.Архіворигіналуза 14 травня 2017.Процитовано 11 вересня 2019.
  10. Ryan Dahl at JSConf EU 2009 Video.Архіворигіналуза 15 травня 2017.Процитовано 11 вересня 2019.
  11. абProfessional Node.js: Building JavaScript Based Scalable Software[Архівовано24 березня 2017 уWayback Machine.],John Wiley & Sons, 01-Oct-2012
  12. Earliest releases of npm.GitHub.Архіворигіналуза 1 березня 2017.Процитовано 27 липня 2016.
  13. Porting Node to Windows With Microsoft's Help.Архіворигіналуза 14 липня 2017.Процитовано 17 April 2016.
  14. Dahl, Ryan.New gatekeeper.Архіворигіналуза 31 травня 2019.Процитовано 26 жовтня 2013.
  15. Schlueter, Isaac (15 січня 2014).The Next Phase of Node.js.Архіворигіналуза 14 липня 2017.Процитовано 21 січня 2014.
  16. Krill, Paul (Dec 4, 2014).Why io.js Decided to Fork Node.js.JavaWorld. Архіворигіналуза 30 червня 2017.Процитовано Dec 15, 2014.
  17. Q&A: Why io.js decided to fork Node.js[Архівовано6 листопада 2018 уWayback Machine.],InfoWorldTech Watch
  18. Ben Noordhuis (Nov 12, 2014).Issue 3692: function suddenly becomes undefined.V8 JavaScript Engine Issues. Архіворигіналуза 1 листопада 2015.Процитовано 2 February 2015.
  19. Mikeal, Rogers (28 січня 2015).State of io.js.Архіворигіналуза 30 серпня 2015.Процитовано 2 February 2015.
  20. Node.js Foundation Advances Community Collaboration, Announces New Members and Ratified Technical Governance.Архіворигіналуза 24 June 2015.Процитовано 4 липня 2015.
  21. Node.js Foundation Combines Node.js and io.js Into Single Codebase in New Release.Архіворигіналуза 7 січня 2017.Процитовано 28 січня 2016.
  22. io.js and Node.js merge.Архіворигіналуза 6 березня 2016.Процитовано 27 June 2015.
  23. Io.js, JavaScript I/O[Архівовано4 жовтня 2016 уWayback Machine.],«io.js has merged with the Node.js project again. There won't be any further io.js releases. All of the features in io.js are available in Node.js v4 and above.»
  24. абвnodejs/Release.GitHub(англ.).Процитовано 3 травня 2018.
  25. Node 8 reschedule.Процитовано 22 January 2019.
  26. Модуль FileSystem.Архіворигіналуза 21 листопада 2018.Процитовано 18 травня 2018.

Посилання

[ред.|ред. код]