39
Цуканов Павел [email protected] et Skype: cpp.tula

ВВЕДЕНИЕ В NODE.JS

Embed Size (px)

DESCRIPTION

Осуществим вводный экскурс в Node.JS. Действительно это что-то новое и гениальное? Что оно может, а что нет? Кому будет полезен? В каких случаях применять, а в каких нет? На все эти вопросы я постараюсь ответить в своём докладе.

Citation preview

Page 2: ВВЕДЕНИЕ В NODE.JS

О создатель!!!

• Ryan Dahl выпустил

первую версию в 2009 году

• Последняя – v0.8.20

• По сути он не придумал ничего нового он просто объединил идеи и теперь......

• Node.JS не просто новый способ выражения существующих идей, а скорее новый способ мышления о том, как программное обеспечение системы должно быть построено.

Page 3: ВВЕДЕНИЕ В NODE.JS

Что это?

• Вот формулировка создателя – 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

Основные идеи

• Выполнение серверного кода в ОДНОМ!!! Потоке

• Асинхронное выполнение операций вводы/вывода

• Серверный JavaScript

• Это было и до Node.JS Но именно Ryan Dahl объединил всё вместе и сделал Node.JS

Page 5: ВВЕДЕНИЕ В NODE.JS

Немного практики

Page 6: ВВЕДЕНИЕ В NODE.JS

Проблемы архитектур большинства веб

приложений

result = query(‘select * from T’)

Что происходит во время выполнения этого кода?

Page 7: ВВЕДЕНИЕ В NODE.JS

Затраты на операции в современных компьютерах

L1: 3 такта

L2: 14 тактов

RAM: 250 циклов

Диск: 41 000 000

Сеть: 240 000 000

Page 8: ВВЕДЕНИЕ В NODE.JS

Выделение потока на обработку запроса

клиента

• Переключение между контекстами потоков – затратно

• При массивной конкуренции вы не можете выделять поток для каждого запроса. Таким образом все входящие запросы будут ждать.

Page 9: ВВЕДЕНИЕ В NODE.JS

Как работает Node.JS в качестве сервера?

Clients

Неблокируемый обработчик

(или поток или функция)

Очередь сообщений(Один поток)

Клиенты шлют запросы к серверуКлиенты шлют запросы к серверу

Клиенты шлют запросы к серверуКлиенты шлют запросы к серверу

Запуск длительных операцийЗапуск длительных операций

Результат длительной операции поступают в Очередь сообщений через обратный вызов

Результат длительной операции поступают в Очередь сообщений через обратный вызов

Представляет собой стек команд, выполняемых последовательно в одном потоке.

Представляет собой стек команд, выполняемых последовательно в одном потоке.

Page 10: ВВЕДЕНИЕ В NODE.JS

И наш запрос превращается в

query(‘select * from T’, function(result)) {

// Используем результат

});

Page 11: ВВЕДЕНИЕ В NODE.JS

Почему же не используют такие очевидные вещи?

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

Почему же не используют такие очевидные вещи?

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

Почему же не используют такие очевидные вещи?

2. Отсутствие инфраструктуры. Большинство библиотек не поддерживают

асинхронность.

Page 14: ВВЕДЕНИЕ В NODE.JS

Что же там внутри? Модули

1. На модулях основана разрабока в Node.JS

2. Именно модули позволяют приложению общаться с внешним миром и структурировать ваш код

3. Существуют 3 источника модулей.

• Встроенные

• Ваши файлы

• Глобальный репозиторий

Page 15: ВВЕДЕНИЕ В NODE.JS

Что же там внутри? Встроенные Модули

Обеспечивают серверную инфрастуктуру.

Модуль подключается так:

var fs = require(‘fs’);

Примеры модулей:

fs os dgram

http zlib path

crypto dns И т.д.

Page 16: ВВЕДЕНИЕ В NODE.JS

Что же там внутри? Встроенные Модули

Page 17: ВВЕДЕНИЕ В NODE.JS

Что же там внутри? Свои файлы

Page 18: ВВЕДЕНИЕ В NODE.JS

Что же там внутри? Свои файлы

Page 19: ВВЕДЕНИЕ В NODE.JS

Что же там внутри? Свои файлы

Page 20: ВВЕДЕНИЕ В NODE.JS

Что же там внутри? Глобальный репозиторий

Node Package Manager (NPM)

https://npmjs.org/

Page 21: ВВЕДЕНИЕ В NODE.JS

Как выглядит Асинхронность?

Callbacks Events

Page 22: ВВЕДЕНИЕ В NODE.JS

Асинхронность на практике

Page 23: ВВЕДЕНИЕ В NODE.JS

Websocket (http://socket.io)

Page 24: ВВЕДЕНИЕ В NODE.JS

Websocket (сервер)

Page 25: ВВЕДЕНИЕ В NODE.JS

Websocket (Клиент)

Page 26: ВВЕДЕНИЕ В NODE.JS

Отладка

• console.log()

• Встроенный assert модуль

Page 27: ВВЕДЕНИЕ В NODE.JS

Отладка• Mocha – среда для тестов в стиле BDD

(Behavior-driven development)

• Should – расширение для assert

Page 28: ВВЕДЕНИЕ В NODE.JS

Отладка

• Cloud9 – среда для разработки https://c9.io

Page 29: ВВЕДЕНИЕ В NODE.JS

Отладка• IISNode – Хостинг Node.JS под IIS (

https://github.com/tjanczuk/iisnode)

Page 30: ВВЕДЕНИЕ В NODE.JS

Отладка• IISNode – Хостинг Node.JS под IIS (

https://github.com/tjanczuk/iisnode)

Page 31: ВВЕДЕНИЕ В NODE.JS

Масштабируемость

Под этим с Node.JS подразумевается

•Запуск дочерних процессов

•Кластер

Page 32: ВВЕДЕНИЕ В NODE.JS

Масштабируемость

Дочерние процессы

•spawn(command, [args], [options]) - Запускает новый процесс с данной command, с args . options определяют рабочий католог и переменные

Page 33: ВВЕДЕНИЕ В NODE.JS

Масштабируемость

Дочерние процессы

•exec(command, [args], [options]) - Запускает command в shell и буферезирует вывод.

Page 34: ВВЕДЕНИЕ В NODE.JS

Масштабируемость

Дочерние процессы

•fork(modulePath, [args], [options]) - специальная версия spawn для организация взаимодействия с child процессами.

Page 35: ВВЕДЕНИЕ В NODE.JS

Масштабируемость• Кластеры

Page 36: ВВЕДЕНИЕ В NODE.JS

Заключение

Node.JS это сервер приложений в первую очередь. Отсюда вытекают все приимущества его примерений. Хорош для

•One page Application

•Легковесных REST / JSON интерфейсов

•Сервиса по запуску других приложений

•Высоконагрузочная способность позволяет использовать его для создания игр

Page 37: ВВЕДЕНИЕ В NODE.JS

Заключение

Не предназначен для

•Хостинга файлов

•Приложения с большими вычислениями и небольшим количеством операций ввода/вывода

•Генератор HTML контента

Page 38: ВВЕДЕНИЕ В NODE.JS

Заключение

Из экзотических применений.

•Веб парсеры на базе Node.JS позволяют создавать веб пауков для сайтов с Javascript

•Walmart реализовала рендеринг клиентских мобильных приложений на Node.JS

Page 39: ВВЕДЕНИЕ В NODE.JS

Пожалуйста, Ваши Вопросы!!!