Він особливо сильний в обробці тони вводу / виводу файлів, і я би очікував, що він також добре обробляє мережевий зв’язок. Це здається особливо популярним для програм, керованих сокетами. Важливо пам’ятати, що якщо ваші потреби не задовольняються існуючими бібліотеками (їх багато), вам може знадобитися зануритися в якийсь C, який може бути прив’язаний до JS-команд. Ви також можете породжувати додаткові процеси у вузлах, але я підозрюю, що багато чого може призвести до оподаткування (я припускаю, що це може бути не так - є примірник V8, породжений для кожного з них).
JS є однопоточним та блокуючим, тобто нічого іншого не можна виконати, поки виклик функції не завершиться. Це було бажаною особливістю JS, по суті, витягуючи з рук усі проблеми, пов'язані з ниткою та чергою. JS не перешкоджає роботі C / C ++ від запуску більш багатопотокового способу під кришкою, тому роль JS - це справді більше архітектури / месенджера. Якщо ви обробляєте зображення, ви не хочете обробляти це за допомогою синхронних команд JavaScript, оскільки все інше у вашій програмі чи сервері буде заблоковано, поки це не буде виконано. Ідея полягає в тому, що ви закликаєте обробляти зображення за допомогою пов'язаної функції C / C ++, а потім відповідати на подію "зроблено", коли зображення закінчується на обробці.
Для цього потрібно, щоб JS у будь-якому додатку Node.js був сильно подій та керований зворотним дзвінкам, інакше він, ймовірно, буде працювати дуже погано. Таким чином, ви не побачите багато викликів методів у Node, які не отримують функцію для подальшого використання. Одне, що дуже швидко стає зрозумілим у Node, - це те, що ти хочеш створити світ некрасивого, якщо ти не знайдеш способу впоратися з пірамідою зворотного дзвінка. напр
//event CBs are more DOM-style than Node style and this isn't built-in Node file I/O
//keeping it simple and quick since I'll just get Node stuff wrong from memory
file.get('someFile.txt', function(e){
e.fileObj.find('some snippet', function(e){
someFinalCallBackHandler( e.snippetLocations );
} );
} );
На щастя, існує безліч інструментів та прикладів для кращого вирішення цього питання. Більшість людей, як правило, обертаються навколо механізмів обіцянок і просто прив'язують низку функцій, призначених відповідати на стан зворотного виклику один одного у масиві, який робить некрасиві піраміди для вас під кришкою.
Особисто я лякаю любов'ю, що ми наближаємо JS на високому рівні та C / C ++ ближче до хрому. Це найкраща комбінація, і це надихнуло мене почати вчитися на C. І не дозволяйте відсутності бібліотечного потенціалу вас змусити, поки ви не зробите деякі дослідження. Бібліотеки вузлів виробляються дуже швидкими темпами і дозрівають дуже швидко. Якщо ви не робите нічого надзвичайно незвичайного шансу, добре, що хтось це висвітлює.
Найбільша відмінність від Rails полягає в тому, що JS ніколи не буде на рейках, як це було. Ми, як правило, кодуємо можливість мати його, проте ви хочете, щоб це було дуже швидко, тому є мотузка, щоб повісити себе на фактор, і архітектура була досить саморобкою в JS до останніх років. Я називаю цю свободу, але я розумію, що це не сприймається як ідеальне для багатьох чортів.
Крім того, ви ніколи не матимете проблеми з "дорогоцінним каменем" у Node.js, оскільки ви намагалися встановити щось інше, ніж Mac. Клієнтські веб-розробники зневажають проблеми залежності, і саме звідси походить багато ядер Node. Якщо він не виходить з коробки протягом 5 хвилин або менше на кожній популярній платформі, ми, як правило, його збиваємо і кидаємо. Мені ще не доводиться стикатися з популярним модулем, який вимагав зробити щось особливе, щоб він працював. Пакетна система, відмінна.
Але відповісти на своє основне питання більш чітко / коротко: Чи добре це з фоновими процесами?
Так, Node в основному IS фонові процеси із засобом управління додатком через події та зворотні виклики.