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

Preview:

DESCRIPTION

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

Citation preview

Цуканов Павелptsukanov@codereign.netSkype: cpp.tula

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

• 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

Отладка

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

Отладка• 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

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