• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Node.js для начинающих
 

Node.js для начинающих

on

  • 1,789 views

 

Statistics

Views

Total Views
1,789
Views on SlideShare
1,461
Embed Views
328

Actions

Likes
3
Downloads
11
Comments
1

2 Embeds 328

http://localhost 323
http://shuttle1 5

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

11 of 1 previous next

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Node.js для начинающих Node.js для начинающих Presentation Transcript

    • http://serenity.suсреда, 29 августа 12 г.
    • http://serenity.su Немного о себе: • Работаю в интернете более 12 лет • Сейчас директор по технологиям в Serenity • Активно эксперементирую с HTML5/JavaScript • simonenko.su • github.com/merittсреда, 29 августа 12 г.
    • http://serenity.su NODE.JS ЭТО ПЛАТФОРМА ДЛЯ СОЗДАНИЯ ЛЕГКО МАСШТАБИРУЕМЫХ СЕТЕВЫХ ПРИЛОЖЕНИЙ 3среда, 29 августа 12 г.
    • http://serenity.su НАЧАТЬ ЛЕГКО • Работает везде: Windows, OS X, Linux • Устанавливается как обычное приложение • Для начала работы не нужен сервер • Для работы подойдет любой текстовый редактор • Достаточно знать 1 язык для сервера и клиента http://nodejs.org/#downloadсреда, 29 августа 12 г.
    • http://serenity.su ЧТО ТАКОЕ NODE.JS? • Построен на JavaScript движке браузера Google Chrome V8 5среда, 29 августа 12 г.
    • http://serenity.su ЧТО ТАКОЕ NODE.JS? • Построен на JavaScript движке браузера Google Chrome V8 • Event-driven, non-blocking I/O, streams 5среда, 29 августа 12 г.
    • http://serenity.su ЧТО ТАКОЕ NODE.JS? • Построен на JavaScript движке браузера Google Chrome V8 • Event-driven, non-blocking I/O, streams • Реализация самых важных протоколов (HTTP, DNS, TLS/SSL) 5среда, 29 августа 12 г.
    • http://serenity.su ЧТО ТАКОЕ NODE.JS? • Построен на JavaScript движке браузера Google Chrome V8 • Event-driven, non-blocking I/O, streams • Реализация самых важных протоколов (HTTP, DNS, TLS/SSL) • Node Package Manager (npm) — уже более 9000 модулей 5среда, 29 августа 12 г.
    • http://serenity.su ПРИМЕР “HELLO WORLD” var http = require(http); var server = http.createServer(function(request, response) { response.writeHead(200, {Content-Type: text/plain}); response.end(Hello World); }); server.listen(3000); console.log(Server running at http://127.0.0.1:3000);среда, 29 августа 12 г.
    • http://serenity.su РЕЗУЛЬТАТ $ node server.js Server running at http://127.0.0.1:3000 7среда, 29 августа 12 г.
    • http://serenity.su СРАВНИМ NODE.JS И PHP • Для сравнения возьмем сайты digitalconf.ru и htmlacademy.ru • Оба сайта расположены на одинаковом выделенном хостинге • $ ab -c 10 -n 1000 http://digitalconf.ru/ • Для node.js используем: nginx, nodejs, express • Для php используем: apache, php, zend framework 8среда, 29 августа 12 г.
    • http://serenity.su РЕЗУЛЬТАТЫ ab -c 10 -n 1000 digitalconf.ru 203 htmlacademy.ru 25 0 55 110 165 220 Requests per second 9среда, 29 августа 12 г.
    • http://serenity.su ПОЧЕМУ ТАК БЫСТРО!?среда, 29 августа 12 г.
    • http://serenity.su ОДНОПОТОЧНЫЙ СИНХРОННЫЙ I/Oсреда, 29 августа 12 г.
    • http://serenity.su МУЛЬТИПОТОЧНЫЙ СИНХРОННЫЙ I/Oсреда, 29 августа 12 г.
    • http://serenity.su МУЛЬТИПОТОЧНЫЙ СИНХРОННЫЙ I/Oсреда, 29 августа 12 г.
    • http://serenity.su Всегда можно купить еще несколько серверов, но это стоит денег.среда, 29 августа 12 г.
    • http://serenity.su ОДНОПОТОЧНЫЙ АСИНХРОННЫЙ I/Oсреда, 29 августа 12 г.
    • http://serenity.su ПРОБЛЕМА NODE.JS В CPU ВЫЧИСЛЕНИЯХсреда, 29 августа 12 г.
    • http://serenity.su COMMONJS И СИСТЕМА МОДУЛЕЙсреда, 29 августа 12 г.
    • http://serenity.su ПРИМЕР РАБОТЫ МОДУЛЕЙ // hello.js exports.world = function(text) { return Hello + text + !; }; // server.js var http = require(http); var hello = require(./hello); var server = http.createServer(function(request, response) { response.writeHead(200, {Content-Type: text/plain}); response.end(hello.world(ITMO)); }); server.listen(3000); console.log(Server running at http://127.0.0.1:3000);среда, 29 августа 12 г.
    • http://serenity.su РЕЗУЛЬТАТ $ node server.js Server running at http://127.0.0.1:3000 19среда, 29 августа 12 г.
    • http://serenity.su NPM NODE PACKAGE MANAGERсреда, 29 августа 12 г.
    • http://serenity.su МОДУЛИ О КОТОРЫХ СТОИТ ЗНАТЬ • express — sinatra inspired web development framework • mustache — logic-less {{mustache}} templates with JavaScript • socket.io — real-time apps made cross-browser & easy with a WebSocket-like API • request — simplified HTTP request client • async — higher-order functions and common patterns for asynchronous codeсреда, 29 августа 12 г.
    • http://serenity.su КАК УСТАНОВИТЬ? $ npm install express express@2.5.9 ./node_modules/express !"" qs@0.4.2 !"" mime@1.2.4 !"" mkdirp@0.3.0 #"" connect@1.8.7 (formidable@1.0.9)среда, 29 августа 12 г.
    • http://serenity.su ПРИМЕР “HELLO WORLD” НА EXPRESS var express = require(express); var server = express.createServer(); server.get(/, function(request, response) { response.send(Hello Express World); }); server.listen(3000); console.log(Server running at http://127.0.0.1:3000);среда, 29 августа 12 г.
    • http://serenity.su РЕЗУЛЬТАТ $ node server.js Server running at http://127.0.0.1:3000 24среда, 29 августа 12 г.
    • http://serenity.su ПОПРОБУЕМ УСЛОЖНИТЬсреда, 29 августа 12 г.
    • http://serenity.su ПРИМЕР РАБОТЫ С ПАРАМЕТРАМИ var express = require(express); var server = express.createServer(); server.get(/, function(request, response) { response.redirect(/alexey); }); server.get(/:name, function(request, response) { response.send(Hello + request.params.name + !); }); server.listen(3000); console.log(Server running at http://127.0.0.1:3000);среда, 29 августа 12 г.
    • http://serenity.su РЕЗУЛЬТАТ $ node server.js Server running at http://127.0.0.1:3000 27среда, 29 августа 12 г.
    • http://serenity.su ТИПИЧНЫЕ ПРОБЛЕМЫсреда, 29 августа 12 г.
    • http://serenity.su СОХРАНЕНИЕ ОКРУЖЕНИЯ var animals = {cats: 10, dogs: 1, frogs: 6, turtles: 17}; for (animal in animals) { setTimeout(function() { console.log(animal + : + animals[animal]); }, 100); }среда, 29 августа 12 г.
    • http://serenity.su СОХРАНЕНИЕ ОКРУЖЕНИЯ var animals = {cats: 10, dogs: 1, frogs: 6, turtles: 17}; for (animal in animals) { setTimeout(function() { $ node example.js console.log(animal + : + animals[animal]); }, 100); turtles: 17 } turtles: 17 turtles: 17 turtles: 17среда, 29 августа 12 г.
    • http://serenity.su СОХРАНЕНИЕ ОКРУЖЕНИЯ var animals = {cats: 10, dogs: 1, frogs: 6, turtles: 17}; bad way for (animal in animals) { setTimeout(function() { $ node example.js console.log(animal + : + animals[animal]); }, 100); turtles: 17 } turtles: 17 turtles: 17 turtles: 17среда, 29 августа 12 г.
    • http://serenity.su СОХРАНЕНИЕ ОКРУЖЕНИЯ var animals = {cats: 10, dogs: 1, frogs: 6, turtles: 17}; for (animal in animals) { (function(animal) { setTimeout(function() { console.log(animal + : + animals[animal]); }, 100); })(animal); }среда, 29 августа 12 г.
    • http://serenity.su СОХРАНЕНИЕ ОКРУЖЕНИЯ var animals = {cats: 10, dogs: 1, frogs: 6, turtles: 17}; for (animal in animals) { (function(animal) { setTimeout(function() { $ node example.js cats: 10 console.log(animal + : + animals[animal]); }, 100); dogs: 1 })(animal); frogs: 6 } turtles: 17среда, 29 августа 12 г.
    • http://serenity.su СОХРАНЕНИЕ ОКРУЖЕНИЯ var animals = {cats: 10, dogs: 1, frogs: 6, turtles: 17}; good way for (animal in animals) { (function(animal) { setTimeout(function() { $ node example.js cats: 10 console.log(animal + : + animals[animal]); }, 100); dogs: 1 })(animal); frogs: 6 } turtles: 17среда, 29 августа 12 г.
    • http://serenity.su БЛОКИРОВКИ var fs = require(fs); function content() { var results = []; var files = [1, 2, 3, 4, 5]; for (var i=0; i<files.length; i++) { var file = files[i] + .txt; fs.readFile(file, utf-8, function(error, data) { results.push(data for + file + file); }); } return results; } var results = content(); console.log(results);среда, 29 августа 12 г.
    • http://serenity.su БЛОКИРОВКИ var fs = require(fs); function content() { var results = []; var files = [1, 2, 3, 4, 5]; for (var i=0; i<files.length; i++) { var file = files[i] + .txt; fs.readFile(file, utf-8, function(error, data) { results.push(data for + file + file); $ node example.js }); } [] return results; } var results = content(); console.log(results);среда, 29 августа 12 г.
    • http://serenity.su БЛОКИРОВКИ var fs = require(fs); function content() { var results = []; var files = [1, 2, 3, 4, 5]; bad way for (var i=0; i<files.length; i++) { var file = files[i] + .txt; fs.readFile(file, utf-8, function(error, data) { results.push(data for + file + file); $ node example.js }); } [] return results; } var results = content(); console.log(results);среда, 29 августа 12 г.
    • http://serenity.su БЛОКИРОВКИ var fs = require(fs); function content(callback) { var results = []; var files = [1, 2, 3, 4, 5]; for (var i=0; i<files.length; i++) { var file = files[i] + .txt; (function(file) { fs.readFile(file, utf-8, function(error, data) { results.push(data for + file + file); if (results.length == files.length) callback(results); }); })(file); } } content(function(results) { console.log(results); });среда, 29 августа 12 г.
    • http://serenity.su БЛОКИРОВКИ var fs = require(fs); function content(callback) { var results = []; var files = [1, 2, 3, 4, 5]; for (var i=0; i<files.length; i++) { var file = files[i] + .txt; (function(file) { $ node example.js fs.readFile(file, utf-8, function(error, data) { [ data for 2.txt, results.push(data for + file + file); data for 4.txt, if (results.length == files.length) callback(results); }); data for 1.txt, })(file); data for 5.txt, } } data for 3.txt ] content(function(results) { console.log(results); });среда, 29 августа 12 г.
    • http://serenity.su БЛОКИРОВКИ var fs = require(fs); function content(callback) { var results = []; var files = [1, 2, 3, 4, 5]; for (var i=0; i<files.length; i++) { good way var file = files[i] + .txt; (function(file) { $ node example.js fs.readFile(file, utf-8, function(error, data) { [ data for 2.txt, results.push(data for + file + file); data for 4.txt, if (results.length == files.length) callback(results); }); data for 1.txt, })(file); data for 5.txt, } } data for 3.txt ] content(function(results) { console.log(results); });среда, 29 августа 12 г.
    • http://serenity.su СПАГЕТТИ-КОД var fs = require(fs); var results = [start]; fs.readFile(alpha.txt, utf-8, function(error, data) { results.push(data for alpha.txt); fs.readFile(beta.txt, utf-8, function(error, data) { results.push(data for beta.txt); fs.readFile(gamma.txt, utf-8, function(error, data) { results.push(data for gamma.txt); console.log(results); }); }); });среда, 29 августа 12 г.
    • http://serenity.su СПАГЕТТИ-КОД var fs = require(fs); var results = [start]; fs.readFile(alpha.txt, utf-8, function(error, data) { results.push(data for alpha.txt); $ node example.js fs.readFile(beta.txt, utf-8, function(error, data) { results.push(data for beta.txt); [ start, data for alpha.txt, fs.readFile(gamma.txt, utf-8, function(error, data) { results.push(data for gamma.txt); data for beta.txt, data for gamma.txt ] console.log(results); }); }); });среда, 29 августа 12 г.
    • http://serenity.su СПАГЕТТИ-КОД var fs = require(fs); var results = [start]; fs.readFile(alpha.txt, utf-8, function(error, data) { bad way results.push(data for alpha.txt); $ node example.js fs.readFile(beta.txt, utf-8, function(error, data) { results.push(data for beta.txt); [ start, data for alpha.txt, fs.readFile(gamma.txt, utf-8, function(error, data) { results.push(data for gamma.txt); data for beta.txt, data for gamma.txt ] console.log(results); }); }); });среда, 29 августа 12 г.
    • http://serenity.su СПАГЕТТИ-КОД var fs = require(fs); function alpha(results, callback) { fs.readFile(alpha.txt, utf-8, function(error, data) { results.push(data for alpha.txt); beta(results, callback); }); } function beta(results, callback) { fs.readFile(beta.txt, utf-8, function(error, data) { results.push(data for beta.txt); gamma(results, callback); }); } function gamma(results, callback) { fs.readFile(gamma.txt, utf-8, function(error, data) { results.push(data for gamma.txt); callback(results); }); } alpha([start], function(results) { console.log(results); });среда, 29 августа 12 г.
    • http://serenity.su СПАГЕТТИ-КОД var fs = require(fs); function alpha(results, callback) { fs.readFile(alpha.txt, utf-8, function(error, data) { results.push(data for alpha.txt); beta(results, callback); }); } function beta(results, callback) { fs.readFile(beta.txt, utf-8, function(error, data) { $ node example.js results.push(data for beta.txt); gamma(results, callback); [ start, } }); data for alpha.txt, function gamma(results, callback) { data for beta.txt, fs.readFile(gamma.txt, utf-8, function(error, data) { results.push(data for gamma.txt); data for gamma.txt ] callback(results); }); } alpha([start], function(results) { console.log(results); });среда, 29 августа 12 г.
    • http://serenity.su СПАГЕТТИ-КОД var fs = require(fs); function alpha(results, callback) { fs.readFile(alpha.txt, utf-8, function(error, data) { results.push(data for alpha.txt); beta(results, callback); }); } good way function beta(results, callback) { fs.readFile(beta.txt, utf-8, function(error, data) { results.push(data for beta.txt); gamma(results, callback); }); $ node example.js [ start, data for alpha.txt, } function gamma(results, callback) { data for beta.txt, fs.readFile(gamma.txt, utf-8, function(error, data) { results.push(data for gamma.txt); data for gamma.txt ] callback(results); }); } alpha([start], function(results) { console.log(results); });среда, 29 августа 12 г.
    • http://serenity.su ОРГАНИЗУЕМ TWITTER КОНФЕРЕНЦИЮ? подробнее: http://j.mp/twitter-confсреда, 29 августа 12 г.
    • http://serenity.su ЗАДАЧИ • Получать сообщения из twitter как только они написаны • Отображать сообщения из twitter в браузере моментально • Работать без перезагрузки • Держать большие нагрузки подробнее: http://j.mp/twitter-confсреда, 29 августа 12 г.
    • http://serenity.su ЧТО ИСПОЛЬЗОВАТЬ? WebSockets (HTML5) Twitter Streaming API с помощью socket.io с помощью http streaming подробнее: http://j.mp/twitter-confсреда, 29 августа 12 г.
    • http://serenity.su СХЕМА РАБОТЫ Node.JS Twitter WebSockets Streaming API подробнее: http://j.mp/twitter-confсреда, 29 августа 12 г.
    • http://serenity.su ПОЛУЧАЕМ СООБЩЕНИЯ ИЗ TWITTER var https = require(https); var message = ; var options = { host: stream.twitter.com, path: /1/statuses/filter.json?track=iphone }; https.get(options, function(response) { response.setEncoding(utf8); response.on(data, function(chunk) { message += chunk; newline = message.indexOf("r"); if (newline !== -1) { tweet = message.slice(0, newline); } message = message.slice(newline + 1); }); });среда, 29 августа 12 г.
    • http://serenity.su ОТПРАВЛЯЕМ СООБЩЕНИЯ ЧЕРЕЗ WEBSOCKETS ... ... https.get(options, function(response) { var clients = []; ... var io = require(socket.io).listen(8080); tweet = message.slice(0, newline); io.sockets.on(connection, function(socket) { clients.forEach(function(client) { clients.push(socket); client.send(tweet); }); }); ... ... });среда, 29 августа 12 г.
    • http://serenity.su ДЕМО подробнее: http://j.mp/twitter-confсреда, 29 августа 12 г.
    • http://serenity.su Спасибо! Алексей Симоненко директор по технологиям http://simonenko.su alexey@simonenko.suсреда, 29 августа 12 г.
    • КОНТАКТЫ на http://serenity.su СЛЕДИТЕ ЗА НАМИ vk.com/serenity_su twitter.com/serenity_su facebook.com/serenity.suсреда, 29 августа 12 г.