Осуществим вводный экскурс в Node.JS. Действительно это что-то новое и гениальное? Что оно может, а что нет? Кому будет полезен? В каких случаях применять, а в каких нет? На все эти вопросы я постараюсь ответить в своём докладе.
2. О создатель!!!
• Ryan Dahl выпустил
первую версию в 2009 году
• Последняя – v0.8.20
• По сути он не придумал ничего нового он просто
объединил идеи и теперь......
• Node.JS не просто новый способ выражения
существующих идей, а скорее новый способ
мышления о том, как программное обеспечение
системы должно быть построено.
3. Что это?
• Вот формулировка создателя – node.js is a set of
bindings to the V8 JavaScript VM
• V8 – Google JavaScript Engine используемый в
Chrome.
• Технология 2012 года по версии InfoWorld
• Сайт nodejs.org
4. Основные идеи
• Выполнение серверного кода в ОДНОМ!!! Потоке
• Асинхронное выполнение операций вводы/вывода
• Серверный JavaScript
• Это было и до Node.JS Но именно Ryan Dahl
объединил всё вместе и сделал Node.JS
6. Проблемы архитектур
большинства веб приложений
result = query(‘select * from T’)
Что происходит во время
выполнения этого кода?
7. Затраты на операции в
современных компьютерах
L1: 3 такта
L2: 14 тактов
RAM: 250 циклов
Диск: 41 000 000
Сеть: 240 000 000
8. Выделение потока на обработку
запроса клиента
• Переключение между контекстами потоков –
затратно
• При массивной конкуренции вы не можете выделять
поток для каждого запроса. Таким образом все
входящие запросы будут ждать.
9. Как работает Node.JS в качестве
Клиенты шлют запросы
сервера? Клиенты шлют запросы
Клиенты шлют запросы
Клиенты шлют запросы
кксерверу
серверу кксерверу
серверу
Clients
Результат длительной
Результат длительной
операции поступают вв
операции поступают Представляет собой
Представляет собой
Очередь сообщений
Очередь сообщений стек команд,
стек команд,
через обратный вызов
через обратный вызов выполняемых
выполняемых
последовательно вв
последовательно
Очередь сообщений одном потоке.
одном потоке.
(Один поток)
Неблокируемый
обработчик
(или поток или Запуск длительных
Запуск длительных
операций
операций
функция)
10. И наш запрос превращается в
query(‘select * from T’, function(result)) {
// Используем результат
});
11. Почему же не используют такие
очевидные вещи?
1.Культурные причины
Синхронный код:
var conn = getDbConnection(connectionString);
var stmt = conn.createStatement();
var results = stmt.executeQuery(sqlQuery);
for (var i=0; i<results.length; i++) {
// print results[i];
}
Асинхронный код:
getDbConnection(connectionString, function(err, conn) {
conn.createStatement(function(err, stmt) {
var results = stmt.executeQuery(sqlQuery);
results.on(‘row’, function(result) {
// print result
});
});
});
12. Почему же не используют такие
очевидные вещи?
asyncFunction1(inputParam, function(err, results1) {
asyncFunction2(results1, function (err, results2) {
asyncFunction3(results2, function (err, results3) {
asyncFunction4(results3, function (err, results4) {
asyncFunction5(results4, function (err, results5) {
// and so on…
});
});
});
});
});
13. Почему же не используют такие
очевидные вещи?
2. Отсутствие инфраструктуры.
Большинство библиотек не поддерживают
асинхронность.
14. Что же там внутри?
Модули
1. На модулях основана разрабока в Node.JS
2. Именно модули позволяют приложению общаться с
внешним миром и структурировать ваш код
3. Существуют 3 источника модулей.
• Встроенные
• Ваши файлы
• Глобальный репозиторий
15. Что же там внутри?
Встроенные Модули
Обеспечивают серверную инфрастуктуру.
Модуль подключается так:
var fs = require(‘fs’);
Примеры модулей:
fs os dgram
http zlib path
crypto dns И т.д.
36. Заключение
Node.JS это сервер приложений в первую
очередь. Отсюда вытекают все приимущества его
примерений. Хорош для
•One page Application
•Легковесных REST / JSON интерфейсов
•Сервиса по запуску других приложений
•Высоконагрузочная способность позволяет
использовать его для создания игр
38. Заключение
Из экзотических применений.
•Веб парсеры на базе Node.JS позволяют
создавать веб пауков для сайтов с Javascript
•Walmart реализовала рендеринг клиентских
мобильных приложений на Node.JS