Movatterモバイル変換


[0]ホーム

URL:


Перейти до вмісту
Вікіпедія
Пошук

Node.js

Матеріал з Вікіпедії — вільної енциклопедії.
Node.js
ТипСередовище виконанняJavaScript
АвторРаян Дал
РозробникиNode.js Developers,Joyent,contributors
Перший випуск27 травня2009; 16 років тому (2009-05-27)[1]
Стабільний випуск22.7.0 (22 серпня2024; 17 місяців тому (2024-08-22)[2])
Операційна системаMac OS X,Linux,Solaris,FreeBSD,OpenBSD,Windows,webOS,NonStop OS
Мова програмуванняC,C++,JavaScript
Доступні мовиJavaScript
Стан розробкиактивний
ЛіцензіяMIT License
Онлайн-документаціяnodejs.org/docs/latest/api/(англ.) Редагувати інформацію у Вікіданих
Репозиторійgithub.com/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.xCarbon[24]2017-05-30Older version, yet still supported: Технічне обслуговування2017-10-312019-01-01[25]2019-12-31
9.x2017-10-01Немає LTSN/A2018-06-30
10.xDubnium[24]2018-04-24Older version, yet still supported: Технічне обслуговування2018-10-302020-04-012021-04-01
11.x2018-10-23Немає LTSN/A2019-06-30
12.xErbium[24]2019-04-23Current stable version:Активна2019-10-222021-04-012022-04-01
13.x2019-10-22Немає LTSN/AЧервень 2020
14.xКвітень 2020Future release: ОчікуєЖовтень 2020Квітень 2022Квітень 2023

Модулі

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

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

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

FileSystem

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

Одним з широко використовуваних стандартних модулів є 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 серпня 2014.
  2. Release 2024-08-22, Version 22.7.0 (Current), @RafaelGSS · nodejs/node.GitHub(англ.). Процитовано 11 вересня 2024.
  3. https://github.com/nodejs/node/blob/master/LICENSE
  4. About Node.js, and why you should add Node.js to your skill set?.Training.com. Training.com. Архіворигіналу за 1 квітня 2017. Процитовано 23 жовтня 2016.[Архівовано 2017-04-01 уWayback Machine.]
  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 грудня 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 квітня 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.[Архівовано 2017-06-30 уWayback Machine.]
  17. Q&A: Why io.js decided to fork Node.js[Архівовано 6 листопада 2018 уWayback Machine.],InfoWorld Tech Watch
  18. Ben Noordhuis (Nov 12, 2014).Issue 3692: function suddenly becomes undefined. V8 JavaScript Engine Issues. Архіворигіналу за 1 листопада 2015. Процитовано 2 лютого 2015.
  19. Mikeal, Rogers (28 січня 2015).State of io.js. Архіворигіналу за 30 серпня 2015. Процитовано 2 лютого 2015.
  20. Node.js Foundation Advances Community Collaboration, Announces New Members and Ratified Technical Governance. Архіворигіналу за 24 червня 2015. Процитовано 4 липня 2015.[Архівовано 2015-06-24 уWayback Machine.]
  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 червня 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 січня 2019.
  26. Модуль FileSystem. Архіворигіналу за 21 листопада 2018. Процитовано 18 травня 2018.

Посилання

[ред. |ред. код]
Каркаси вебзастосунків (веб-фреймворки)
ASP.NET
ColdFusion
Common Lisp
Erlang
Flex
Java
Клієнтські дляJavaScript
Perl
PHP
Python
Ruby
Scala
Серверні дляJavaScript
Lua
Dart
Інші
Платформи
Фреймворки
Мови
Хости
Бібліотеки
Отримано зhttps://uk.wikipedia.org/w/index.php?title=Node.js&oldid=44018082
Категорії:
Приховані категорії:

[8]ページ先頭

©2009-2026 Movatter.jp