Top languages in GitHub based on Pull requests

Node.js Глава 1.1 История Node.js

Оглавление

Введение

1.1.1 Предшествующая идея

1.1.2 Рождение Node.js

1.1.3 Прорыв Node.js

1.1.4 Node.js становится доступен на Windows

1.1.5 io.js – ответвление Node.js

1.1.6 Воссоединение Node.js

1.1.7 Deno – новая звезда в небе Javascript

1.1.8 Сообщество OpenJS

Введение

Главная идея, предшествующая появлению языка JavaScript – желание привнести динамику в веб страницы. Скриптовый язык JS должен был компенсировать недостатки HTML, проявляющиеся при обработке ответа от пользовательского ввода. История языка Javascript начинается в 1995 году, когда была выпущена первая версия языка под кодовым именем Mocha, Брендоном Эйком, разработчиком из компании Netscape. Да, да, той самой компаний, где был разработан одноименный браузер. Один из самых известных фактов об этом, ставшем уже легендарным языке – прототип данного успешного и одного из самых распространенных языков в мире был разработан всего за 10 дней. В этом же году язык был переименован в LiveScript, и уже впоследствии в JavaScript, в тесном сотрудничестве между компаниями Netscape и Sun. В основном это было продиктовано маркетинговыми целями, так как именно в это время начал медийно греметь язык Java. И у программистов были глобальные ожиданиями того, что java станет локомотивом клиентской веб-разработки.

В то же самое время компания Microsoft, убежденная в успехе JavaScript, интегрирует свой скриптовый язык в Internet Explorer 3 в 1996 году. Он получил название JScript, и был довольно сильно совместим в языком JavaScript, но имел при этом свои особенности и дополнительные возможности.

До определенного момента, взаимное соперничество двух компаний было известно как браузерные войны. К данному моменту они прекратились, так как лидером в распространенности браузеров по состоянию на апрель 2023 года стал браузер Chrome,  а Internet Explorer прекратил свое существование из за прекращения разработки новых версий. Однако именно конкуренция и привела к тому, что две версии взаимно улучшались, ускорялись в плане производительности и это одна из главных причин, почему язык JavaScript на сегодня так распространен.

В 1997 году Ecma International подготовила первый черновик стандарта языка. Итоговая первая  версия стандарта ядра скриптового языка получила наименование  ECMA-262 или ISO/IEC 16262. Текущую версию стандарта можно посмотреть по адресу www.ecma-international.org/publications/standards/Ecma-262.htm. В соответствии с этим стандартом, версия языка JavaScript , не зависящая от конкретного производителя – корпорации,  называется ECMAScript. Стандарты языка начинаются с цифры 1, а уже начиная с с 6 версии, помимо порядкового номера, версия включает в себя еще и год стандартизации. ECMAScript версии 8 называется  ECMAScript 2017. Как и с языком Java, все производители также поддерживают старые версии. Новые возможности можно также включать через флаги конфигурации в браузере или через полифиллы(это воссоздание функций в JavaScript). Для того, чтобы хорошо разбираться в текущих поддерживаемых возможностях, можно обратиться к таблице совместимости Kangax, расположенной по адресу http://kangax.github.io/compat-table/es6/ . Версия таблицы, адаптированная к Node.js доступна к изучению на сайте http://node.green/ . Вы ее можете посмотреть на рисунке 1.1

Support for Javascript Features in Node.js
Рис. 1.1 Поддержка возможностей Javascript в Node.js(http://node.green)

JavaScript – это быстрый и легкий в изучении язык, а также он имеет большую экосистему фреймворков и библиотек. С учетом всех этих аргументов, JavaScript один из наиболее распространенных и известных языков программирования в мире. Этот успех отслеживается по годам: начиная с 2008 года язык Javascript занимает топовые места среди первых 3 наиболее распространенных языков. И только в 2021 году JavaScript был вытеснен языком Python, занявшему первое место, и сейчас JavaScript занимает второе место в списке, как видно на рис. 1.2

Top languages in GitHub based on Pull requests
Рис 1.2 Статистика pull запросов с сайта GitHub, выборка по языкам программирования(https://madnight.github.io/githut/#/pull_requests/2022/4)

Node.js основан на этом успешном языке и имеет такой же ослепительный взлет популярности. Эта глава является вводной для обозрения мира Node.js и показывает Вам как платформа построена и где и как Вы можете использовать Node.js.

1.1.1 Предшествующая идея

Для того чтобы помочь Вам понять что такое Node.js и как были приняты некоторые решения по разработке, окунемся в историю платформы.

Node.js был разработан Райаном Дайлем, кандидатом наук по математике, который решил бросить все и уехать в Южную Америку с билетом в один конец и с небольшой суммой денег в кармане. Там он едва держался на плаву, обучая людей английскому языку. Именно в это время он познакомился с языком PHP и Ruby и увлекся веб разработкой. Проблема при работе с фреймворком Ruby, называемом Rails, была в том, что он мог обрабатывать параллельные запросы, используя обходные пути. Приложения были слишком медленные и сильно нагружали CPU. Дайль нашел решение для его проблем – Монгрель – веб сервер приложений, основанный на Ruby.

В отличии от традиционных веб серверов, Монгрель отвечает на пользовательские запросы и генерирует ответы динамически, отправляя статические HTML страницы.

Задача, которая привела к созданию Node.js довольна тривиальна, если посмотреть на нее сегодня. В 2005 году Дайль искал элегантный способ для реализации индикатора загрузки при загрузке файлов. Технологии того времени давали сложные в реализации решения этой задачи. Что касается передачи данных, HTTP использовался главным образом для загрузки небольших файлов. Для загрузки больших файлов использовался протокол FTP. Статус загрузки файла опрашивался, используя технологию long pull, когда клиенты отправляют запросы на сервер с большим временем ожидания и затем сервер использовал этот канал для отправки ответа клиенту. Первая версия реализации полноценного progress bar была реализована Дайлем в Mongrel. После того как отправлялся файл на сервер, проверялся статус загрузки файла, используя большое количество асинхронных JavaScript и XML(AJAX) запросов и на основании полученных данных отрисовывался ProgresBar. Недостатком была однопоточная реализация Ruby и большое количество отправляемых запросов.

Другой подход, обещающий большую функциональность, был основан на языке С. Возможности Дайля теперь не ограничивались всего одним потоком. Однако язык С не предназначен для реализации сложных веб задач – очень малое количество разработчиков решают похожие задачи на языке С. Дайль тоже понял это довольно быстро и отказался от этой идеи.

Поиски подходящего языка программирования в решении его проблемы, привели его к знакомству с функциональным языком программирования – Haskell. У языка Haskell есть важная отличительная особенность – неблокирующий ввод-вывод. Это значит все операции ввода-вывода являются асинхронными и не блокируют программу во время своей работы. Это позволяет однопоточному языку справляться с выполнением параллельных задач. Помимо всего прочего, нет необходимости в синхронизации ресурсов  и нет проблем при выполнении параллельных потоков. Однако Дайль все еще не был доволен выбором этого языка программирования и продолжал искать другое решение.

1.1.2 Рождение Node.js

Дайль нашел решение, которым он был удовлетворен – выбор языка Javascript. Он понял, что именно этот язык соответствует его требованиям. JavaScript имел долгую историю развития, применялся в web разработке продолжительное время, у него были мощные движки и большое сообщество разработчиков. В январе 2009 года он начал работать над его серверной реализацией. Именно это время считается датой рождения Node.js. Другой причиной для реализации серверного решения на JavaScript, согласно Дайлю, был тот факт, что разработчики даже не представляли, что JavaScript может использоваться в этой области разработки. В то время, не было нативных решений JavaScript серверов, он не мог обрабатывать файлы в файловой системе и не было никаких реализаций сокетов для взаимодействия с другими приложениями или системами. Как ни странно, именно эти момент и говорили в пользу выбора языка JavaScript  как основы для нативного веб сервера – так как не было никаких других веб серверов, следовательно не было и никаких ошибок или негативных примеров применения. И к тому же сама архитектура языка JavaScript позволяла реализовать его гениальную идею. Подход, заключающийся в использовании функций верхнего уровня( т.е. функций, которые не связаны с каким либо объектом, находятся в свободном доступе и могут быть назначены переменным) обеспечивает гибкость в разработке и позволяет использовать функциональный подход.

Таким образом, Дайль включил сторонние библиотеки в дополнение к движку JavaScript, отвечающему за интерпретацию исходного кода JavaScript и собрал все это в единую платформу.

В сентябре 2009 года Исаак Шлютер начал работу над менеджером пакетов для Node.js, известном как Node Package Manager(npm).

1.1.3 Прорыв Node.js

После того как Дайль интегрировал  все компоненты и создал первый работающий пример платформы Node.js, встал вопрос как представить Node.js сообществу разработчиков. Также эта необходимость остро встала из за того, что за время работы над платформой, финансовые ресурсы Дайля сильно сократились и без спонсоров работу над проектом пришлось бы прекратить или сильно сократить. В качестве платформы для презентации, он выбрал JavaScript конференцию  JSConf в Берлине, в ноябре 2009 года. Дайль сложил все яйца в одну корзину. Если презентация прошла бы успешно, в этом случае он нашел бы спонсоров для поддержки его работы над платформой Node.js, а если презентация провалится, то год работы над проектом пройдет напрасно. В яркой и зажигательной презентации, стеснительный и неуверенный в себе Дайль показал как создать полнофункциональный веб сервер всего парой строк JavaScript кода. В качестве другого примера, он презентовал реализацию IRC(Internet Relay Chat) чат веб сервера. Исходный код примера занимал всего около 400!!! строк кода. На этом примере он продемонстрировал архитектуру и сильные стороны своего веб сервера. Запись презентации можно посмотреть по адресу: https://www.youtube.com/watch?v=EeYvFl7li9E&ab_channel=JSConf . Презентация не прошла незамеченной и привлекла к себе внимание Joyent Inc. Joyent Int. – компания из г. Сан – Франциско, занимается тем, что предоставляет облачные хостинг решения для бизнеса, впоследствии была поглощена компанией Samsung. Joyent включила платформу с открытым исходным кодом Node.js в свой портфель продуктов и предоставила к нему доступ своим клиентам. Дайль был приглашен в компанию на должность сопровождающего разработчика Node.js

1.1.4 Node.js становится доступен на Windows

Первоначально Node.js был доступен в среде Windows, после танцев с бубном вокруг Cygwin. Но уже начиная с версии 0.6 разработчики внедрили встроенную поддержку ОС Windows в ноябре 2011 года.

Начиная с версии 0.6.3 в ноябре 2011 года, менеджер пакетов npm стал частью веб сервера Node.js и становится автоматически доступным после установки Node.js

В начале 2012 года, Дайль удивил всех, заявив что уходит из активной работы по разработке Node.js, после трех лет кропотливого труда. Главным разработчиком стал Шлютер. Шлютер уже состоял к этому моменту в команде разработчиков компании Joyent и принимал самое активное участие в разработке. Это известие взбудоражило сообщество разработчиков, так как не было понимания того, будет ли продолжение развития платформы без Дайля. В июне 2012 выходит версия 0.8, которая улучшала производительность и повышала стабильность веб сервера. С выходом этого релиза все тревоги и беспокойство сошло на нет.

В марте 2013 года вышла версия 0.10. В этой версии был значительно изменен API Stream. С этим изменением API стало возможно активно извлекать данные из потоков. Чтобы не нарушать работу уже созданных и стабильно работающих веб приложений, поддержка обеих версий API была сохранена.

1.1.5 io.js – ответвление Node.js

В январе 2014 года произошло следующее изменение в управлении проектом Node.js. Исаак Шлюттер покинул команду разработчиков Node.js и основал свою компанию – npmjs, которая является собственником репозитория npm. Его сменил Дж. Фонтейн. И уже под его руководством вышла версия 0.12 в феврале 2014 года. Главной критикой Node.js на тот момент было то, что версия платформы Node.js так и не достигла цифры 1 – формально спустя 4 года Node.js еще не был стабильным веб сервером, что отпугивало крупных технологических гигантов от его внедрения.

Разработчики были недовольны работой компании Joyent, а именно назначением ведущих разработчиков со времен ухода Дайля. Поэтому сообщество развалилось к декабрю 2014 года. В результате ветка io.js была разработана отдельно от исходной платформы Node.js. Все это послужило катализатором создания независимого Node.js Foundation(сообщество разработчиков Node.js). Node.js Foundation отвечал за развитие ветки io.js. В это же время выпускается версия 0.12 Node.js

1.1.6 Воссоединение Node.js

В июне 2015 года оба проекта – io.js и Node.js были объединены в единое сообщество Node.js Foundation. Начиная с 4 версии, слияние проектов было завершено. Дальнейшая разработка теперь координируется сообществом Node.js Foundation, а не отдельными лицами. Как результат увеличилась частота выхода новых релизов и появились LTS версии(Long Time Support – длительная поддержка версии).

1.1.7 Deno – новая звезда в небе Javascript

После того, как произошло слияние io.js и Node.js, негативный фон сошел на нет – регулярные релизы, стабильность платформы и постоянная интеграция новых возможностей, таких как рабочие потоки, HTTP2, обработчики производительности – все это поддерживало хорошее настроение в сообществе. И как раз именно в тот момент, когда развитие Node.js пошло своим чередом, старый знакомый Дайль представил новую JavaScript платформу, под именем Deno, которую представил как – “10 вещей, о которых я жалею в Node.js“.

Идея, предшествующая созданию Deno – создать платформу, которая лучше чем Node.js в плане свободы от ограничений обратной совместимости, которые препятствуют революционному развитию Node.js.  Например Deno базируется на языке TypeScript и добавляет принципиально иную систему модулей. Ядро новой платформы оказалось более производительным, так как ядро Deno почти почти полностью написано на языке Rust.

Тем не менее, у обеих платформ есть много общего. Например Deno базируется на проверенном и отлаженном движке V8, который также является и сердцем Node.js. Ну и конечно не обошлось без детища Исаака  Шлюттера – менеджера пакетов npm. Вы можете прочитать больше о Deno в главе 28.

1.1.8 Сообщество OpenJS

В 2015 был созданNode.js Foundation для координации работы над платформой(прим. переводчика – обычно встречается перевод как “фонд OpenJS”. Я считаю что более объемлемый термин будет именно сообщество, а не фонд, так как финансовое управление платформой занимает не больше 10% от задач сообщества)  Это сообщество было подчинено Linux сообществу.  В 2019 году JS Foundation и Node.js Foundation были объединены в OpenJS Foundation. В него входят помимо Node.js и другие популярные продукты, такие как webpack, ESLint, иElectron.

Leave a Reply

Please disable your adblocker or whitelist this site!