Loading AI tools
З Вікіпедії, вільної енциклопедії
Node.js — платформа з відкритим кодом для виконання високопродуктивних мережевих застосунків, написаних мовою JavaScript. Засновником платформи є Раян Дал (Ryan Dahl). Якщо раніше JavaScript застосовувався для обробки даних в браузері користувача, то node.js надав можливість виконувати JavaScript-скрипти на сервері та відправляти користувачеві результат їхнього виконання. Платформа Node.js перетворила JavaScript на мову загального використання з великою спільнотою розробників.
Тип | Середовище виконання JavaScript |
---|---|
Автор | Раян Дал |
Розробники | Node.js Developers, Joyent, contributors |
Перший випуск | 27 травня 2009[1] |
Стабільний випуск | 22.7.0 (22 серпня 2024[2]) |
Операційна система | Mac OS X, Linux, Solaris, FreeBSD, OpenBSD, Windows, webOS, NonStop OS |
Мова програмування | C, C++, JavaScript |
Доступні мови | JavaScript |
Стан розробки | активний |
Ліцензія | MIT License |
Онлайн-документація | nodejs.org/en/docs |
Репозиторій | github.com/nodejs/node |
Вебсайт | nodejs.org |
Node.js має наступні властивості:
Для керування модулями використовується пакетний менеджер npm (node package manager).
Node.js був спочатку написаний Раяном Далом у 2009 році[3] приблизно через тринадцять років після появи першого серверного середовища JavaScript, LiveWire Pro Web від Netscape.[4] Первісний випуск підтримував лише Linux та Mac OS X. Його розробку та обслуговування очолював Дал, а згодом і компанія Joyent.[5]
Дал розкритикував обмежені можливості найпопулярнішого вебсервера 2009 року, Apache HTTP Server, обробляти безліч одночасних з'єднань (до 10 000 і більше) та найпоширеніший спосіб створення коду (послідовне програмування), коли код або блокував весь процес або залучає кілька стеків виконання у разі одночасного з'єднання.[6]
Дал продемонстрував проєкт на першій європейській JSConf 8 листопада 2009 року[7][8][9] Node.js поєднував у собі JavaScript-рушій Google V8, цикл обробки подій на основі C-бібліотек, і низькорівневий API вводу-виводу.[10]
У січні 2010 року для середовища Node.js був введений менеджер пакетів під назвою npm.[11] Менеджер пакетів полегшує програмістам публікацію та обмін сирцевим кодом бібліотек Node.js і призначений для спрощення встановлення, оновлення та видалення бібліотек.[10]
У червні 2011 року Microsoft та Joyent реалізували Windows-версію Node.js.[12] Перше складання Node.js, що підтримує Windows, випущене в липні 2011 року.
У січні 2012 року Дал відійшов у сторону, заохочуючи колегу і творця npm Ісаака Шлютера (Isaac Schlueter) до управління проєктом.[13] У січні 2014 року Шлютер оголосив, що проєкт буде очолювати Тімоті Фонтен (Timothy J. Fontaine).[14]
У грудні 2014 року Федір Індутний, незадоволений надто консервативним циклом оновлень, випустив io.js, форк Node.js. Через внутрішній конфлікт щодо управління Joyent, Io.js був створений як відкрита альтернатива управління з окремим технічним комітетом.[15][16] На відміну від Node.js,[17] автори планували постійно оновлювати io.js з найсвіжішими випусками JavaScript-рушія V8.[18]
У лютому 2015 року було оголошено про намір створити нейтральний фонд Node.js. До червня 2015 року спільноти Node.js та io.js проголосували за спільну роботу в рамках Node.js Foundation.[19]
У вересні 2015 року Node.js v0.12 та io.js v3.3 були об'єднані разом у Node v4.0.[20] Це об'єднання принесло можливості V8 ES6 в Node.js і довготривалий цикл випуску підтримки.[21] Станом на 2016 рік вебсайт io.js рекомендував розробникам перейти на Node.js і не планувати подальших випусків io.js через злиття.[22], нині той домен переадресовує запити на офіційний сайт 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 схожий на фреймворки 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('Сервер запущено за адресою http://127.0.0.1:1991/');
});
Випуск | Кодове ім'я | Дата випуску | Статус LTS | Активний запуск LTS | Початок технічного обслуговування | Кінець обслуговування |
---|---|---|---|---|---|---|
8.x | Carbon[23] | 2017-05-30 | Технічне обслуговування | 2017-10-31 | 2019-01-01[24] | 2019-12-31 |
9.x | 2017-10-01 | Немає LTS | N/A | 2018-06-30 | ||
10.x | Dubnium[23] | 2018-04-24 | Технічне обслуговування | 2018-10-30 | 2020-04-01 | 2021-04-01 |
11.x | 2018-10-23 | Немає LTS | N/A | 2019-06-30 | ||
12.x | Erbium[23] | 2019-04-23 | Активна | 2019-10-22 | 2021-04-01 | 2022-04-01 |
13.x | 2019-10-22 | Немає LTS | N/A | Червень 2020 | ||
14.x | Квітень 2020 | Очікує | Жовтень 2020 | Квітень 2022 | Квітень 2023 |
Стандартна поставка node.js включає в себе кількадесят модулів, у яких реалізовані типові операції для взаємодії з операційною системою, файловою системою, мережею і протоколами, утиліти для обробки даних.
Крім того є доступними безліч модулів від незалежних розробників, програмісти можуть отримати їх з відкритих репозиторіїв і використовувати у своїх проектах.
Одним з широко використовуваних стандартних модулів є FileSystem[25], який є вбудованим та містить операції роботи з файлами.
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;
data = String(data); // перетворення типів
console.log(data);
});
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.