Семинар по Node.js в КПИ 20 октября 2014. Докладчики: Тимур Шемсединов, Никита Савченко, Максим Петренко. Краткое содержание:
* Что такое Node.js и как работает JavaScript в V8
* Профессионалы расскажут, почему они выбрали Node.js
* Вы узнаете его сильные и слабые стороны и где его лучше применять
* Будет полный обзор особеностей и внутреннего строения Node.js
* Примеры внедрения и Highload-проекты
* Вопросы развертывания, хостинг, тестирования, и отладки
* Где и что учить, что читать, как осваивать
2. От JavaScript никуда не деться
«Всё, что может быть написано на JavaScript,
должно быть написано на нём»
«Any application that can be written in JavaScript,
will eventually be written in JavaScript»
Jeff Atwood
основатель Stack Overflow
3. Основные идеи Node.js
1. Один язык, один формат данных,
одна парадигма, одна архитектура
СУБД
Мобильные
приложения
Сервер
Браузер
Оконные
приложения
JSON
BSON
JavaScript
JavaScript
JavaScript
4. Основные идеи Node.js
2. Долгая жизнь приложений в
оперативной памяти на стороне сервера
• Состояние памяти сохраняется между запросами
• Структуры данных (объекты, модель)
• Соединения с БД и открытые файлы
• Конфигурация и инициализация
• Веб сервер внутри приложения, а не наоборот
• Меньше IPC
5. Основные идеи Node.js
3. Без ввода/вывода еще быстрее,
чем с асинхронным вводом/выводом
• Упреждающее чтение
• Отложенная запись
• Отдача всего из памяти
6. Преимущества JavaScript:
1. Имеет очень низкий порог входа;
2. Высочайшая гибкость;
3. Высокая скорость разработки;
4. Практически идеальный уровень
абстракции;
…
7. Недостатки JavaScript:
1. Имеет очень низкий порог входа;
2. Высочайшая гибкость;
3. Высокая скорость разработки;
4. Практически идеальный уровень
абстракции;
…
8. Особенности JavaScript
Наличие огромного количества особенностей.
Как в синтаксических конструкциях, так и в
логике программ.
“12” + 5 === “125”
Но…
“12” - 5 === 7
[] + [] === “”
[] + {} === “[object Object]”
{} + [] === 0
isNaN({} + {}) === true
10. Что такое NodeJS
• Open Source JavaScript-движок V8 от Google;
• Обёртка и библиотеки на JavaScript;
• libuv;
• Оболочка, написанная на C++.
11. Google V8
• Разработка Google, исходный код которой был
открыт в 2008 году;
• Самый оптимальный JavaScript-движок на
сегодняшний день;
• Основа браузеров Google Chrome и Chromium.
12. Преимущества V8
• Базовый и оптимизирующий компилятор;
• Компиляция JavaScript-кода непосредственно в
машинный код, без промежуточного байт-кода;
• Эффективная система управления памятью;
• Введение скрытых классов и встроенных кэшей,
ускоряющих доступ к свойствам и вызовы
функций.
13. Начало работы с NodeJS
1. Установка дистрибутива с nodejs.org;
2. Создание *.js файлов;
3. Запуск программ: $ node *.js;
19. Однопоточность и многопоточность
• Что дает однопоточность?
• Действительно ли 1 процесс = 1 поток?
• Как нагрузить все ядра?
• cluster = require('cluster')
• npm install webworker-threads
• самостоятельно делаем IPC
25. Отладка
• Через node-inspector
• Выводом в консоль console.log(); или в лог
• Если ошибку не видно
• node --stack-trace-limit=1000 application.js
• Может понадобиться фильтр
27. Обновление кода и перезапуск
• Наблюдение за процессом forever
npm install forever -g
forever start --spinSleepTime 10000 application.js
• Наблюдение за файлами
http://livereload.com/
http://habrahabr.ru/post/168091/
28. Callback’и и вложенность
Пример запроса:
request('http://www.google.com/api',
function (error, response, body) {
var googleData = JSON.parse(body);
...
}
);
29. Callback’и и вложенность
request('http://www.google.com/api',
function (gError, gResponse, gBody) {
request('http://www.yandex.com/api',
function (yError, yResponse, yBody) {
request('http://www.twitter.com/api',
function (tError, tResponse, tBody)
{
...
}
...
30. Callback’и: Библиотека async
async.parallel([
function(){ ... },
function(){ ... }
], callback);
Другие методы: series, parallel, whilst, until,
waterfall, compose, queue, cargo, retry, each, map,
reduce, detect, every ...
61. Жизненный цикл проекта
• Юниттесты и интеграционные тесты
• Continuous Integration (CI)
• Travis-CI
• drone.io
• Развертывание среды
• vagrant
• docker
62. Сферы применения node.js
Часто применяется для:
• cервера веб-приложений и SPA
• сервера мобильных приложений
• системы сборки для фронт-энда
• чаты, меседжинг
• игровые сервера
• как заплатка к ПО на других технологиях
• парсеры, кравлеры
63. Сферы применения node.js
Реже применяется для:
• оконные приложения: node-webkit
• приложения баз данных и корпоративные
• промышленная автоматизация и программирование
микроконтроллеров (arduino, espruino, tessel)
• обработка и трансляция видео и звука
64. Сферы применения node.js
Редко применяется (но подходит) для:
• CMS, публикация контента
• электронная коммерция и торговля
И плохо подходит:
• вычисления и моделирование
• научные приложения