22 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Зачем нужен Node js

Серверный 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 id = 1’);
echo ‘Мое имя: ‘ . $result . ‘;’;

В первой строке мы посылаем простой SQL-запрос к БД на выборку имени пользователя, у которого id = 1.Обрати внимание: в этом месте скрипт останавливается, и следующая строка не будет выполнена до того самого момента, пока запрос не будет обработан базой, а результат не возвратится в переменную $result. Да, в нашем примере это тысячные доли секунды, но в реальности и запросы гораздо сложнее, и базы по размеру зачастую составляют гигабайты, и запросов таких может одновременно быть пара тысяч. А теперь попробуем написать код на JS, используя асинхронный стиль:

db.query(‘SELECT user_name FROM user_accounts WHERE id = 1’, function(err, res)
<
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.

Читать еще:  Как пройти Крысиный король Destiny 2

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

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 и зачем он нужен

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

Читать еще:  Volvach Wedding

Одним наиболее известных «мастхэв»-средств для разработчиков программных решений на 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?

Почему идея использовать инструмент не по назначению набрала такую популярность? Ведь js сам по себе сильно урезанный язык, и предназначался для создания всяких свистоперделок на стороне клиента? Как так получилось, что его стали использовать везде и повсюду? Мое имхо — куча фронтендщиков, которые не могут в программирование и не знают ничего кроме своего жаваскрипта загорелись идеей писать настоящие программы и зафорсили ноду.

не могут в программирование

а программирование это что, Java что-ли?

Жаваскрипт это ЯП, а не toogle и снежок на жкьери. На нем сидит даже гномощель в конце то концов.

Читать еще:  Что такое Фосфоглив

imho всему начало – Mozilla XUL и, конечно же, жуткая ущербность самого HTML в далеком 1996 году. Помимо JS было накостыляло просто неимоверное количество «кросс-платформенного» нечто.

Ну а вот почему ? Наверное потому что, среда разработки была и есть в каждом браузере.

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

Да и скорость выполнения javascript’a нодой очень высокая, практически не отстает от программ на C++, а разработка гораздо быстрее.

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

Зачем? Потому что они (авторы ноды) могут.

Потому что простота всегда побеждает, в отличает от public static final Map MAP = new HashMap ();

Ведь js сам по себе сильно урезанный язык

бгг еще один дебил

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

В следующий раз попробуйте юзать модульное тестирование.

Почему идея использовать инструмент не по назначению набрала такую популярность?

Кто определяет назначение JavaScript?

Ведь js сам по себе сильно урезанный язык

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

и предназначался для создания всяких свистоперделок на стороне клиента?

Не свистоперделок, а веб-приложений с богатым пользовательским интерфейсом. Свистоперделки это тег audio.

Как так получилось, что его стали использовать везде и повсюду?

А везде и повсюду это где? Определённая ниша у node.js есть, но она не очень большая по-моему.

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

Доступность специалистов, это важное преимущество node.js перед конкурентами, тут не поспоришь.

В следующий раз попробуйте юзать модульное тестирование.

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

Ведь js сам по себе сильно урезанный язык

Ну ну. Посмотрел бы я на тебя, если бы ты попытался въехать хоть в часть инструментария языка.

В следующий раз попробуйте юзать модульное тестирование.

Далее в цикле это повторяется бесконечно ) Разработчики пока не планируют это фиксить. Судя по другим репортам, они сломали что-то серьёзное.

Ведь js сам по себе сильно урезанный язык

Да и скорость выполнения javascript’a нодой очень высокая, практически не отстает от программ на C++

Ага, «практически». Я эту хохму уже 10 лет от всех тормозных ЯП слышу. Попытки пруфов можно сразу смехопанораму отправлять.

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

Это можно применить к любым другим языкам с динамической типизацией, проблемой отдельно взятого javascript это не является. И даже в C++ надо проверять указатели на nullptr.

Тестирование одно, что на ДТ, что на СТ, и фактически должно быть стандартом де-факто при разработке ПО, если вы, конечно, не поклонник данной методологии проектирования.

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

Ну, V8 действительно быстр. Новый экспериментальный движок от мозилловцев тоже подтягивается.

Тоже никогда этого не понимал. Зачем нужно это node.js, зачем нужен emscripten. Хотя. Пофиг, я к этому отношение не имею и не буду забивать голову такими вещами

Почему идея использовать инструмент не по назначению набрала такую популярность?

Ведь js сам по себе сильно урезанный язык

Где он урезаный? Хера себе урезанный, чёт я его вторую неделю раздуплить не могу. Родовые травмы есть, ну дык растёт парень, до свадьбы заживёт.

и предназначался для создания всяких свистоперделок на стороне клиента

Где ты этот бред прочёл?

Как так получилось, что его стали использовать везде и повсюду?

И что? Это язык общего назначения. Использовали бы например lua что поменялось бы? Сообщество большое.

А nodejs так это просто платформа.

Где ты этот бред прочёл?

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

зачем нужен emscripten

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

А потом мы случайно кладём в одном месте вместо строки число

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

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

Инструменты, создание которых отталкивается от потребностей, обычно эффективнее и живучее инструментов, создание которых отталкивается от возможностей.

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

Ну, V8 действительно быстр.

Проблему с типами прекрасно решает TypeScript.

Ага, «практически». Я эту хохму уже 10 лет от всех тормозных ЯП слышу. Попытки пруфов можно сразу смехопанораму отправлять.

Давай, приведи пример, где node.js будет ощутимо медленнее, чем с++.

Всё на самом деле очень просто. Смотри, есть куча фронтендщиков, но что бы стать программистами – нужно многое читать, изучать. Они завидовали, завидовали. и придумали, как нефига не делая, теперь ещё и на сервере, десктопе и т.д. только на своём яваскрипт писать. Для них понатыкали api, что бы они не чувствовали себя ущербными по сравнению с не кастрированными ЯП. Упоролись настолько, что даже теперь в их рядах node.js у них раскол. Но не суть. В общем, вот она вся и популярность.

Каким-то чудом, этот ужасный синтаксис(для них конечно это священный грааль, считают что он самый идеальный) ещё притягивает и других людей. Но это уже их проблемы. Ещё очень любят сравнивать скорость js с C/C++, сами не понимая чего мелят. Например, в определенных тестах Python обогнал нативный Си, но что-то Питонисты не делают из этого культ и не тычут во всех этим.

В общем, популярно это только в среде фронтенд в основном. Традиционные инструменты для традиционных задач никуда не делись, развиваются и люди работают дальше, как и работали. Нет никакого массового суицида перехода на js и не будет. Ещё они свято верят, что js захватит мир. Ога)

Источники:

http://xakep.ru/2010/10/18/53583/
http://techrocks.ru/2019/01/20/why-do-you-need-node-js/
http://www.linux.org.ru/forum/talks/11148054

голоса
Рейтинг статьи
Ссылка на основную публикацию
Статьи c упоминанием слов: