- PVSM.RU - https://www.pvsm.ru -
Node.js, в целом, вызывает две реакции у людей, которым я представляю его. В основном они либо понимают его сразу, либо заканчивается тем, что они ничего не понимают.
Если ты до сих пор относишься ко второй категории, давай я попробую объяснить Node:
Я слышу тебя! Node – это не долбанный единорог, который придет и сделает всю работу за тебя, ты уж прости. Это всего лишь инструмент и он, вероятно, не заменит твои обычные инструменты, по крайней мере, на данный момент.
Конечно, давай. Node хорош тогда, когда тебе нужно сделать несколько вещей в одно и то же время. Ты когда-нибудь писал кусок кода и говорил – «Я хочу это распараллелить»? Ну, в Node все работает параллельно, за исключением твоего кода.
Да-да, все работает параллельно, за исключением твоего кода. Чтобы понять это, представь, что твой код – это король, а Node – его армия слуг.
День начинается с того, что один слуга будит короля и спрашивает его, нужно ли ему чего. Король дает слуге список из задач и ложится спать дальше. Теперь слуга распределяет эти задачи среди своих коллег и они идут на работу.
После того, как подчиненный заканчивает работу, он идет докладывать об этом в королевский квартал. Король слушает одного слугу за раз. Иногда король подкидывает еще заданий, когда слуга уходит.
Жизнь прекрасна, слуги выполняют свои задачи параллельно, но король выслушивает только один результат за раз и может сфокусироваться на одном результате.
Конечно. Простая программа на Node может выглядеть так:
var fs = require('fs'),
sys = require('sys');
fs.readFile('treasure-chamber-report.txt', function(report) {
sys.puts("oh, look at all my money: "+report);
});
fs.writeFile('letter-to-princess.txt', '...', function() {
sys.puts("can't wait to hear back from her!");
});
Твой код дает Node два задания: прочитать и записать файл, а потом он ложится спать. Как только Node завершил задачу, вызовется callback [2]. Но только одна callback-функция вызывается за раз. До тех пор, пока эта функция не закончит работу, все остальные callback'и стоят в очереди и ждут. Кроме того, нет никаких гарантий, в каком порядке вызовутся эти функции.
Именно! Вот вся красота однопоточного/event loop дизайна JavaScript!
Одна из причин – эффективность. В веб-приложении, обычно, время отклика – это сумма времени, которое затрачивается на выполнение всех запросов к базе данных. С помощью Node ты можешь сразу все запросы сразу, из этого следует, что время отклика приложения сократится до времени выполнения самого долгого запроса.
Другая причина – JavaScript. Ты можешь использовать Node для обмена кодом между браузером и сервером. Также, JavaScript становится действительно универсальным языком. Не важно, что вы писали на Python, Ruby, Java, PHP,… в прошлом вы, вероятно, писали что-то на JS, ведь так?
И последняя причина – скорость кода. V8 постоянно расширяется и остается одним из самых быстрых динамических интерпретаторов на планете. Я даже и не знаю о каком-либо другом языке, который бы так же агрессивно, как JavaScript сейчас, налегал на скорость. В добавок ко всему, Node'вские средства ввода/вывода действительно легковесны, что позволяет использовать ввод/вывод на вашей системе так быстро, как это вообще возможно.
И да, и нет. Как только ты начнешь раскачивать молот Node, все, очевидно, будет выглядеть гвоздями. Но, если ты работаешь над чем-то с дедлайном, можешь основывать свое решение на этих вещах:
Нет, если у тебя Windows, то тебе нужно поставить виртуальную машину (я рекомендую VirtualBox) с Linux на борту. Поддержка Windows планируется, но не стоит задерживать дыхание на несколько месяцев, если ты не хочешь помочь с портированием.
Отличный вопрос! Нет, DOM – это браузерная штуковина, и Node'вский JS движок (V8), к счастью, отделен от всего этого беспорядка. Тем не менее, есть люди, работающие над реализацией DOM в Node в качестве модуля, который может открыть очень интересные возможности, такие как модульное тестирование client-side кода.
Все зависит от тебя. Если ты уже научился жонглировать AJAX запросами и пользовательскими событиями в браузере, то привыкнуть к Node не составит большого труда.
В любом случае, TDD может реально помочь тебе с поддержкой проектов.
Есть небольшой/неполный лист на Node wiki [3] (поскрольте до «Компании, использующие Node»). Yahoo [4] эксперементирует с Node для YUI, Plurk использует его для massive comet, Пол Биказ (создатель JQuery) делает умопомрачительный игровой движок [5], который использует немного Node на сервере. Joyent [6] наняла Райана Дала (создателя Node) и активно спонсирует проект.
Ах, да. Heroku только что анонсировала (экпериментальную) поддержку хостинга Node проектов [7].
Тим Касвелл запустил отличный блог о Node [8]. Читайте #nodejs [9] в Твиттере. Подпишитесь на рассылку [10]. А потом приходите на IRC канал #node.js (да-да, точка в имени). Нас там уже скоро будет 200.
Я также продолжаю писать статьи здесь, на debuggable.com [11].
Это перевод статьи [12].
Спасибо за внимание и инвайт.
Автор: slaykovsky
Источник [13]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/38443
Ссылки в тексте:
[1] V8 javascript engine: http://code.google.com/p/v8/
[2] callback: http://en.wikipedia.org/wiki/Callback_(computer_programming)
[3] Node wiki: https://github.com/ry/node/wiki
[4] Yahoo: http://www.yuiblog.com/blog/2010/04/09/node-js-yui-3-dom-manipulation-oh-my/
[5] умопомрачительный игровой движок: http://ajaxian.com/archives/aves-game-engine
[6] Joyent: http://www.joyent.com
[7] поддержку хостинга Node проектов: https://blog.heroku.com/archives/2010/4/28/node_js_support_experimental
[8] отличный блог о Node: http://howtonode.org
[9] #nodejs: http://search.twitter.com/search?q=%23nodejs
[10] рассылку: http://groups.google.com/group/nodejs
[11] debuggable.com: http://debuggable.com
[12] статьи: http://debuggable.com/posts/understanding-node-js:4bd98440-45e4-4a9a-8ef7-0f7ecbdd56cb
[13] Источник: http://habrahabr.ru/post/186218/
Нажмите здесь для печати.