Відмінності між версіями «Node.js»

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
[перевірена версія][перевірена версія]
Рядок 42: Рядок 42:
 
У грудні 2014 року Федір Індутний, незадоволений надто консервативним циклом оновлень, випустив io.js, [[форк]] Node.js. Через внутрішній конфлікт щодо управління Joyent, Io.js був створений як відкрита альтернатива управління з окремим технічним комітетом.<ref name="Krill, Paul">{{cite web | url=http://www.javaworld.com/article/2855639/open-source-tools/qanda-why-io-js-decided-to-fork-node-js.html | title=Why io.js Decided to Fork Node.js | publisher=JavaWorld | date=Dec 4, 2014 | accessdate=Dec 15, 2014 | author=Krill, Paul}}</ref><ref name="iwtw">[http://www.infoworld.com/article/2855057/application-development/why-iojs-decided-to-fork-nodejs.html Q&A: Why io.js decided to fork Node.js], [[InfoWorld]] Tech Watch</ref> На відміну від Node.js,<ref>{{cite web | url=https://code.google.com/p/v8/issues/detail?id=3692#c3 | title=Issue 3692: function suddenly becomes undefined | publisher=V8 JavaScript Engine Issues | author=Ben Noordhuis | date=Nov 12, 2014 | accessdate=2 February 2015}}</ref> автори планували постійно оновлювати io.js з найсвіжішими випусками JavaScript-рушія V8.<ref name="Mikeal, Rogers">{{cite web | url=https://medium.com/node-js-javascript/state-of-io-js-2b3094e6f923 | title=State of io.js | date=January 28, 2015 | accessdate=2 February 2015 | author=Mikeal, Rogers}}</ref>
 
У грудні 2014 року Федір Індутний, незадоволений надто консервативним циклом оновлень, випустив io.js, [[форк]] Node.js. Через внутрішній конфлікт щодо управління Joyent, Io.js був створений як відкрита альтернатива управління з окремим технічним комітетом.<ref name="Krill, Paul">{{cite web | url=http://www.javaworld.com/article/2855639/open-source-tools/qanda-why-io-js-decided-to-fork-node-js.html | title=Why io.js Decided to Fork Node.js | publisher=JavaWorld | date=Dec 4, 2014 | accessdate=Dec 15, 2014 | author=Krill, Paul}}</ref><ref name="iwtw">[http://www.infoworld.com/article/2855057/application-development/why-iojs-decided-to-fork-nodejs.html Q&A: Why io.js decided to fork Node.js], [[InfoWorld]] Tech Watch</ref> На відміну від Node.js,<ref>{{cite web | url=https://code.google.com/p/v8/issues/detail?id=3692#c3 | title=Issue 3692: function suddenly becomes undefined | publisher=V8 JavaScript Engine Issues | author=Ben Noordhuis | date=Nov 12, 2014 | accessdate=2 February 2015}}</ref> автори планували постійно оновлювати io.js з найсвіжішими випусками JavaScript-рушія V8.<ref name="Mikeal, Rogers">{{cite web | url=https://medium.com/node-js-javascript/state-of-io-js-2b3094e6f923 | title=State of io.js | date=January 28, 2015 | accessdate=2 February 2015 | author=Mikeal, Rogers}}</ref>
   
У лютому 2015 року було оголошено про намір створити нейтральний фонд Node.js. До червня 2015 року спільноти Node.js та io.js проголосували за спільну роботу в рамках Node.js Foundation.[40]
+
У лютому 2015 року було оголошено про намір створити нейтральний фонд Node.js. До червня 2015 року спільноти Node.js та io.js проголосували за спільну роботу в рамках [[Node.js Foundation]].<ref>{{cite web|url=https://www.linuxfoundation.org/news-media/announcements/2015/06/nodejs-foundation-advances-community-collaboration-announces-new|title=Node.js Foundation Advances Community Collaboration, Announces New Members and Ratified Technical Governance|publisher=|accessdate=4 July 2015|deadurl=yes|archiveurl=https://web.archive.org/web/20150624075643/http://www.linuxfoundation.org/news-media/announcements/2015/06/nodejs-foundation-advances-community-collaboration-announces-new|archivedate=24 June 2015|df=}}</ref>
   
У вересні 2015 року Node.js v0.12 та io.js v3.3 були об'єднані разом у Node v4.0. [41] Це об'єднання принесло можливості V8 ES6 в Node.js і довготривалий цикл випуску підтримки. [42] Станом на 2016 рік веб-сайт io.js рекомендує розробникам перейти на Node.js і не планувати подальших випусків io.js через злиття.
+
У вересні 2015 року Node.js v0.12 та io.js v3.3 були об'єднані разом у Node v4.0.<ref>{{cite web|url=https://nodejs.org/en/blog/announcements/foundation-v4-announce/|title=Node.js Foundation Combines Node.js and io.js Into Single Codebase in New Release|publisher=|accessdate=28 Jan 2016}}</ref> Це об'єднання принесло можливості V8 ES6 в Node.js і довготривалий цикл випуску підтримки.<ref>{{cite web | url=https://medium.com/node-js-javascript/io-js-week-of-may-15th-9ada45bd8a28 | title=io.js and Node.js merge | accessdate=27 June 2015}}</ref> Станом на 2016 рік веб-сайт io.js рекомендував розробникам перейти на Node.js і не планувати подальших випусків io.js через злиття.<ref>[https://iojs.org/en/ Io.js, JavaScript I/O], ''"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."''</ref>, нині той домен переадресовує запити на офіційний [https://nodejs.org/en/ сайт nodejs.org].
   
 
== Огляд ==
 
== Огляд ==

Версія за 13:06, 11 вересня 2019

Node.js
Node.js logo.svg
Тип JavaScript фреймворк
Автор(и) Раян Дал
Розробник Node.js Developers, Joyent, contributors
Перший випуск 27 травня, 2009; 10 років тому (2009-05-27)[1]
Стабільний випуск 12.1.0 & 10.15.3(LTS) (23 квітня, 2019; 5 місяців тому (2019-04-23)[2] & 24 квітня, 2018; 17 місяців тому (2018-04-24)[3])
Версії 12.12.0 (11 жовтня 2019)[4]
Репозиторій github.com/nodejs/node
Операційна система Mac OS X, Linux, Solaris, FreeBSD, OpenBSD, Windows, webOS, NonStop OS
Написано на C, C++, JavaScript
Доступні мови JavaScript
Стан розробки активний
Ліцензія MIT License
Онлайн-документація bastify.com/hosting-nodejs/
nodejs.org

CMNS: Node.js на Вікісховищі

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

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

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

Історія

Раян Дал, творець Node.js, у 2010

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

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

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

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

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

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

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

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

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

Огляд

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

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

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

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

 var result = 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»

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

// Створюємо web-сервер і вказуємо функцію обробки запиту
var server = 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('Cервер запущено за адресою http://127.0.0.1:1991/');
});

Версії

Випуск Кодове ім'я Дата випуску Статус LTS Активний запуск LTS Початок технічного обслуговування Кінець обслуговування
8.x Carbon[25] 2017-05-30 Older version, yet still supported: Технічне обслуговування 2017-10-31 2019-01-01[26] 2019-12-31
9.x 2017-10-01 Немає LTS N/A 2018-06-30
10.x Dubnium[25] 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[25] 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

Модулі

FileSystem

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

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

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

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

Виноски

  1. node-v0.x-archive on GitHub. Процитовано 2 August 2014. 
  2. Node.js Changelog. Процитовано 2017-03-30. 
  3. Node.js Changelog. Процитовано 2017-04-04. 
  4. Release 12.12.0 — 2019.
  5. About Node.js, and why you should add Node.js to your skill set?. Training.com. Training.com. Процитовано 23 October 2016. 
  6. Netscape opens intranet attack. CNET (en). Процитовано 2017-04-20. 
  7. Ryan Dahl (2010-11-09). Joyent and Node. Google Groups. Процитовано 2015-02-05. 
  8. PHP 7 vs Node.js? They Can Be Partners, Not Competitors For a Developer!. Процитовано 21 December 2016. 
  9. Sams Teach Yourself Node.js in 24 Hours, Sams Publishing, 05-Sep-2012
  10. Ryan Dahl at JSConf EU 2009. 
  11. Ryan Dahl at JSConf EU 2009 Video. 
  12. а б Professional Node.js: Building JavaScript Based Scalable Software, John Wiley & Sons, 01-Oct-2012
  13. Earliest releases of npm. GitHub. Процитовано 27 July 2016. 
  14. Porting Node to Windows With Microsoft's Help. Процитовано 17 April 2016. 
  15. Dahl, Ryan. New gatekeeper. Процитовано 26 October 2013. 
  16. Schlueter, Isaac (January 15, 2014). The Next Phase of Node.js. Процитовано 21 January 2014. 
  17. Krill, Paul (Dec 4, 2014). Why io.js Decided to Fork Node.js. JavaWorld. Процитовано Dec 15, 2014. 
  18. Q&A: Why io.js decided to fork Node.js, InfoWorld Tech Watch
  19. Ben Noordhuis (Nov 12, 2014). Issue 3692: function suddenly becomes undefined. V8 JavaScript Engine Issues. Процитовано 2 February 2015. 
  20. Mikeal, Rogers (January 28, 2015). State of io.js. Процитовано 2 February 2015. 
  21. Node.js Foundation Advances Community Collaboration, Announces New Members and Ratified Technical Governance. Архів оригіналу за 24 June 2015. Процитовано 4 July 2015. 
  22. Node.js Foundation Combines Node.js and io.js Into Single Codebase in New Release. Процитовано 28 Jan 2016. 
  23. io.js and Node.js merge. Процитовано 27 June 2015. 
  24. Io.js, JavaScript I/O, "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."
  25. а б в Помилка цитування: Неправильний виклик <ref>: для виносок Release не вказаний текст
  26. Node 8 reschedule. Процитовано 22 January 2019. 
  27. Модуль FileSystem

Посилання