ВВЕДЕНИЕ В node.js
DESCRIPTION
Осуществим вводный экскурс в Node.JS. Действительно это что-то новое и гениальное? Что оно может, а что нет? Кому будет полезен? В каких случаях применять, а в каких нет? На все эти вопросы я постараюсь ответить в своём докладе.TRANSCRIPT
![Page 2: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/2.jpg)
О создатель!!!
• Ryan Dahl выпустил
первую версию в 2009 году
• Последняя – v0.8.20
• По сути он не придумал ничего нового он просто объединил идеи и теперь......
• Node.JS не просто новый способ выражения существующих идей, а скорее новый способ мышления о том, как программное обеспечение системы должно быть построено.
![Page 3: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/3.jpg)
Что это?
• Вот формулировка создателя – node.js is a set of bindings to the V8 JavaScript VM
• V8 – Google JavaScript Engine используемый в Chrome.
• Технология 2012 года по версии InfoWorld
• Сайт nodejs.org
![Page 4: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/4.jpg)
Основные идеи
• Выполнение серверного кода в ОДНОМ!!! Потоке
• Асинхронное выполнение операций вводы/вывода
• Серверный JavaScript
• Это было и до Node.JS Но именно Ryan Dahl объединил всё вместе и сделал Node.JS
![Page 5: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/5.jpg)
Немного практики
![Page 6: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/6.jpg)
Проблемы архитектур большинства веб
приложений
result = query(‘select * from T’)
Что происходит во время выполнения этого кода?
![Page 7: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/7.jpg)
Затраты на операции в современных компьютерах
L1: 3 такта
L2: 14 тактов
RAM: 250 циклов
Диск: 41 000 000
Сеть: 240 000 000
![Page 8: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/8.jpg)
Выделение потока на обработку запроса
клиента
• Переключение между контекстами потоков – затратно
• При массивной конкуренции вы не можете выделять поток для каждого запроса. Таким образом все входящие запросы будут ждать.
![Page 9: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/9.jpg)
Как работает Node.JS в качестве сервера?
Clients
Неблокируемый обработчик
(или поток или функция)
Очередь сообщений(Один поток)
Клиенты шлют запросы к серверуКлиенты шлют запросы к серверу
Клиенты шлют запросы к серверуКлиенты шлют запросы к серверу
Запуск длительных операцийЗапуск длительных операций
Результат длительной операции поступают в Очередь сообщений через обратный вызов
Результат длительной операции поступают в Очередь сообщений через обратный вызов
Представляет собой стек команд, выполняемых последовательно в одном потоке.
Представляет собой стек команд, выполняемых последовательно в одном потоке.
![Page 10: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/10.jpg)
И наш запрос превращается в
query(‘select * from T’, function(result)) {
// Используем результат
});
![Page 11: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/11.jpg)
Почему же не используют такие очевидные вещи?
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
});
});
});
Синхронный код:
Асинхронны й код:
![Page 12: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/12.jpg)
Почему же не используют такие очевидные вещи?
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…
});
});
});
});
});
![Page 13: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/13.jpg)
Почему же не используют такие очевидные вещи?
2. Отсутствие инфраструктуры. Большинство библиотек не поддерживают
асинхронность.
![Page 14: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/14.jpg)
Что же там внутри? Модули
1. На модулях основана разрабока в Node.JS
2. Именно модули позволяют приложению общаться с внешним миром и структурировать ваш код
3. Существуют 3 источника модулей.
• Встроенные
• Ваши файлы
• Глобальный репозиторий
![Page 15: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/15.jpg)
Что же там внутри? Встроенные Модули
Обеспечивают серверную инфрастуктуру.
Модуль подключается так:
var fs = require(‘fs’);
Примеры модулей:
fs os dgram
http zlib path
crypto dns И т.д.
![Page 16: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/16.jpg)
Что же там внутри? Встроенные Модули
![Page 17: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/17.jpg)
Что же там внутри? Свои файлы
![Page 18: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/18.jpg)
Что же там внутри? Свои файлы
![Page 19: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/19.jpg)
Что же там внутри? Свои файлы
![Page 20: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/20.jpg)
Что же там внутри? Глобальный репозиторий
Node Package Manager (NPM)
https://npmjs.org/
![Page 21: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/21.jpg)
Как выглядит Асинхронность?
Callbacks Events
![Page 22: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/22.jpg)
Асинхронность на практике
![Page 23: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/23.jpg)
Websocket (http://socket.io)
![Page 24: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/24.jpg)
Websocket (сервер)
![Page 25: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/25.jpg)
Websocket (Клиент)
![Page 26: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/26.jpg)
Отладка
• console.log()
• Встроенный assert модуль
![Page 27: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/27.jpg)
Отладка• Mocha – среда для тестов в стиле BDD
(Behavior-driven development)
• Should – расширение для assert
![Page 29: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/29.jpg)
Отладка• IISNode – Хостинг Node.JS под IIS (
https://github.com/tjanczuk/iisnode)
![Page 30: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/30.jpg)
Отладка• IISNode – Хостинг Node.JS под IIS (
https://github.com/tjanczuk/iisnode)
![Page 31: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/31.jpg)
Масштабируемость
Под этим с Node.JS подразумевается
•Запуск дочерних процессов
•Кластер
![Page 32: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/32.jpg)
Масштабируемость
Дочерние процессы
•spawn(command, [args], [options]) - Запускает новый процесс с данной command, с args . options определяют рабочий католог и переменные
![Page 33: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/33.jpg)
Масштабируемость
Дочерние процессы
•exec(command, [args], [options]) - Запускает command в shell и буферезирует вывод.
![Page 34: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/34.jpg)
Масштабируемость
Дочерние процессы
•fork(modulePath, [args], [options]) - специальная версия spawn для организация взаимодействия с child процессами.
![Page 35: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/35.jpg)
Масштабируемость• Кластеры
![Page 36: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/36.jpg)
Заключение
Node.JS это сервер приложений в первую очередь. Отсюда вытекают все приимущества его примерений. Хорош для
•One page Application
•Легковесных REST / JSON интерфейсов
•Сервиса по запуску других приложений
•Высоконагрузочная способность позволяет использовать его для создания игр
![Page 37: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/37.jpg)
Заключение
Не предназначен для
•Хостинга файлов
•Приложения с большими вычислениями и небольшим количеством операций ввода/вывода
•Генератор HTML контента
![Page 38: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/38.jpg)
Заключение
Из экзотических применений.
•Веб парсеры на базе Node.JS позволяют создавать веб пауков для сайтов с Javascript
•Walmart реализовала рендеринг клиентских мобильных приложений на Node.JS
![Page 39: ВВЕДЕНИЕ В NODE.JS](https://reader031.vdocuments.mx/reader031/viewer/2022013111/5499342bb4795923778b45dd/html5/thumbnails/39.jpg)
Пожалуйста, Ваши Вопросы!!!