Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

3,099 views

Published on

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

Published in: Technology
  • Привет! Мы запилили поддержку Node.js на всех тарифных планах виртуального хостинга (не на VDS/VPS и не на облаке, а на shared!) и сейчас очень нуждаемся в обратной связи, а для этого нужно больше живых проектов на Node.js. У всех тарифов есть бесплатный тестовый период: https://sprinthost.ru. Регистрируйтесь, создавайте приложение, присылайте замечания, пожелания и вопросы на support@sprinthost.ru или в группу https://vk.com/sprinthost, мы будем бесконечно благодарны. Что нужно знать: В каталоге с приложением ( ~/domains/example.org/public_html ) создаем файл app.js со следующим содержимым: require('/home/login/domains/example.org/public_html/index.js'); process.chdir('/home/login/domains/example.org/public_html'); Создаем файл .htaccess в этом же каталоге и добавляем в него правило: PassengerStartupFile app.js PassengerResolveSymlinksInDocumentRoot on Require all granted PassengerAppType node PassengerAppRoot /home/login/domains/example.org/public_html Options -MultiViews Для работы приложений у нас используется Phusion Passenger https://www.phusionpassenger.com/#about
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

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

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

×