Node.js
|
| |
| Тип | JavaScript фреймворк |
|---|---|
| Автор(и) | Раян Дал |
| Розробник | Node.js Developers, Joyent, contributors |
| Перший випуск | 27 травня 2009[1] |
| Стабільний випуск | 8.0.0 & 6.10.3(LTS) (30 травня 2017[2] & 4 квітня 2017[3]) |
| Версії | 11.6.0 (26 грудня 2018)[4] |
| Репозиторій | github.com/nodejs/node |
| Операційна система | Mac OS X, Linux, Solaris, FreeBSD, OpenBSD, Windows, webOS, NonStop OS |
| Написано на | C, C++, JavaScript |
| Доступні мови | JavaScript |
| Стан розробки | активний |
| Ліцензія | MIT License |
| nodejs.org | |
Node.js — платформа з відкритим кодом для виконання високопродуктивних мережевих застосунків, написаних мовою JavaScript. Засновником платформи є Раян Дал (Ryan Dahl). Якщо раніше Javascript застосовувався для обробки даних в браузері на сторонні користувача, то node.js надав можливість виконувати JavaScript-скрипти на сервері та відправляти користувачеві результат їх виконання. Платформа Node.js перетворила JavaScript на мову загального використання з великою спільнотою розробників.
Node.js має наступні властивості:
- асинхронна однопотокова модель виконання запитів;
- неблокуючий ввід/вивід;
- система модулів CommonJS;
- рушій JavaScript Google V8;
Для керування модулями використовується пакетний менеджер npm (node package manager).
Зміст
Огляд[ред. | ред. код]
Платформа 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/');
});
Версії[ред. | ред. код]
| Цей розділ потребує доповнення. |
6.0[ред. | ред. код]
Випущена 26 квітня 2016 року. Основними відмінностями від попередніх версій стали поліпшена стабільність та пришвидшення завантаження модулів (в 4 рази в порівнянні з 4.0). Версія 6.0 стала наступною версією, після 4.0, з тривалою підтримкою (англ. Long-time support, LTS). Ця версія побудована на основі нової версії рушія V8 — версії 5.0 з поліпшеною підтримкою стандарту ECMAScript 2015 (ECMA-262, ES6)[5].
7.0[ред. | ред. код]
Реліз 25-го жовтня 2016 року. Саме з цієї версії з використанням параметру --harmony стає можливим використовувати конструкції async/await, які, насправді, є «синтаксичним цукром» до промісів.
8.0[ред. | ред. код]
Випущена 30-го травня 2017 року під керівництвом Джеймса М Снелла та Коліна Ігріга. У цій версії можна помітити значні покращення продуктивності та взаємодії з API, що стосуються розробників. Забезпечена сумісність ABI з V8 5.9 та майбутнім V8 6.0. Зміна консолі, що привела до зменшення помилок при роботі з консольними проектами. Добавлено статичні коди помилок для всіх помилок згенерованих Node.js[джерело?].
Модулі[ред. | ред. код]
FileSystem[ред. | ред. код]
Одним з найпоширеніших модулів є FileSystem[6], якій є вбудованим та містить операції роботи з файлами.
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);
});
Примітки[ред. | ред. код]
- ↑ node-v0.x-archive on GitHub. Процитовано 2 August 2014.
- ↑ Node.js Changelog. Процитовано 2017-03-30.
- ↑ Node.js Changelog. Процитовано 2017-04-04.
- ↑ Release 11.6.0 — 2018.
- ↑ Christina Mulligan (27 квітня 2016). Node.js version 6 released - SD Times. SD Times. https://www.facebook.com/SDTimesBZ. Процитовано 27 квітня 2016.
- ↑ Модуль FileSystem
Посилання[ред. | ред. код]
- Офіційний сайт (англ.)
- Код на ресурсі GitHub (англ.)
- Офіційна документація (англ.)
- Переклад документації (рос.)
| Це незавершена стаття про програмне забезпечення. Ви можете допомогти проекту, виправивши або дописавши її. |
| ||||||||||||||||||||||||||||||||||||||

