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

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
[перевірена версія][перевірена версія]
Рядок 51: Рядок 51:
 
В платформі використовується розроблений компанією [[Google]] [[рушій JavaScript|рушій]] [[V8 (рушій JavaScript)|V8]].
 
В платформі використовується розроблений компанією [[Google]] [[рушій JavaScript|рушій]] [[V8 (рушій JavaScript)|V8]].
   
Для забезпечення обробки великої кількості паралельних запитів у Node.js використовується асинхронна модель запуску коду, заснована на обробці подій в неблокуючому режимі та визначенні обробників зворотніх викликів (callback). Як способи мультиплексування з'єднань підтримується epoll, kqueue, /dev/poll і select. Для мультиплексування з'єднань використовується [[бібліотека програм|бібліотека]] libuv, для створення пулу [[нить|нитей]] (thread pool) задіяна бібліотека libeio, для виконання [[DNS]]-запитів у неблокуючому режимі інтегрований c-ares. Всі системні виклики, що спричиняють блокування, виконуються всередині пулу потоків і потім, як і обробники сигналів, передають результат своєї роботи назад через неіменовані канали (pipe).
+
Для забезпечення обробки великої кількості паралельних запитів у Node.js використовується асинхронна модель запуску коду, заснована на обробці подій в неблокуючому режимі та визначенні обробників зворотніх викликів (callback). Як способи мультиплексування з'єднань підтримується <tt>epoll</tt>, <tt>kqueue</tt>, <tt>/dev/poll</tt> і <tt>select</tt>. Для мультиплексування з'єднань використовується [[бібліотека програм|бібліотека]] [[libuv]], для створення пулу [[нить|нитей]] (thread pool) задіяна бібліотека [[libeio]], для виконання [[DNS]]-запитів у неблокуючому режимі інтегрований c-ares. Всі системні виклики, що спричиняють блокування, виконуються всередині пулу нитей і потім, як і обробники сигналів, передають результат своєї роботи назад через неіменовані канали (pipe).
   
За своєю суттю Node.js схожий на фреймворки [[Perl]] [[AnyEvent]], [[Ruby]] [[Event Machine]] і [[Python]] [[Twisted]], але цикл обробки подій (event loop) у Node.js прихований від розробника і нагадує обробку подій у [[веб-застосунок|веб-застосунку]], що працює в [[браузер]]і. При написанні програм для Node.js необхідно враховувати специфіку подієво-орієнтованого програмування, наприклад, замість виконання
+
За своєю суттю Node.js схожий на фреймворки [[Perl]] [[AnyEvent]], [[Ruby]] [[Event Machine]] і [[Python]] [[Twisted]], але цикл обробки подій (event loop) у Node.js прихований від розробника і нагадує обробку подій у [[веб-застосунок|веб-застосунку]], що працює в [[браузер]]і. При написанні програм для Node.js необхідно враховувати специфіку [[подієво-орієнтоване програмування|подієво-орієнтованого програмування]], наприклад, замість виконання
 
<source lang=javascript>
 
<source lang=javascript>
 
var result = db.query ("select .. ");
 
var result = db.query ("select .. ");

Версія за 12:37, 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 році [24] приблизно через тринадцять років після появи першого серверного середовища JavaScript, LiveWire Pro Web від Netscape.[25] Первісний випуск підтримував лише Linux та Mac OS X. Його розробку та обслуговування очолював Дал, а згодом і компанія Joyent. [26]

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

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

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

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

У січні 2012 року Дал відійшов в сторону, заохочуючи колегу і творця npm Ісаака Шлютера до управління проектом.[34] У січні 2014 року Шлютер оголосив, що проект буде очолювати Тімоті Дж. Фонтен.[35]

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

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

У вересні 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 через злиття.

Огляд

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

 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. а б в Помилка цитування: Неправильний виклик <ref>: для виносок Release не вказаний текст
  6. Node 8 reschedule. Процитовано 22 January 2019. 
  7. Модуль FileSystem

Посилання