Upload
pavel-tsukanov
View
2.497
Download
6
Embed Size (px)
DESCRIPTION
Осуществим вводный экскурс в Node.JS. Действительно это что-то новое и гениальное? Что оно может, а что нет? Кому будет полезен? В каких случаях применять, а в каких нет? На все эти вопросы я постараюсь ответить в своём докладе.
Citation preview
О создатель!!!
• Ryan Dahl выпустил
первую версию в 2009 году
• Последняя – v0.8.20
• По сути он не придумал ничего нового он просто объединил идеи и теперь......
• Node.JS не просто новый способ выражения существующих идей, а скорее новый способ мышления о том, как программное обеспечение системы должно быть построено.
Что это?
• Вот формулировка создателя – node.js is a set of bindings to the V8 JavaScript VM
• V8 – Google JavaScript Engine используемый в Chrome.
• Технология 2012 года по версии InfoWorld
• Сайт nodejs.org
Основные идеи
• Выполнение серверного кода в ОДНОМ!!! Потоке
• Асинхронное выполнение операций вводы/вывода
• Серверный JavaScript
• Это было и до Node.JS Но именно Ryan Dahl объединил всё вместе и сделал Node.JS
Немного практики
Проблемы архитектур большинства веб
приложений
result = query(‘select * from T’)
Что происходит во время выполнения этого кода?
Затраты на операции в современных компьютерах
L1: 3 такта
L2: 14 тактов
RAM: 250 циклов
Диск: 41 000 000
Сеть: 240 000 000
Выделение потока на обработку запроса
клиента
• Переключение между контекстами потоков – затратно
• При массивной конкуренции вы не можете выделять поток для каждого запроса. Таким образом все входящие запросы будут ждать.
Как работает Node.JS в качестве сервера?
Clients
Неблокируемый обработчик
(или поток или функция)
Очередь сообщений(Один поток)
Клиенты шлют запросы к серверуКлиенты шлют запросы к серверу
Клиенты шлют запросы к серверуКлиенты шлют запросы к серверу
Запуск длительных операцийЗапуск длительных операций
Результат длительной операции поступают в Очередь сообщений через обратный вызов
Результат длительной операции поступают в Очередь сообщений через обратный вызов
Представляет собой стек команд, выполняемых последовательно в одном потоке.
Представляет собой стек команд, выполняемых последовательно в одном потоке.
И наш запрос превращается в
query(‘select * from T’, function(result)) {
// Используем результат
});
Почему же не используют такие очевидные вещи?
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
});
});
});
Синхронный код:
Асинхронны й код:
Почему же не используют такие очевидные вещи?
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…
});
});
});
});
});
Почему же не используют такие очевидные вещи?
2. Отсутствие инфраструктуры. Большинство библиотек не поддерживают
асинхронность.
Что же там внутри? Модули
1. На модулях основана разрабока в Node.JS
2. Именно модули позволяют приложению общаться с внешним миром и структурировать ваш код
3. Существуют 3 источника модулей.
• Встроенные
• Ваши файлы
• Глобальный репозиторий
Что же там внутри? Встроенные Модули
Обеспечивают серверную инфрастуктуру.
Модуль подключается так:
var fs = require(‘fs’);
Примеры модулей:
fs os dgram
http zlib path
crypto dns И т.д.
Что же там внутри? Встроенные Модули
Что же там внутри? Свои файлы
Что же там внутри? Свои файлы
Что же там внутри? Свои файлы
Что же там внутри? Глобальный репозиторий
Node Package Manager (NPM)
https://npmjs.org/
Как выглядит Асинхронность?
Callbacks Events
Асинхронность на практике
Websocket (http://socket.io)
Websocket (сервер)
Websocket (Клиент)
Отладка
• console.log()
• Встроенный assert модуль
Отладка• Mocha – среда для тестов в стиле BDD
(Behavior-driven development)
• Should – расширение для assert
Отладка• IISNode – Хостинг Node.JS под IIS (
https://github.com/tjanczuk/iisnode)
Отладка• IISNode – Хостинг Node.JS под IIS (
https://github.com/tjanczuk/iisnode)
Масштабируемость
Под этим с Node.JS подразумевается
•Запуск дочерних процессов
•Кластер
Масштабируемость
Дочерние процессы
•spawn(command, [args], [options]) - Запускает новый процесс с данной command, с args . options определяют рабочий католог и переменные
Масштабируемость
Дочерние процессы
•exec(command, [args], [options]) - Запускает command в shell и буферезирует вывод.
Масштабируемость
Дочерние процессы
•fork(modulePath, [args], [options]) - специальная версия spawn для организация взаимодействия с child процессами.
Масштабируемость• Кластеры
Заключение
Node.JS это сервер приложений в первую очередь. Отсюда вытекают все приимущества его примерений. Хорош для
•One page Application
•Легковесных REST / JSON интерфейсов
•Сервиса по запуску других приложений
•Высоконагрузочная способность позволяет использовать его для создания игр
Заключение
Не предназначен для
•Хостинга файлов
•Приложения с большими вычислениями и небольшим количеством операций ввода/вывода
•Генератор HTML контента
Заключение
Из экзотических применений.
•Веб парсеры на базе Node.JS позволяют создавать веб пауков для сайтов с Javascript
•Walmart реализовала рендеринг клиентских мобильных приложений на Node.JS
Пожалуйста, Ваши Вопросы!!!