Node.js — всё по этой теме для программистов


Оглавление (нажмите, чтобы открыть):

NodeJS — популярный инструмент современной веб-разработки

Дата публикации: 2020-06-11

От автора: приветствую вас, друзья! В данной статье поговорим о том, что такое Node.js, как он может быть полезен в веб-разработке, каковы его преимущества и особенности, где и как он применяется, что с его помощью можно делать. Словом, выясним, почему его вообще нужно начинать использовать.

Что такое NodeJS

Node.js — это кроссплатформенная среда с открытым исходным кодом для разработки серверных и сетевых приложений. Приложения написаны на JavaScript и могут выполняться в среде исполнения Node.js на ОС X, Microsoft Windows и Linux. Node.js использует управляемую событиями, неблокирующую модель ввода-вывода, которая делает его простым и эффективным, идеальным для приложений с интенсивным использованием данных в реальном времени, работающих через распределенные устройства.

Самое главное, что нужно понимать, это то, что Node.js — не сервер. Нет в нем конфигурационных файлов, как, например, в Apach, и сам по себе Node ничего не делает. Это среда выполнения JavaScript кода — еще один способ выполнить его на компьютере. И если нам нужно, чтобы эта платформа была HTTP-сервером, то мы должны написать его сами.

Приложения Node.js написаны на JavaScript и могут выполняться в среде исполнения на ОС X, Windows и Linux. Node.js отлично подходит для масштабируемых высоконагруженных проектов. С его помощью также можно создавать синхронные кроссплатформенные решения — например, когда вы отправляете сообщение с телефона, оно отображается и в веб-версии приложения, и в десктопной. И чаще всего Node.js используется для создания веб-серверов.

Как создать сайт самому?

Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

Использование Node.js в Full-stack разработке (разработке полного цикла) позволяет писать и front-end — пользовательскую часть приложения, и back-end — серверную часть приложения на одном и том же языке программирования JavaScript. Это довольно удобно для связывания частей приложения. Также это позволяет front-end разработчикам достаточно просто освоить и back-end разработку.

Все это делает Node.js популярным. На GitHub у него более 60.000 звезд. Это говорит о высокой популярности проекта.

Преимущества NodeJS

Node.js — это среда выполнения JavaScript на стороне сервера, которая используется для построения быстрых, масштабируемых сетевых приложений.

Основные преимущества использования:

удобство для построения быстрых приложений, поскольку Node способен обрабатывать огромное количество одновременных соединений с высокой пропускной способностью. Это привлекает множество программистов, которые хотят создавать сайты с поддержкой миллионов посетителей;

эффективность. В веб-приложении больше всего времени требуется, чтобы выполнить все ваши запросы к базе данных. С помощью Node.js вы можете выполнить все их сразу, уменьшая время отклика для медленных запросов;

язык разработки JavaScript. Вы можете разделить код между браузером и вашим back-end. JavaScript на пути к тому, чтобы стать действительно универсальным языком;

скорость выполнения. Движок V8 постоянно расширяет границы и является одним из самых быстрых интерпретаторов динамических языков на планете. Кроме того, средства ввода/вывода Node имеют действительно легкий вес, в результате чего вы становитесь настолько близки к полному использованию потенциала вашей системы ввода/вывода, насколько это возможно.

Особенности NodeJS

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

асинхронные скрипты на основе событий. Все API-интерфейсы библиотеки Node.js являются асинхронными, то есть не блокирующими загрузку. По сути, это означает, что сервер на основе Node.js никогда не ожидает возврата данных от API. После вызова он переходит к следующему API, а механизм уведомлений Node.js Events помогает серверу получить ответ от предыдущего вызова;

скорость. Это одна из основных привлекательных особенностей. JavaScript-код, выполняемый в среде Node.js, может быть в два раза быстрее, чем код, написанный на компилируемых языках, вроде C или Java, и на порядок быстрее интерпретируемых языков, наподобие Python или Ruby. Причиной подобного является неблокирующая архитектура платформы, а конкретные результаты зависят от используемых тестов производительности, но, в целом, Node.js — это очень быстрая платформа;

однопоточный, но легко масштабируемый — Node.js использует однопоточную модель с циклом событий. Механизм Event помогает серверу реагировать неблокирующим образом и обеспечивает высокую масштабируемость, в отличие от традиционных серверов, которые создают ограниченные потоки для обработки запросов. Node.js использует однопоточную программу, одна и та же может обслуживать гораздо большее количество запросов, чем традиционные серверы, такие как Apache HTTP Server.

библиотеки. Благодаря простоте и удобству работы с менеджером пакетов для Node.js, который называется npm, экосистема прямо-таки процветает. Сейчас в реестре npm имеется более полумиллиона опенсорсных пакетов, которые может свободно использовать любой Node.js-разработчик;

отсутствие буферизации — приложения не буферизуют данные, а выводят их по частям;

лицензия — Node.js выпущен под лицензией MIT;

простота. Платформа очень легка в освоении и использовании. На самом деле, она прямо-таки очень проста, особенно это заметно в сравнении с некоторыми другими серверными платформами.

Фреймворки

Node.js — это низкоуровневая платформа. Для того чтобы упростить разработку для нее и облегчить жизнь программистам, было создано огромное количество библиотек. Некоторые из них со временем стали весьма популярными.

Как создать сайт самому?

Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

Ниже представлен небольшой список библиотек, которые я считаю отлично сделанными и достойными изучения:

Express. Эта библиотека предоставляет разработчику предельно простой, но мощный инструмент для создания веб-серверов;

Meteor. Это мощный фулстек-фреймворк, реализующий изоморфный подход к разработке приложений на JavaScript, а также к использованию кода и на клиенте, и на сервере. Meteor, помимо создания обычных веб-приложений, можно использовать и в мобильной разработке;

Next.js. Этот фреймворк предназначен для организации серверного рендеринга React-приложений;

Micro. Это весьма компактная библиотека для создания асинхронных HTTP-микросервисов;

Socket.io. Это библиотека для разработки сетевых приложений реального времени.

На самом деле, в экосистеме Node.js можно найти вспомогательную библиотеку для решения практически любой задачи.

Сколько можно зарабатывать

Специалистам со знанием Node.js предлагают самую высокую оплату труда. Такая ситуация вызвана тем, что данная технология позволяет создавать действительно хорошие, быстрые, масштабируемые, надежные веб-приложения. А специалистов, которые разбираются и могут вести разработку на ней, не так много.

Ha сайте hh.ru более 1000 вакансий для разработчиков Node.js. Причем, зарплаты в среднем составляют 100000–150000 руб. Нередко они доходят до 300.000 руб. и выше.

Заключение

Node удобен для построения быстрых приложений, поскольку он способен обрабатывать огромное количество одновременных соединений с высокой пропускной способностью. Это привлекает множество программистов, которые хотят создавать сайты с поддержкой миллионов посетителей.

Множество крупных компаний, таких как Paypal, Yahoo!, eBay, General Electric, GoDaddy, Microsoft, Uber, Wikipins, Shutterstock, используют эту платформу для построения собственных веб-сайтов. Сегодня она по праву считается одной из лидирующих для веб-разработки, и большая часть веб-инструментов, серверных и клиентских, работают именно с ней.

Видео презентация курса «Node.js. Полное руководство»

При написании статьи использовались материалы:

Как создать сайт самому?

Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

NodeJS. Быстрый старт

Создание веб-приложения на JavaScript с NodeJS

Чем хорош Node.js и зачем он нужен

Веб-технологии постоянно развиваются. Так, появление HTML5 перевернуло очень многое буквально с ног на голову. Браузеры с поддержкой HTML5 – очень изменчивы, каждое обновление вносит свои коррективы. И все это требует современных инструментов для разработки интерактивных решений.

Одним наиболее известных «мастхэв»-средств для разработчиков программных решений на JavaScript считается платформа Node.js. Она очень проста и понятна интуитивно даже для начинающих кодеров. При этом Node.js позволяет работать с серверными технологиями, реализовывать интерактивную работу с использованием компьютерных мощностей пользователей. В числе прочего, эта платформа позволяет запускать код из командной строки любой из распространенных ОС.

Сегодня Node по праву считается одной из лидирующих платформ для веб-разработки, и большая часть веб-инструментов, серверных и клиентских, работают с этим инструментом. Но давайте разберемся подробнее. И начнем с истории появления Node.js.

Самый непонятый разработчиками язык

Возможно, вы слышали, что JavaScript был создан в Mozilla в 90-е годы. Но мало кто знает, что планировался он как один из простых скриптовых языков, который будет встраиваться в HTML-код. Изначально JavaScript придумали для того, чтобы «собирать» в единое целое различные части веб-страниц – картинки, Java-апплеты, HTML-разметки и плагины. Этот инструмент предназначался для веб-дизайнеров и верстальщиков. Он просто должен был сделать их работу проще и быстрее.

Но случилось так, что разработчики увидели совсем другие возможности применения JavaScript, и начали применять его для обеспечения интерактивных возможностей. Так, самый неправильно понятый язык программирования стал одним из самых популярных в мире.

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

Для реализации Node.js был использован движок V8, который выполняет трансляцию команд JavaScript в двоичный код. Проще говоря, Node – это приложение C++, предназначенное для выполнения JavaScript-кода и быстрого ввода-вывода, в том числе, на компьютере пользователя. В результате таких доработок JavaScript становится полноценным и практически универсальным ЯП. Т.е. с с помощью этого решения на JavaScript можно писать, в том числе, различные приложения для компьютера.

Основные преимущества Node.js

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

Такое решение упрощает программирование интерактивных приложений, т.е. основанных на работе с использованием ввода-вывода. Это могут быть онлайн-чаты или игровые приложения, красочные интерактивные веб-сервисы или всевозможные калькуляторы, рейтинги, голосования и т.д.

Кроме того, к преимуществам платформы относят:

  1. Простой и широко известный JavaScript. Конечно, платформа предполагает собственные инструменты и особенности, например, здесь нет браузерных API, coockie или DOM, зато присутствуют собственные библиотеки и другие интересные решения. Но в основном используются возможности и синтаксис всем привычного JavaScript.
  2. Богатая стандартная библиотека. Платформа изначально обладала широким набором возможностей, а в новых версиях библиотека пополняется и улучшается.
  3. Огромное внешних библиотек и готовых модулей. Использование пакетного менеджера NPM позволяет постоянно развивать экосистему Node. Сегодня число опенсорсных пакетов в нем перевалило за цифру 500 тысяч и постоянно растет.
  4. Движок V8. JavaScript создавался как интерпретируемый скриптовый язык. Но процесс его интерпретации не столь быстрый и простой, как хотелось бы. При этом язык развивается, он давно стал полноценным, на JavaScript можно писать большие программы. А потому наличие компилятора стало не просто плюсом, но – необходимостью.

Над постоянным улучшением платформы работают тысячи заинтересованных программистов из разных стран. Проект распространяется с открытым кодом, а потому развивается огромными темпами. Координирует работу фонд Node.js.

Для чего применяют Node.js

Чтобы понять, где и каким образом применяется Node.js, важно понимать: в отличие от обычного браузерного JavaScript, с применением Node приложение может обращаться к широкому перечню глобальных объектов, в том числе document или window. В результате программа может обращаться к винчестеру и файловой системе пользователя, а также к библиотекам и программным решениям, находящимся на компьютере, что заметно расширяет возможности взаимодействия.

Чаще всего эту платформу используют для создания веб-сервисов, требующих интенсивного обмена информацией с пользователями, в том числе, для реализации чатов, систем совместной работы, социальных сетей и т.д. Многие программы, созданные на Node.js, состоят из серверной и клиентской частей.

Для понимания причин такого использования стоит чуть подробнее остановиться на асинхронности и возможностях событийно-ориентированной парадигмы. Суть программирования при этом сводится к тому, что вы указываете программе, какие действия она должна выполнить, а также какую функцию она должна вызвать после выполнения этих действий. Но пока Node.js ждет выполнения кода и вызова функции, он вполне может заняться какими-то другими задачами. При этом поток в ожидании запроса блокироваться не будет.

Таким образом, приложение может обратиться с запросом к базе данных сервера, а пока ожидается ответ, обработать какие-то другие запросы. В результате одновременно обрабатываются тысячи соединений, каждое из которых тратит совсем немного времени и ресурсов. Это заметно ускоряет обмен информацией с сервером и, как итог, работу браузерного приложения.

Установка, фреймворки, другие инструменты

Чтобы установить платформу, достаточно зайти на официальный сайт, выбрать и скачать установочные файлы для нужной ОС. Также разработчику может понадобиться менеджер пакетов для выбранной операционной системы и пакетный менеджер nvm.

Описание процесса установки есть как на официальном сайте, так и во множестве руководств по Note. В принципе, в нем нет ничего сложного. И сразу после завершения установки появляется возможность работать с кодом из командной строки при помощи использования команды node отдельно (для получения помощи) или вместе с кодом JavaScript.

Для расширения возможностей разработчика применяется огромное количество библиотек. Ниже мы приводим несколько самых популярных:

  • Meteor – мощный фреймворк для работы с кодом одновременно и на сервере, и на клиенте.
  • Next.js – библиотека для серверного рендеринга кода на React.
  • Express – один из самых мощных универсальных фреймворков для серверов.
  • Micro – легковесная и компактная, но при этом обладающая широким набором функций, библиотека для HTTP-микросерверов.
  • Koa – доработанный вариант библиотеки Express. Фреймворк получился таким же мощным, но при этом более компактным.
  • Socket.io – одна из самых популярных библиотек для приложений, которые взаимодействуют с клиентами в режиме реального времени.

О расширениях для Note и библиотеках можно говорить очень долго. Количество готовых модулей и всевозможных решений растет с каждым днем. Сегодня сложно найти интерактивный веб-проект, который не использует Note. А потому, если вы хотите заниматься веб-разработкой, обязательно обратите внимание на этой инструмент.

Хочешь стать веб-разработчиком? Учи Node.js, а не PHP

Один из самых частых вопросов, которые я слышу от своих учеников, звучит так: «Почему вы преподаете нам Node.js, а не PHP?» Ответ «Поверьте, я знаю, потому что работаю в этой индустрии» почему-то оказывается недостаточно убедительным. Потому я решил изложить здесь причины того, почему я преподаю именно Node.js и почему вы должны забыть о PHP, если хотите стать востребованным веб-разработчиком в будущем. Эти два языка я использую в качестве примера. В самой же статье я покажу вам способ выбрать наиболее перспективные языки программирования, фреймворки и библиотеки.

Учитывая ограниченность времени и ресурсов, вам, как разработчикам, придется принимать решения о том, во что инвестировать свое время, чтобы получить максимальную отдачу в будущем.

Теперь предлагаю вам задать себе такой вопрос: инвестиции в какие из технологий имеют наибольшую ценность для моей будущей карьеры разработчика с точки зрения знаний, зарплаты и удовлетворенности в целом?

Причем я не предлагаю выбирать самый легкий путь. Речь идет о том, как выбрать инструменты, которые будут актуальны в течение долгих лет и позволят мне сохранять свою конкурентноспособность на рынке и в дальнейшем позволят развить навыки до уровня руководителя — senior developer.

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

В этой статье нам предстоит познакомиться с двумя типами исследований: анализ рынка труда и анализ технологий. Итак, поехали!

Node.js vs PHP — анализ рынка труда

Материалами исследования послужили статистика LinkedIn и данные масштабного опроса разработчиков, которые провел сайт Stackoverflow в 2020 году. Также следует отметить, что мы фокусировались только на технологиях, имеющих непосредственное отношение к веб-разработке.

Уже пятый год подряд JavaScript становится самым часто используемым языком программирования. А Python впервые за пять лет обогнал PHP по популярности. А какое же место отведено Node.js, спросите вы? Node.js — это среда выполнения javascript. Проще говоря, Node.js — это серверный Javascript. Так что будем считать, что говоря «Node.js» подразумеваем «Javascript».

Топ самых используемых языков программирования Топ самых используемых фреймворков, библиотек и других технологий

Как видим на графиках, Javascript и Node.js лидируют в рейтинге наиболее часто используемых языков программирования и технологий, а PHP им существенно проигрывает.

В течение 5 лет сайт Stackoverflow собирал данные для опроса разработчиков, из которого следует, что такие языки, как Javascript и Node.js становятся все более популярными, а использование таких языков, как PHP, сокращается:

График изменения популярности технологий с 2013 по 2020

React был назван самым любимым языком разработчиков, однако сразу за ним на втором месте — Node.js, который, помимо этого, стал и той технологией, которую захотело освоить большинство разработчиков (категория wanted).

Топ фреймворков, библиотек и технологий, которые разработчики любят (Loved) / боятся (Dreaded) / хотят изучить (Wanted). Вкладка «Любимые» (Loved) Топ фреймворков, библиотек и технологий, которые разработчики любят (Loved) / боятся (Dreaded) / хотят изучить (Wanted). Вкладка «Хотят изучить» (Wanted)

Мастер Йода рекомендует:  Куда пропали ошибки из Search Console

Зарплаты и возможности

На приведенном ниже графике отображается связь оплаты труда и опыта работы. Над синей линии этого графика указаны языки программирования, заработная плата разработки на которых напрямую зависит от опыта разработчика — это Go, Rust и Clojure. Однако разработчикам, использующим языки под синей линией, например PHP, платят меньше, даже учитывая многолетний опыт их работы. Размер кругов на этой диаграмме показывает, сколько разработчиков использует этот язык по сравнению с другими. При этом график показывает печальную тенденцию — число лет в профессии практически не влияет на уровень зарплаты PHP-разработчиков.

Связь оплаты труда и опыта разработки

На сайте LinkedIn в разделе Jobs вы можете увидеть, что во всем мире вакансий для разработчиков Node.js больше, чем вакансий для PHP-разработчиков, причем существенно — разница достигает 10 000 позиций. Это несмотря на то, что Node.js является гораздо более молодой технологией по сравнению с PHP и тем фактом, что именно на PHP написана CMS (система управления контентом) WordPress, на которой работает 30% всех веб-сайтов в Интернете.

Ну и наконец средняя оплата труда по разным регионам, в данном случае данные приводятся для Америки, потому что в статистику по миру PHP попасть не удалось:

Топ самых высокооплачиваемых технологий в Америке Топ самых высокооплачиваемых технологий в Великобритании Топ самых высокооплачиваемых технологий в Германии Топ самых высокооплачиваемых технологий во Франции

Опять же, у нас нет цели мы здесь не избиваем PHP. Мы просто смотрим на цифры, чтобы выбрать язык для изучения. PHP явно котируется на рынке труда значительно хуже других технологий, таких как Javascript и Node.js.

ОБНОВЛЕНИЕ: с момента выхода публикации stackoverflow разместил данные опроса за опроса разработчиков за 2020 год. PHP продолжает терять свои позиции.

Вердикт


Популярность PHP падает, в то время как рынке растет спрос на Node.js и интерес к нему у разработчиков. В общем и целом, зарплаты PHP-разработчиков существенно ниже чем у других программистов, и эта тенденция только усиливается.

Node.js vs PHP — анализ технологий

Теперь давайте обсудим преимущества и недостатки каждой из технологий по отдельности.

Преимущества Node.js

  • Идеально подходит для приложений, работа которых строится на непрерывном взаимодействии клиента и сервера — к примеру, чаты, которые очень просто делать на socket.io. Благодаря этой же особенности Node.js его удобно использовать для обработки данных, получаемых от устройств IoT (Internet of Things) и одностраничных сайтов Single Page Applications (SPAs) -обе эти области довольно активно развиваются.
  • Встроенная возможность сериализации и десериализации JSON, а значит, легкая и простая работа с AJAX.
  • Отлично подходит для приложений, управляемых событиями, которые не имеют блокировки ввода / вывода (ввод-вывод — это связь между системой обработки информации — компьютером, и внешним мир, представленным человеком или другими системами обработки информации, такими как базы данных.
  • Учишь Javascript — значит учишь и Node.js. И не нужно тратить силы на изучение другого серверного языка типа PHP. Это значит, что можно направить все силы на доскональное изучение и совершенствование одного единственного языка — Javascript — и овладеть им в совершенстве. Таким образом, получаем два в одном — на одном языке можно будет писать и бэкенд, и фронтенд части приложений — то есть по сути, реализовать все приложение целиком.
  • Многие известные фреймворки для создания клиентской части веб-приложений, такие как React, Vue и Angular написаны на JavaScript, который также является главным языком современных браузеров. Использование Node.js на стороне сервера позволяет ощутить все преимущества единого языка программирования для всего стека технологий приложения. Такие приложения легче поддерживать, потому что все разработчики в такой команде работают с одними и теми же структурами данных, функциями и стандартами одного языка — JavaScript.
  • Однопотоковая система событий легко справляется с высокими нагрузками, такими как большое количество запросов от браузеров.
  • На NPM существует огромное число сторонних библиотек и модулей как для клиентской, так и для серверной разработки, а также средств для работы с командной строкой. И их число постоянно растет. Кроме того, большинство из них размещены в GitHub, где есть возможность оперативно сообщить о проблеме или самостоятельно форкнуть код для его настройки под свой проект.
  • Он стал стандартной средой, в которой можно запускать инструменты, связанные как непосредственно с Javascript, так и с веб-разработкой в целом, включая планировщики задач, инструменты сжатия, форматирования кода и аналитики, линтеры, препроцессоры и системы сборки.
  • По умолчанию поддерживается множество новых API и служб, таких как AWS Lambda.
  • Можно пользоваться всей мощью движка V8, который является JavaScript-интерпретатором браузера Google, и самого Node.js. Поскольку инженеры Google постоянно улучшают производительность V8, значит они тем самым способствуют и развитию Node.js.

Недостатки Node.js:

  • Пакеты NPM, упомянутые выше, могут раздувать код, быть небезопасными, а также трудно выбрать лучший модуль в виду их разнообразия (просмотр числа загрузок и статистики GitHub — один из способов решить эту задачу);
  • Многообразие вариантов сборки сервера на Node.js и огромное число npm-модулей ставит перед новичками проблему выбора лучших модулей и пакетов.
  • Не подходит для серверов, которые требуют высокой производительности процессора, например, для выполнения таких сложных алгоритмов как обработка изображений или сортировка. Как правило, всё, что не является вводом-выводом данных, нагружает процессор. В этом случае многопоточная серверная среда станет лучшим вариантом, чем Node.js (решение: если необходимо, вы можете передать части кода, потребляющие мощности CPU, в программу, написанную на языке C).
  • Node не использует все ядра базовой системы или машины. Вы должны сами писать логику для использования многоядерных процессоров. Это может быть достигнуто многими способами, но для этого потребуется дополнительная работы (настоящие профессионалы могут самостоятельно максимизировать использование ЦП в системе).

Вердикт для Node.js

Node.js отлично подходит приложениям, одновременно работающим с большим количеством параллельных подключений, каждый из которых нагружает процессор лишь незначительно. Таким образом, это идеальный вариант для многих современных сайтов, таких как лендинги и приложения, работающие в режиме реального времени.

Используя асинхронный характер обработки данных в JavaScript, можно создать высокомасштабируемый серверный код, который позволит по максимуму использовать мощность одного процессора и память, и в итоге получить возможность обрабатывать больше параллельных запросов, чем на обычном многопоточном сервере.

Node.js поставляется с очень небольшим количеством зависимостей, правил и рекомендаций, которые дают разработчику свободу и простор для творчества. Разработчики для своего проекта вольны сами выбрать лучшую архитектуру, шаблоны проектирования, модули и функции, при этом пользуясь всеми благами NPM.

Преимущества PHP:

  • Мощное сообщество, сформированное за долгие за годы существования языка.
  • На PHP написано немало известных платформ для создания сайтов (i.e. WordPress, Joomla, Drupal), а также систем управления контентом — CMS (Content Management Systems), самой популярной из которых является WordPress. Они позволяют за считанные минуты создать сайт или интернет-магазин, оформить и настроить которые сможет даже непрофессионал.
  • Легко настроить и поднять сервер, сделать это могут даже непрофессионалы, не знакомые с SSH и администрированием Linux, чем и объясняется повышенный спрос у частных лиц и небольших компаний. Многие PHP-приложения (например, cPanel) предлагаются по умолчанию простейшими платформами хостинга, и установить их можно установить одним щелчком мыши.
  • В отличие от других языков программирования общего назначения, PHP был разработан специально для интернета. PHP предлагает отличное решение на стороне сервера, где нет необходимости связываться с JavaScript в браузере, поскольку все страницы могут быть легко сгенерированы и отображены на сервере. Это полезно, если вы хотите избежать слишком большого количества кода на стороне клиента. Node.js так тоже умеет, но сделать это далеко не так просто.
  • Новая версия PHP — PHP7 и HHVM (виртуальная машина от Facebook) улучшили производительность PHP.

Недостатки PHP:

  • PHP используется только для разработки серверной части приложений. Это означает, что вам все равно нужно изучить Javascript, если вы хотите работать на стороне клиента или стать fullstack-разработчиком.
  • Использование PHP с его тяжелым серверным рендерингом и многочисленными запросами к серверу для создания и отрисовки страниц — это далеко не самое лучшее решение для лендингов.
  • Каждый активный клиент (браузер) использует один серверный процесс, что не подходит для приложений с большим числом подключений.
  • Встроенная поддержка PHP для новых API и сервисов, таких как AWS Lambda, ограничена по сравнению с Node.js.
  • Приложения на PHP строятся по классической модели клиент-сервер, где каждый запрос страницы инициирует запуск приложение, соединение с базой данных и рендеринг HTML. Это делает PHP медленнее, когда вы перемещаетесь по веб-сайту по сравнению с приложением на Node.js, которое работает постоянно и запускает только один раз в самом начале. Благодаря этому Node.js больше подходит для нового направления, в которым развивается интернет — HTML5, AJAX и WebSockets.

Вердикт языку PHP:

PHP проще выучить в связи с обширностью сформировавшегся вокруг него сообщества. Это хороший выбор для стандартизованного решения, такого как блог или новостной сайт. Он обладает мощью WordPress, который является самой популярной CMS (Content Management System), и которая позволяет вам создавать настраиваемые блоги, используя минимальное число кода. Однако простота в этом случае достигается в ущерб качеству. Чем проще научиться технологии, тем легче для кого-то войти в отрасль и тем выше конкуренция, а значит, тем меньшую придется брать плату за свои услуги.

Заключение

PHP был одним из лучших языков в эпоху Web 1.0, когда был популярен WordPress. Node.js был запущен в 2009 году и технически является не языком, а средой выполнения для Javascript. Он является фаворитом более молодого поколения веб-разработчиков и лучше подходит для создания сложных I/O — приложений, основанных на событиях, оперирующих большими объемами данных, — то есть именно тех приложений, с которыми вы сталкиваетесь в век Web 2.0.

В частности, асинхронная и основанная на событиях архитектура Node.js отлично подходит для приложений, работающих в режиме реального времени, таких как мессенджеры и чаты, а также для приложений совместного использования, в которых одновременно выполняется много запросов и идет постоянный обмен данными между клиентом и сервером. Не может жить без WordPress? Ну, у Node.js есть своя собственная прекрасную CMS, которая называется Keystone.js.

Во всем надо приходить к компромиссу. Никогда не будет одной технологии, которая решит все проблемы и сделает вас неуязвимыми к устареванию знаний. Лучшее, что мы можем сделать, это проанализировать все имеющиеся варианты и выбрать тот, отдача от которого будет больше. По результатам анализа рынка труда и сравнения технологий мы можем назвать явного победителя.

Я выбираю Node.js.

Хотя все технологии великолепны, каждая в решении своей конкретной задачи, мы живем в мире, где информации настолько много, что мы должны ограничить количество тем для рассмотрения и глубоко погрузиться лишь в самые важные.

В своем курсе я преподаю материал, который актуален сегодня для профессиональной карьеры в этой области, а также инструменты, используемые некоторыми крупнейшими компаниями, такими как Facebook, Netflix, Google и Amazon. Если вы хотите стать fullstack-разработчиком в 2020 году, я рекомендую вам изучить:

Создаем простое веб приложение при помощи Node.js

Вам нужно создать простое веб приложение? Не знаете, что выбрать из многообразия предлагаемых сегодня инструментов и технологий?

Мы объясним, расскажем и покажем на примере, как это сделали бы мы.

Начнем с самого начала:

ЧТО ТАКОЕ ПРОСТОЕ ПРИЛОЖЕНИЕ?

Простое приложение предполагает, что:

  • могут использоваться операции CRUD (создать, прочесть, обновить, удалить) без сложной логики endpoint (конечных точек);

Конечная точка (англ. endpoint) — это URL (единый указатель ресурса), а проще говоря, адрес местонахождения ресурса в сети Интернет. Этот адрес использует клиент, чтобы получить доступ к ресурсу.

  • отсутствует разделение на роли;
  • отсутствует система аутентификации;
  • не используется библиотеки, расширяющие язык (babel, typescript).

ВЫ ХОТИТЕ СОЗДАТЬ ИМЕННО ТАКОЕ ВЕБ-ПРИЛОЖЕНИЕ?

Тогда наш совет — используйте JavaScript. Node.js. Express.

ПОЧЕМУ JAVASCRIPT?

  • JavaScript изначально задумывался как простой язык , который могли бы использовать не только программисты. Задумка удалась: на данный момент у нас есть несложный язык для реализации как простых , так и сложных продуктов.
  • JavaScript обеспечивает динамичность страницы . Анимация, интерактивные кнопки и графические элементы: мы уже с трудом представляем себе приложения без всего этого.
  • с одной стороны, JavaScript — это клиентский язык . Клиентом в этом случае является браузер, которые интерпретирует код приложения и исполняет его. Интерпретатор кода встроен во все популярные браузеры, то есть в плане поддержки никаких ограничений не существует.
  • с другой стороны, JavaScript можно использовать и на стороне сервера благодаря платформе Node.js, о которой мы поговорим позже.

Исходя из всего этого, неудивительно, что JavaScript стабильно занимает позицию самого используемого языка программирования

Согласно результатам опроса Stackoverflow , в котором в 2020г. участвовали более 64 000 разработчиков, JavaScript уверенно лидирует среди наиболее часто используемых языков программирования (61,9%).

JavaScript сохраняет за собой первое место в течение пяти лет подряд. А это уже о чем-то говорит.

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

Angular, React, jQuery, Vue, Lodash — о них много говорят и спорят, но, главное, их успешно используют, и они выполняют свое предназначение.

ЧТО ТАКОЕ NODE.JS?

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

Каждый программист ответит по-своему на вопрос о том, какой язык лучше использовать для серверной части. В каждом случае сыграют роль накопленный опыт работы, привычка, особенности разрабатываемого продукта.

  • Согласно статистике использования Node.js для веб-сайтов, доля применения платформы стабильно увеличивается :
  • При помощи Node.js, можно создавать практически любые веб-приложения , кроме, разве, сложных вычислений. Хотя сложные вычисления всегда можно сделать на другом языке, а потом предоставить эти данные для использования и манипулирования ими уже на JavaScript. Но мы сейчас говорим о простом приложении.
  • Специфической областью применения платформы Node.js является микросервисная архитектура. То есть Node.js оптимально использовать для приложений, которые разбиты на небольшие модули (лента новостей, чат, магазин и т.д.). При этом каждый модуль не зависит друг от друга, но все вместе они составляют единую структуру.
  • Дополнительное преимущество заключается в том, что вокруг Node.js образовалось развитое сообщество . Благодаря этому доступна хорошая документация, а также существует большое количество готовых примеров для использования, фреймворков и библиотек, которые позволяют облегчить и ускорить разработку.

Согласитесь, неразумно отказываться от предлагаемых возможностей в виде готовых решений и писать код полностью вручную. Это сложно, долго, нерационально. Тем более, что мы говорим о простом приложении, а не о чем-то сложном и уникальном.

В сети предлагается множество пошаговых инструкций, которые подробно описывают создание веб-приложения при помощи Node.js. Какие-то из них рассчитаны на подготовленных разработчиков, мы же предлагаем рассмотреть простой пример разработки на Node.js для начинающих программистов и для тех, кто не силен в программировании, но кому интересна логика процесса.

ПОДГОТОВКА

Чтобы начать работу с Node.js, нужно, как минимум, установить Node.js.

Процедура несложная и не отнимет много времени. Используйте один из вариантов установки, предлагаемых на официальном сайте Node.js.

Вместе с Node.js автоматически устанавливается менеджер пакетов npm.

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

В нашем примере мы будем использовать систему управления базами данных (СУБД) MongoDB. Так же как и в случае с Node.js, на официальном сайте продукта есть подробная документация и инструкция по установке.

Для создания простого приложения нам понадобятся :

  • фреймворк для создания каркаса приложения (Express);
  • драйвер для системы управления базами данных MongoDB;
  • инструмент (пере-) запуска веб-сервера (nodemon).

Благодаря сервисной программе nodemon, сервер будет автоматически перезапускаться при каждом изменении кода.

EXPRESS

Почему именно этот фреймворк?

При своей минималистичности и легкости он предлагает весь необходимый набор функций для веб-приложения.

Чтобы создать каркас приложения при помощи этого фреймворка, можно использовать генератор приложений Express.

Перейдите по ссылке и вы увидите, насколько все просто.

В документации описана последовательность действий и команд и показаны результаты их выполнения.

Генератор Express — это одна из возможностей создания приложения с использованием Express.

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


Никто не даст вам конкретных указаний о том, что и как именно нужно сделать. Структура директории, количество файлов, подключаемые внешние модули: выбор остается за вами.

Теперь посмотрим, как все описанное выше реализуется на примере.

ПРИМЕР

  • Создаем папку с будущим проектом , переходим в нее и выполняем инициализацию проекта, отвечая на вопросы установщика.

Для этого используем следующие команды:

mkdir simple-api && cd simple-api && npm init

  • Потом устанавливаем необходимые модули :

npm i express mongodb body-parser

  • Устанавливаем инструмент для автоматического перезапуска сервера , который существенно облегчит процесс разработки:

npm i nodemon —save-dev

  • Когда все нужные нам модули установлены, создаем файлindex.js.

Здесь мы подключаем необходимые зависимости (сторонние коды, которые будет использовать наше приложение).

  • Теперь указываем порт прослушивания (цифровое обозначение процесса получателя запроса), чтобы сервер начал слушать HTTP-запросы (запросы к серверу на какое-либо действие, которые поступают от клиента (браузера) по протоколу HTTP.

// index.js
const express = require(‘express’);
const app = express();
app.listen(3333, () => <
console.log(‘server started!’);
>);

  • Запускаем сервер при помощи следующей команды:
  • Наш сервер запущен. Проверяем его работу и для этого обращаемся к нему с запросом из любого браузера.

Вторая возможность проверить работу сервера: использование программы Postman .

Postman — это специальная программа, которая облегчает разработчикам создание, тестирование и мониторинг API. С ее помощью можно направлять на сервер запросы, а также настраивать параметры запросов и тестировать работу приложения.

В нашем случае нет зарегистрированных endpoints, поэтому сервер пока возвращает статус 404 и HTML страницу с ошибкой. Но, главное, что мы выяснили — сервер запущен.

Мастер Йода рекомендует:  10 современных веб-технологий, о которых вы должны знать

Сейчас настал момент вернуться к типам HTTP-запросов: изначально (когда протокол HTTP только появился) в отношениях между клиентом и сервером подразумевалось только то, что клиент хочет получить ресурс (GET).

По мере того, как система отношений клиент-сервис усложнялась, появился подход REST (REpresentational State Transfer). Он предусматривает использование разных HTTP-методов для разных действий: POST, GET, PUT, PATCH, DELETE.

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

  • Cоздадим первую endpoint в папке app/. Логика в данном случае простая: мы хотим обратиться к серверу по адресу /books и получить от него определенный ответ:

// api/books.js
module.exports = function(app) <
app.get(‘/books’, (req, res) => <
res.send(‘Response’)
>);
>;

  • Допустим, мы не хотим в нашем приложении ограничиваться одной endpoint, а хотим использовать несколько (хотим создавать, читать, обновлять и удалять данные), тогда подключаем все обработчики , которые помогут реализовать эти действия, в одном файле api/index.js:

// api/index.js
const apiBooks = require(‘./books’);
module.exports = function(app) <
apiBooks(app);
// other routes
>;

  • Когда первая endpoint написана, мы ее регистрируем и проверяем :

// index.js
const express = require(‘express’);
const app = express();
// register endpoint
require(‘./api/index’)(app);
app.listen(3333, () => <
console.log(‘server started!’);
>);

  • Перед тем как перейти к другим endpoints, подключаем модуль body-parser (который будет отвечать за обработку запросов) и указываем формат входных и выходных данных endpoints — JSON:

// index.js
const express = require(‘express’);
const app = express();
// parse application/json
app.use(require(‘body-parser’).json());
// register endpoints
require(‘./api/index’)(app);
app.listen(3333, () => <
console.log(‘server started!’);
>);

  • Теперь устанавливаем соединение с базой данных “test” , используя заранее установленный драйвер mongodb. После того как соединение с БД установлено — передадим объект database вторым параметром в регистрируемые роуты:

// index.js
const express = require(‘express’);
const MongoClient = require(‘mongodb’).MongoClient;
const app = express();
// parse application/json
app.use(require(‘body-parser’).json());
// register endpoints
require(‘./api/index’)(app, database);
MongoClient.connect(‘mongodb://localhost:27017/test’, (err, database) => <
if (err) return console.log(err)
app.listen(3333, () => <
console.log(‘server started!’);
>);
>)

  • Дальше мы можем писать endpoint для создания (CREATE) новой записи в БД. Запись имеет поля author, title, text.

Логика создания такой endpoint тоже очень простая:

  • получаем данные в формате JSON и формируем объект book;
  • вставляем объект в коллекцию books;
  • получаем результат: либо произошла ошибка, либо создан документ;
  • отправляем результат пользователю.

// api/books.js
module.exports = function(app, database) <

app.post(‘/books’, (req, res) => <
const book = <
author: req.body.author,
title: req.body.title,
text: req.body.text
>;
database.collection(‘books’).insert(book, (err, result) => <
if (err) <
res.send(err);
> else <
res.send(result.ops[0]);
>
>);
>)
>;

  • Создаем endpoint для получения (READ) записи из БД.

Логику вы уже можете предположить самостоятельно:

  • используем id из параметров запроса и формируем запрос;
  • отправляем запрос в БД;
  • обрабатываем результат: либо произошла ошибка, либо получаем документ с данными;
  • отправляем результат пользователю.
  • Аналогичным путем создаем endpoint для обновления (UPDATE) записи в БД:
  • используем id из параметров запроса и формируем запрос;
  • получаем данные в формате JSON и формируем
    объект book;
  • обновляем документ в БД;
  • обрабатываем результат: либо произошла ошибка, либо получаем статус операции;
  • отправляем результат пользователю.

// api/books.js
module.exports = function(app, database) <

app.put(‘/books/:id’, (req, res) => <
const Object > const > const query = < ‘_id’: new ObjectID(id) >;
const body = <
author: req.body.author,
title: req.body.title,
text: req.body.text
>;
database.collection(‘books’).update(query, body, (err, result) => <
if (err) <
res.send(err);
> else <
res.send(result);
>
>);
>);
>;

А также создаем endpoint для удаления (DELETE) записи:

  • используем id из параметров запроса и формируем запрос;
  • удаляем документ из БД;
  • обрабатываем результат: либо произошла ошибка, либо получаем статус операции;
  • отправляем результат пользователю.

Мы рассказали о том, как создать простое приложение с использованием Node.js. Используя это приложение, как основу, можно расширять его функционал за счет дополнительных модулей. Но это уже зависит от того, для чего вы планируете использовать будущий проект.

Остались вопросы? Нужна помощь в разработке? Чем быстрее вы свяжитесь c Umbrella , тем быстрее ваши идеи будут воплощены в реальность.

Введение в JavaScript

Этот пост посвящён главному языку будущего — JavaScript. Благодаря своей гибкости используется в браузере, на серверах, в мобильных приложениях, на десктопе и практически во всех видах программирования. Удобный синтаксис позволяет легко писать на нём, а высокая производительность делает его отличным выбором для решения любых задач — от небольших магазинов до огромных highload проектов. JavaScript по праву является самым популярным в мире языком. На каждом сайте есть браузерный JavaScript, а JavaScript на сервере используется такими крупными корпорациями, как Amazon, Yahoo, HP, NASA, Walmart и многие другие.

Часто задаваемые вопросы

В: Что это за язык такой?

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

В: Какие возможные направления для разработки существуют?

О: Практически все! Можно писать Front-end, Back-end, GameDev, 2D/3D графику, разрабатывать мобильные и десктопные приложения. Список инструментов для различных целей

В: Можно выучить только один фреймворк/библиотеку и всё писать на нём?

О: Не стоит начинать учить отдельный фреймворк или библиотеку, пока отсутствуют базовые знания самого языка. Во-первых, из-за отсутствия знаний самого языка возникнет масса проблем с пониманием принципа работы фреймворка/библиотеки, во-вторых, этим можно сильно испортить себе восприятие языка и после этого будет гораздо сложнее изучать чистый JS и другие фреймворки.

В: Существуют ли стайл-гайды для JavaScript?

В: Какие новые возможности добавил ES6?

О: Вот здесь можно почитать на русском

В: Я хочу писать на ES6, но многие браузеры не поддерживают новые возможности. И вообще, надоел геморрой с браузерным зоопарком. Неужели нет способа обойти это?

О: Конечно есть! Чтобы код одинаково хорошо работал во всех браузерах и все возможности ES6 и будущих стандартов нормально работали необходимо собрать код с помощью сборщика. Сборщик компилирует весь код в один файл и делает его полностью кроссбраузерным. Наиболее удобен в использовании Webpack, хотя существуют и аналоги. Потребуется некоторое время на изучение, но результат себя окупит. Сборщики нужны только во Front-end, Node.js и так поддерживает все новые возможности.

В: Зачем нужны CoffeeScript и TypeScript?

О: Это особые варанты JS для любителей других языков. CoffeeScript подходит для любителей Ruby и Python, TypeScript — для сторонников строготипизированных языков вроде C# или Java. Если ты новичок в программировании, то учи оригинал, а диалекты попробуешь, когда уже будет опыт.

В: Зачем нужны таск-раннеры, такие как Gulp или Grunt?

О: Они позволяют одной консольной командой запустить выполнение заранее прописанного процесса, который может содержать множество команд и который неудобно каждый раз выполнять вручную. Пример — компиляция JS с помощью Webpack, сборка LESS стилей в CSS и многое другое. Ещё раз — таск-раннер не замена сборщику, Gulp — не конкурент Webpack, они выполняют совершенно разные задачи и зачастую используются вместе.

В: Можно ли писать фронт на других языках?

О: Да, существуют компиляторы различных языков в JS, такие как ScalaJS, PyJS и другие. Но стоит помнить, что у них есть масса недостатков и использовать их стоит только если на чистом JS (также CS и TS) не получается писать совершенно. Они предназначены прежде всего для тяжёлых приложений вроде браузерных 3D игр в классических Front-end целях не очень удобны.

В: Я слышал про какой то WebAssembly, который заменит JS. Это правда? Что это такое?

О: Нет, неправда. WebAssembly (WASM) практически не имеет отношения к классическому Front-end. Это особая технология, позволяющая выполнять в браузере бинарный код, компилируемый из различных языков. Он предназаначен для выполнения в браузере тяжёлых приложений вроде трёхмерных онлайн-игр и никак не связан с привычными задачами JS. Более того, учитывая развитую инфраструктуру JS, множество фреймворков и библиотек на все случаи жизни, большое количество профессиональных разработчиков, огромное количество легаси-кода, выполнение WASM иных задач, не связанных с различными высокопроизводительными трёхмерными приложениям, видится невозможным. Кроме того, WASM не затрагивает серверную и мобильно-десктопную часть JavaScript, которые уже успели стать довольно популярными.

В: С чего начать изучение?

Материалы для изучения

Книги про JavaScript

Марейн Хавербек — «Выразительный JavaScript» — Вводная книга по JavaScript и программирование в целом.

Дэвид Фленеган — «JavaScript: Подробное руководство«

Дуглас Крокфорд «JavaScript: сильные стороны«

Стефанов С. — «JavaScript. Шаблоны«

Джон Резиг — «Секреты JavaScript ниндзя«

Николас Закас — «JavaScript. Оптимизация производительности«

Джон Резиг, Расс Фергюсон — «JavaScript для профессионалов«

Dr. Axel Rauschmayer — «Speaking JavaScript: An In-Depth Guide for Programmers«

Discover Meteor — Книга по Meteor.js — одному из самых лёгких и функциональных фреймворков.

М. Кантелон , М. Хартер — «Node.js в действии«

Кирилл Сухов — «Node.js. Путеводитель по технологии«

Дэвид Хэррон — «Node.js. Разработка серверных веб-приложений»

Тодд Мотто — «Учебник AngularJS«


Max P — «Курс по React.js для начинающих«

Эдди Османи — «Разработка Backbone.js приложений«

Эрл Каслдайн, Крэйг Шарки — «Изучаем JQuery«

Адам Фримен — «jQuery для профессионалов«

И не забываем читать официальную документацию для каждого фреймворка.

learn.javascript.ru — Самый главный русскоязычный сайт по JavaScript. Других таких подробных уроков не найти. Начинать строго с него.

node-center.ru — Второй по важности сайт. Ориентирован на Node.js, но мелькает материал и по Front-end. Сборник всей нужной информации, перевод официальной документации, список книг и ссылок.

jstherightway.org — Огромный англоязычный гайд. Есть книги, статьи, список фреймворков и многое другое. По сути, этот текст — краткий аналог этого гайда.

nodeguide.ru — Большое количество переведённых статей по Node.js

Блоги и новостные ленты

weblog.bocoup.com — Bocoup Weblog

perfectionkills.com — Perfection Kills

reddit.com/r/javascript — subreddit на reddit.com

toddmotto.com — Todd Motto, Lead front-end @appsbroker . Developer Expert @google .

Изучая только теорию язык усваивается плохо. Наиболее важна практика, которую можно получить на онлайн-курсах.

Отличный ресурс для изучения языка, очень много курсов по всем передовым технологиям.

Уже не такой сильный, но все еще интересный проект, также обязателен для улучшения навыка.

Дает хорошее представление о замыканиях.

Прошёл курсы, прочитал книги и думаешь, что знаешь JS? Теперь изучи тонкости и особенности языка. Сделать это можно здесь — https://shamansir.github.io/JavaScript-Garden/

Список инструментов для различных целей

Серверный JavaSсriрt: знакомимся с Node.JS

Содержание статьи

Посторонись, пресловутый PHP! Долой Java! Старичок Perl, тебе так вообще давно пора на пенсию. И как же вы уже достали, попсовые Ruby и Python! Все эти давно знакомые технологии уже не торкают. Зато сегодня мы посмотрим на чрезвычайно прогрессивный подход, когда для написания серверного кода используется… JavaScript.

Есть идея для стартапа. Теперь вопрос: на чем его писать? Конечно, есть всеми любимый РНР — что может быть легче для веб-сайта! Но скажи честно, как-то не тянет, правда? Ведь чтобы сделать что-то стоящее, голого РНР не хватит. Сразу придется прикручивать еще и AJAX, чтобы данные незаметно подгружались без обновления всей страницы целиком, да и это не решит всех проблем. О том, что PHP не так хорош, ты задумаешься в тот самый момент, когда к тебе разом ломанется много народа. А все потому что РНР (как и подавляющее большинство других языков, на которых строят сайты) даже в нашем, черт подери, двадцать первом веке, работают по классической схеме «запрос-ответ». Запрос страницы заставляет веб-сервер поднять указанный скрипт, выполнить его (линейно, строка за строкой весь твой код), а результат возвратить браузеру клиента. После этого скрипт «умирает», а следующий же запрос запустит всю эту адскую машинку заново. А если таких запросов одновременно тысяча? Старый добрый подход называется CGI (интерфейс взаимодействия веб-сервера и интерпретатора языка, на котором написана страница). Хитрые надстройки вроде FastCGI расширяют протокол, позволяя избежать выгрузки скрипта после первого запроса. Таким образом, когда второй пользователь запросит ту же страницу, для него будет уже все готово, останется только выполнить скрипт с новыми параметрами. Но все эти ухищрения — все равно не то.

Что такое хорошо, а что такое плохо

Многие разработчики всегда считали JavaScript просто «примочкой» к браузеру, эдаким недоязыком, который годится разве что для управления формами и манипулирования DOM-деревом веб-страницы. Некоторые до сих пор думают, что «java» в названии что-то да значит! �� Действительно, язык очень простой. Впрочем, настоящие программисты давно научились творить с его помощью чудеса, предоставив нам потрясающе удобные онлайн-сервисы, которыми мы ежедневно пользуемся. Многие из таких профи пошли дальше и, трезво посмотрев на сам язык и его возможности, особенно по части работы с событиями, решили: а что если на JavaScript написать сервер? Ты получаешь возможность написать на одном и том же языке все части сайта: что серверную часть, что саму клиентскую страничку. Кроме того, JS отлично, просто идеально подходит для разных веб-штучек. Он очень простой и одновременно гибкий, что позволяет писать код в разных парадигмах: от обычного процедурного до ООП в смеси с функциональным стилем. А главное — это тотальная асинхронность. Это значит, что твой код будет выполняться не последовательно, как в случае с PHP/Perl-скриптами, а именно в тот момент, когда для него будут готовы все данные. Ведь для веба не надо большой вычислительной мощности — большую часть времени сервер ожидает событий вроде получения данных формы, выборки из базы данных или, что еще хуже, ответа на запрос к другому серверу. Обычный РНР-скрипт в такое время простаивает, а значит, простаивает весь поток, не позволяя серверу задействовать его для других пользователей. В такой ситуации не спасает даже Nginx. В случае с JavaScript ты просто указываешь, какую функцию необходимо выполнить, когда произойдет определенное событие, и все. В это время другой код может спокойно выполняться. Такая функция называется callback, или обработчик событий. Хотя писать действительно сложный код в таком стиле немного неудобно, особенно если твоя функция зависит от нескольких событий сразу, но и для этого уже придумали свои фреймворки, зачастую гораздо более мощные и элегантные, чем все эти РНР/Ruby/Python.

А к чему она вообще, эта асинхронность?

Для примера ограничений последовательного выполнения кода рассмотрим два типовых примера кода на PHP и JavaScript, выполняющих одно и то же. Начнем с любимого PHP:

$result = $db->fetchOne(‘SELECT user_name FROM user_accounts WHERE > echo ‘Мое имя: ‘ . $result . ‘;’;

В первой строке мы посылаем простой SQL-запрос к БД на выборку имени пользователя, у которого >

db.query(‘SELECT user_name FROM user_accounts WHERE > <
if (!err) sys.log(‘Мое имя: ‘ + res);
>);
sys.log(‘Продолжаем выполнение’);

Тут опять же создается запрос к базе данных, однако кроме самого SQL-выражения в запросе передается еще и функция-обработчик (callback). Эта функция будет вызвана именно тогда, когда придет ответ от базы данных, а до этого момента выполнение скрипта ни в коем случае не будет стопориться. Для примера в следующей строке мы просто выводим строку в консоль, чтобы показать, что выполнение сценария продолжается сразу после формирования запроса, не ожидая его завершения. Собственно, в основе любого варианта серверного JavaScript заложена концепция событий и callback’ов, то есть обработчиков событий. Ты можешь описывать собственные события. Тогда ход выполнения приложения будет зависеть от событий, которые возникают в результате активности пользователя на странице («форма заполнена» или «новое сообщение» и т.д.) или генерируются внутри самого сервера (как, например, в случае с обращением к базе данных). Те действия, которые необходимо выполнять в случае наступления событий, описываются внутри функций обработчиков событий.

Движок, вот в чем вопрос

Короче говоря, использовать JavaScript не только для клиентской части, но и на серверной стороне — это хорошо и даже приятно. Другой вопрос — каким образом это возможно осуществить? Сегодня есть четыре основных движка, которые используются на серверах.

Rhino — движок от компании Mozilla, написанный на Java и поддерживающий последнюю 1.7 версию стандарта JS, который к тому же дополняет язык собственными расширениями и объектами. Основным преимуществом движка является работа поверх стандартной JVM, а значит, его можно использовать в любой среде, где работает Java. Другими словами, можно применять современные веб-серверы типа jetty, но при этом писать на любимом JS. Кстати, Rhino применяют на облачном хостинге от Google! А вот с производительностью сложнее. Она зависит, с одной стороны, от движка и применяемых там технологий, вроде JIT-компиляции, и от работы самой Java-машины. Кстати, многие тестеры, которые говорят, что Rhino очень медленный, забывают, что движок имеет два режима работы: интерпретации, когда скрипт каждый раз преобразуется в Java байт-код (аналогично PHP), и компиляции, когда такое преобразование происходит только раз, а потом многократно исполняется. Первый режим выгоден, когда ты отлаживаешь код, который меняется каждую минуту, второй больше подходит для рабочей версии проекта, работающей под нагрузкой.

SpiderMonkey — еще один движок от Mozilla, на этот раз на C. Кстати, это вообще первый в мире движок JS, написанный еще в Netscape — сегодня он открыт и используется в таких популярных продуктах как Firefox, Adobe Acrobat и даже в одном из эмуляторов серверов онлайн-игры Ultima Online. Далее разработчики сильно модифицировали его, добавив компиляцию JS напрямую в ассемблерный код, и переименовали в TraceMonkey — именно этот движок используется в ветке 3.6 Firefox’а. В основном SpiderMonkey используют в ПО, которое написано на С/С++ и нуждается в скриптовом языке. Из известных продуктов: Comet-сервер APE, noSQL БД CouchDB, серверная платформа Jaxer и модуль к Apache mod_js.

Futhark — это движок от Opera, который, кроме браузера, используется в их инновационном сервисе Unite (типа встроенный сервер в каждом браузере), а также на их серверах, обслуживающих мобильный браузер Opera Mini. Жаль, что движок закрыт, и его пока нигде за пределами самой Opera не применяют.

Мастер Йода рекомендует:  Как работать с POST-запросами в PHP

V8 — движок от Google, который используется в Chrome и является основой будущей Chrome OS. Сегодня это самый крутой, быстрый и мощный движок, в котором JS-код напрямую преобразуется в ассемблер целевого процессора, что позволяет обойти по скорости все остальные движки. Кроме этого гугловцы используют множество ухищрений для оптимизации, хранят в памяти скомпилированный код, оптимизируют его на лету (например, удаляют блоки кода, которые по решению компилятора вообще не могут быть задействованы, и т.п.). На базе этого движка построена самая популярная и быстроразвивающаяся серверная платформа — Node.JS.

Node.JS

Вероятно, именно после выхода Chrome разработчики смекнули, что такой быстрый движок можно успешно использовать и на сервере. Первым опытом стал проект V8cgi, который просто позволял писать серверные сценарии, работающие с любым веб-сервером по стандартному протоколу CGI. Дальнейшие эксперименты привели к рождению проекта Node.JS — полностью самостоятельной платформы, включающей, кроме движка, встроенный сервер (HTTP и TCP/UDP/Unix-soket) и базовый набор библиотек, а также предоставляющей полностью асинхронную работу с файлами и сетевыми устройствами.

Проект развивается настолько быстро и активно, что уже сейчас готов к промышленному использованию. Это, в частности, доказывает опыт парней из Plurk (азиатский аналог твиттера), которые полностью перенесли свой comet-сервер, изначально написанный на Java и солидном JBoss Netty, на Node.JS и, по отзывам, сократили потребление памяти буквально на гигабайты. А масштабы у них еще те — более сотни тысяч одновременных соединений.

Запустить HTTP-сервер, способный обрабатывать асинхронно тысячи подключений — это несколько строк кода:

var sys = require(‘sys’), http = require(‘http’);
http.createServer(function (req, res)
<
res.writeHead(200, <'Content-Type': 'text/plain'>);
res.end(‘Hello Worldn’);
>).listen(80, «127.0.0.1»);
sys.puts(‘Server running at http://127.0.0.1:80/’);

Чтобы запустить сервер, скопируй код в файл example.js и укажи его при запуске демона node:

% node example.js
Server running at http://127.0.0.1:80/

Маленький тест провести очень просто. Можно взять программу Apache Bench — очень простую тулзу для проведения нагрузочного тестирования, и запустить ее: running «ab -n 1000 -c 100 ‘http://127.0.0.1:80/’». Таким образом, бенчмарк будет «обстреливать» сервер тысячами запросов, используя 100 одновременных подключений. На моем ноутбуке сервер выдержал больше 3000 запросов в секунду. Это очень много!

Сам сервер написан на C++ и совсем немножко на ассемблере, однако большая часть библиотек из дистрибутива разработана на JavaScript. В состав базового набора сервера входят только основные функции, остальное оставлено на плечах разработчиков, которые уже написали сотни разных библиотек и фреймворков. Впрочем, молодость проекта дает о себе знать: многих привычных для других решений модулей еще нет, а у многих библиотек текущая версия — 0.0.1, что не придает уверенности в их стабильности. Некоторые тривиальные задачи могут вообще не иметь готового к закачке решения, но бывает и наоборот — количество реализаций, зачастую радикально разных по архитектуре, исчисляется десятками (доступ к базе MySQL, например). Хотя большинство библиотек написано на чистом JavaScript, есть и такие, что требуют компиляции модуля к серверу, что обещает гораздо большую скорость — они просто расширяют стандартный API сервера.

Готовые наработки для серверного JavaScript

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

Narwhal — мощное решение, работающее поверх многих JS-движков. Таким образом, программистам не надо париться по поводу различия различных серверов — они могут просто писать код.

CommonJS — попытка стандартизировать платформу и дать общий API для всех движков, предлагая низкоуровневый API, а также API для подключения различных готовых модулей.

JSGI (JavaScript gate interface) — разработан специальный протокол взаимодействия связи веб-демона и серверных сценариев на JavaScript. Увы, спецификацию пока полностью поддерживает только проект Rhino в окружении сервера jetty.

Особенности Node.JS

Основной особенностью Node, кроме полной асинхронности, является его однопоточная модель. Другими словами, все операции выполняются в одном и том же потоке ОС, даже если у твоего сервера тысяча одновременных пользователей. Правда, доступно создание дочерних процессов и низкоуровневое управление исполнением скриптов (загрузка, компиляция, работа с ассемблерным кодом, исполнение). Для реализации многопоточности и задействования всех ядер современных процессоров рекомендуется просто загружать несколько копий приложения, но можно взять на вооружение WebWorker из стандарта HTML5 и распределить работу приложения по нескольким дочерним процессам. Не думай, что раз нет многопоточности — это тормоз и отстой. Вспомни, что веб-приложение делает полезную работу очень быстро, а большую часть времени просто ожидает чего-то (данных от базы, от memcached’а или новомодной NoSQL-базы), либо просто держит в памяти открытые соединения для Comet’а, поэтому в одном потоке можно обработать и десяток тысяч, не прибегая к кластеризации.

Второй особенностью архитектуры Node является событийность. Почти каждая операция имеет коллбэки, генерирует событие, а пользователю доступен объект EventEmiter, через который можно буквально одной строкой генерировать свои события (это несложно, ведь событие — это просто строка с названием, а также список параметров, которые передаются в обработчик).

Сам по себе Node построен вокруг EventLoop — глобального цикла обработки событий, который на каждом тике проверяет, готовы ли данные для какого-либо из определенных пользователем коллбэков. Если данные есть, начинается выполнение кода. Если не осталось больше кода — ожидаем следующего вызова. Цикл выполняется вне JS, а в самом движке, написанном на C, вследствие чего это происходит очень и очень быстро (порядка сотен тысяч раз в секунду). Что-то типа бесконечного цикла. В дополнение к этому в сервер встроен очень эффективный сборщик мусора (GC), поэтому даже тысячи подключений не вызывают переполнения памяти и падения сервера. Node.JS обладает встроенной родной системой работы с событиями.

Простейший Steaming-сервер

Попробуем написать простой, но в тоже время полезный пример, который в реальном времени будет выдавать пользователю полезную информацию без перезагрузки страницы. Вот идея для нашего приложения — брать новые данные, которые добавляются в текстовый лог, и выводить их в реальном времени на веб-странице:

Скринкаст по Node.js

Вашему вниманию предлагается скринкаст по Node.JS на русском языке.

Его целью не является разбор всех-всех возможностей и модулей Node.JS, ведь многие из них используются очень редко.

С другой стороны, мы очень подробно разберём основные возможности и средства создания веб-сервисов, включая внутренние особенности самого сервера Node.JS, важные для его работы.

Если вы — разработчик, то вам наверняка известно: большинство полезной документации и скринкастов делается на английском.

Конечно, даже на английском много всего устаревшего, приходится порыться, но на русском — всё гораздо хуже. Многого просто нет. Хотелось бы поменять эту ситуацию, хотя бы в плане Node.JS.

Вы также можете скачать все скринкасты в виде архива с видео-файлами.

Введение в Node JS

Что такое Node JS. Начало работы

Node.js представляет среду выполнения кода на JavaScript, которая построена на основе движка JavaScript Chrome V8, который позволяет транслировать вызовы на языке JavaScript в машинный код. Node.js прежде всего предназначен для создания серверных приложений на языке JavaScript. Хотя также существуют проекты по написанию десктопных приложений (Electron) и даже по созданию кода для микроконтроллеров. Но прежде всего мы говорим о Node.js, как о платформе для создания веб-приложений.

Node.js является открытым проектом, исходники которого можно посмотреть на github.com.

Установка

Для загрузки перейдет на официальный сайт https://nodejs.org/en/. На главной странице мы сразу увидим две возможные опции для загрузки: самая последняя версия NodeJS и LTS-версия.

Загрузим последнюю версию. В моем случае это версия 11.1.0. Для Windows установщик представляет файл с расширением msi. После запуска откроется программа установщика:

После успешной установки вы можем ввести в командной строке/терминале команду node -v , и нам отобразится текущая версия node.js:

Версии node.js для других операционных систем наряду с исходниками можно найти по адресу https://nodejs.org/en/download/

Инструменты разработки

Для разработки под Node JS достаточно простейшего текстового редактора, в частности, Notepad++. Также можно использовать более изощренные редакторы типа Atom, Sublime, Visual Studio Code, либо среды разработки, которые поддерживают работу с Node.JS, например, Visual Studio или WebStorm.

После установки NodeJS нам становится доступным такой инструмент как REPL. REPL (Read Eval Print Loop) представляет возможность запуска выражений на языке JavaScript в командной строке или терминале.

Так, запустим командную строку (на Windows) или терминал (на OS X или Linux) и введем команду node . После ввода этой команды мы можем выполнять различные выражения на JavaScript:

Или используем какую-нибудь функцию JS:

Можно определять свои функции и затем их вызывать, например, возведение числа в квадрат:

Если мы введем что-то неправильно, то REPL укажет об ошибке:

Выполнение файла

Вместо того чтобы вводить весь код напрямую в консоль, удобнее вынести его во внешний файл. Например, создадим на жестком диске новый каталог, допустим, C:\node\helloapp , в который поместим новый файл app.js со следующим кодом:

В командной строке перейдем с помощью команды cd к каталогу helloapp, а затем выполним команду:

Frontender Magazine

Сейчас нет недостатка в обучающих материалах по Node.js, но большинство из них охватывают либо какие-то конкретные варианты использования, либо темы, применимые уже тогда, когда у вас есть работающий Node.js То тут, то там я вижу комментарии вроде «я скачал Node.js, что теперь?». Статья ответит на этот вопрос и объяснит, как начать с самого начала.

Что есть Node.js?

Много путаницы у новичков в Node.js возникает из-за непонимания того, что же на самом деле это такое. И описание на nodejs.org не слишком помогает разобраться.

Важно понять, что Node — это не веб-сервер. Сам по себе он ничего не делает. Это не Apache. Там нет конфиг-файла, в котором указывается путь до HTML-файлов. Если вам нужен HTTP-сервер, вам нужно написать HTTP-сервер (с помощью встроенных библиотек). Node.js — это просто ещё один способ выполнять код на вашем компьютере. Это просто среда для выполнения JavaScript.

Установка Node

Установить Node.js очень просто. Если вы используете Windows или Mac, установочные файлы доступны на странице загрузки.

Я установил Node, что теперь?

Сразу после установки вам становится доступна новая команда node . Её можно использовать двумя разными способами. Первый способ — без аргументов. Откроется интерактивная оболочка (REPL: read-eval-print-loop), где вы можете выполнять обычный JavaScript-код.

В примере выше я написал console.log(‘Hello World’) в оболочке и нажал Enter. Node.js выполнит этот код, и мы увидим сообщение. undefined после него выводится потому, что оболочка отображает возвращаемое значение каждой команды, а console.log ничего не возвращает.

Кроме того, мы можем передать Node файл с JavaScript для выполнения. Именно так вы и будете практически всегда делать.

Теперь запустим его в терминале:

В этом примере я переместил console.log в файл, который затем передал команде node в качестве аргумента. Node затем запускает JavaScript из этого файла и выводит Hello World .

Делаем что-нибудь полезное — работа с файлами

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

Неважно, что означают данные в логах, но по существу каждое сообщение содержит дату, букву и значение. Допустим, я хочу просуммировать значения для каждой буквы.

Сперва нам нужно считать содержимое файла.

Работать с файлами в Node.js очень просто благодаря встроенному модулю файловой системы fs . Этот модуль содержит функцию readFile, принимающую в качестве аргументов путь до файла и коллбэк. Коллбэк вызовется, когда завершится чтение файла. Данные из файла поступают в виде объекта типа Buffer, по сути представляющего собой массив байтов. Мы можем перевести его в строку с помощью функции toString().

Теперь давайте займёмся обработкой логов. Это вполне себе обычный код JavaScript, поэтому я не буду вдаваться в детали.

Теперь, когда вы передадите этот файл node в качестве аргумента, он выведет результат и завершит работу.

Я часто использую Node.js для таких задач. Это простая и мощная альтернатива bash-скриптам.

Асинхронные коллбэки

Как вы могли видеть в предыдущем примере, типичным шаблоном в Node.js является использование асинхронных коллбэков. По сути вы говорите ему что-то сделать, и когда оно будет готово, вызвать вашу функцию (коллбэк). Всё потому, что Node.js однопоточный. Пока вы ждёте вызова коллбэка, Node.js может отвлечься и заняться другими делами, а не блокировать поток в ожидании завершения обработки запроса.

Это особенно важно для веб-серверов. Доступ к базам данных в современных веб-приложениях — обычное дело. Пока вы ждёте ответа от базы, Node.js может обработать ещё запросы. Это позволяет вам обрабатывать тысячи одновременных соединений с очень маленькими затратами, сравнимыми с созданием отдельного потока для каждого соединения.

Делаем что-нибудь полезное — HTTP-сервер

Как я уже говорил ранее, Node.js не делает ничего «из коробки». Один из встроенных модулей позволяет без особых усилий создать простой HTTP-сервер, указанный в примере на сайте Node.js.

Когда я говорю, «простой», это значит «простой». Это не навороченный HTTP-сервер. Он не работает с HTML или изображениями. Фактически, что бы вы ни запросили, он вернёт Hello World . Тем не менее, можете запустить его, зайти на http://localhost:8080 в браузере и увидеть этот текст.

Возможно, вы заметите небольшую разницу: ваше приложение не завершает работу. Так происходит потому, что вы создали сервер, и теперь он будет продолжать работать и отвечать на запросы до тех пор, пока вы не убьёте node сами.

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

Делаем что-нибудь полезное — Express

Express — это фреймворк, делающий создание большинства сайтов очень простым. Первое, что вам нужно будет сделать — установить его. Вместе с командой node у вас появилась команда npm . Этот инструмент даёт вам доступ к колоссальному количеству модулей, созданных сообществом, и Express как раз один из них.

Установленный модуль расположится в папке node_modules внутри каталога с вашим приложением. Оттуда вы сможете подключать его так же, как любой встроенный модуль. Давайте создадим с помощью Express простой сервер, отдающий статику.

Теперь у вас есть довольно мощный сервер для статического контента. Всё, что вы сложите в папку /public , может быть запрошено из браузера и будет отображено. HTML, изображения, почти всё, что душе угодно. Например, если вы положите изображение с именем my_image.png в эту папку, его можно будет запросить по адресу http://localhost:8080/my_image.png . Разумеется, у Express намного больше возможностей, но их вы можете открыть для себя, продолжив изучение самостоятельно.

Мы уже немного ознакомились с npm в предыдущем разделе, но я хотел бы подчеркнуть важность этого инструмента в контексте разработки на Node.js. Вам доступны тысячи модулей, решающих практически все типичные задачи, с которыми вы, возможно, столкнётесь. Не забывайте проверить существующие модули перед тем, как изобретать велосипед. Для приложения на Node.js нормально иметь массу зависимостей.

В предыдущем примере мы установили Express вручную. Если у вашего проекта много зависимостей, то устанавливать их таким образом не очень удобно, поэтому npm использует файлы package.json .

Файл package.json содержит общие сведения о вашем приложении. Он может содержать множество настроек, но выше указан необходимый минимум. Секция dependencies описывает имя и версию модулей, которые вы хотите установить. В данном случае подойдёт любая версия Express 3.3. Вы можете перечислить в этой секции столько зависимостей, сколько захотите.

Теперь вместо установки зависимостей по одной мы можем установить все сразу командой:

При запуске этой команды npm будет искать package.json в текущей директории, и если найдёт, то установит каждую указанную в нём зависимость.

Организация кода

Итак, до этого момента мы работали только с одним файлом, что не очень хорошо с точки зрения поддержки кода. В большинстве приложений вы будете распределять код между несколькими файлами. На данный момент какого-либо стандарта или рекомендуемой структуры файлов не существует. Это не Rails. Здесь нет концепта «представления идут сюда, а контроллеры — сюда». Можете делать так, как захотите.

Давайте проведем рефакторинг скрипта, обрабатывающего логи. Его будет легче поддерживать и тестировать, если мы выделим логику парсера в отдельный файл.

Я создал новый файл, содержащий логику для парсинга. Это просто JavaScript, и существует множество способов инкапсуляции этого кода. Я предпочитаю заводить новый объект, потому что так легче проводить юнит-тестирование.

Важная часть в этом коде — строка с module.exports . Она объясняет Node.js, что вы выносите из этого файла. В данном случае я выношу конструктор, чтобы пользователи могли создавать экземпляры моего объекта Parser . Вы сможете выносить то, что сами захотите.

Давайте теперь посмотрим, как импортировать этот файл и использовать новый объект Parser .

Файлы подключаются точно так же, как и модули, за исключением того, что вместо имени модуля нужно писать путь. Расширение .js подразумевается по умолчанию, так что можете опустить его, если хотите.

Так как я вынес в модуль конструктор, то он и вернётся выражением require . Теперь я могу создавать экземпляры Parser и использовать их.

Где тусуются русскоязычные программисты node.js.

Не осилил. Не осилил полную установку этого говна на Windows x64.
Готов даже в job, замена windows на linux на моём ноутбуке существенно ухудшит мой комфорт и пока не рассматривается.

Это говнище при сборки нэйтивных модулей на c++ какими-то костылями вызывает msbuild (да, node.js ТРЕБУЕТ VisualStudio для чего-то большего, чем HelloWorld! Ну или cygwin, но это для совсем тёмных колдунов), и я не нашёл, как распарсить и настроить то, что оно требует от msbuild’а.

На винфаке, по понятным причинам, мне не то что не ппомогут, но даже не поймут.

РЕШЕНИЕ: первая проблема требовала выпиливания старых версий npm-gyp и впиливания новых, знакомых с VS 2013. Вторая проблема (бесконечные пути-имена, не понятные vs++) решается выпиливанием старого npm и установкой свежайшего (ещё пол-года назад полоовина софта под ноду на win не работало).

Добавить комментарий