SlideShare une entreprise Scribd logo
1  sur  210
Télécharger pour lire hors ligne
@floatdrop
bit.ly/nodejs-­‐‑shri
Node.JS
History
bit.ly/crcfd
 

1987
1
2 on mouseUp
3
get the selection
4
if it is empty then as "Dial what number?"
5
if it is not empty then
6
push this card
7
visual effect zoom open
8
go to stack "Phone"
9
dial it
10
pop card
11
end if
12 end mouseUp
13

1987
1995
Расчитан  на  обработку  событий

1995
Расчитан  на  обработку  событий
Был  написан  за  

1995

  дней
Расчитан  на  обработку  событий
Был  написан  за  

10  дней

1995
Расчитан  на  обработку  событий

10

Был  написан  за  
  дней
Function  as  first-­‐‑class  objects

1995
Расчитан  на  обработку  событий

10

Был  написан  за  
  дней
Function  as  first-­‐‑class  objects
Прототипное  наследование  из  Self

1995
2005
2005
AJAX
2005
2009
Node.JS
JavaScript  on  server

2009
Apache  +  PHP  =  ❤
Apache  +  PHP  =  ❤
index.php
1
2
3
4
5
6
7
8
9

$result = mysqli_query( $con,
"SELECT * FROM Persons");
while($row = mysqli_fetch_array($result)) {
echo $row['Name']."n";
}
file_put_contents("access.log",
"Request done")
Single-­‐‑thread  server

Pictures  from  node-­‐‑explained
Single-­‐‑thread  server

Pictures  from  node-­‐‑explained
Single-­‐‑thread  server

Pictures  from  node-­‐‑explained
Single-­‐‑thread  server

Pictures  from  node-­‐‑explained
Single-­‐‑thread  server

Pictures  from  node-­‐‑explained
Multi-­‐‑thread  server
 

  
Ryan  Dahl
  

  
Ryan  Dahl
  

I/O  has  to  be  done  differently.
We  are  doing  it  wrong
  
Ryan  Dahl
  

I/O  has  to  be  done  differently.
We  are  doing  it  wrong
  

bit.ly/jsconf-­‐‑node
event-­‐‑loop  сервер
event-­‐‑loop  сервер
event-­‐‑loop  сервер
event-­‐‑loop  сервер
event-­‐‑loop  сервер
event-­‐‑loop  сервер
event-­‐‑loop  сервер
event-­‐‑loop  server
bit.ly/bombanulo
event-­‐‑loop  server
goes  wrong
JavaScript  is  slow

bit.ly/bombanulo-­‐‑2
"ʺSimple"ʺ  benchmark

bit.ly/dumb-­‐‑test
Installing

nodejs.org/download
Running
Running
Running
Running
windows
window
document
document
global
global
global
process
process
process
Modules
require('ʹantigravity'ʹ)
module.js
1
2
3
4
5

function HelloWorld () {
console.log('Hello world');
}
console.log('Module loaded');
index.js
1

require('./module');
index.js
1
2
3

require('./module');
HelloWorld();
module.js
1
2
3
4
5
6
7

function HelloWorld () {
console.log('Hello world');
}
console.log('Module loaded');
exports.HelloWorld = HelloWorld;
index.js
1
2
3

var module = require('./module');
module.HelloWorld();
module.js
1
2
3
4
5
6
7

function HelloWorld () {
console.log('Hello world');
}
console.log('Module loaded');
global.HelloWorld = HelloWorld;
index.js
1
2
3

require('./module');
HelloWorld();
exports  vs  module.exports
exports  vs  module.exports
russian.js
1
2
3
4
5
6

var en_translation = {
yes: 'Нет',
no: 'Да'
};
exports = en_translation;
exports  vs  module.exports
russian.js
1
2
3
4
5
6

var en_translation = {
yes: 'Да',
no: 'Нет'
};
module.exports = en_translation;
exports  vs  module.exports
russian.json
{
"yes": "да",
"no": "нет"
}
requrie('ʹ./directory'ʹ)
requrie('ʹ./directory'ʹ)
3.   require('ʹ./directory/index.json'ʹ)
requrie('ʹ./directory'ʹ)
3.   require('ʹ./directory/index.json'ʹ)
2.   require('ʹ./directory/index.js'ʹ)
requrie('ʹ./directory'ʹ)
3.   require('ʹ./directory/index.json'ʹ)
2.   require('ʹ./directory/index.js'ʹ)
1.   require('ʹ./directory/'ʹ  +
require('ʹ./directory/package.json'ʹ).main);
require('http')
require('express')
require('./index.js')
require('./config.json')
require('./module') // Directory
Simple  web-­‐‑server
Simple  web-­‐‑server
Simple  web-­‐‑server
Simple  web-­‐‑server
Simple  web-­‐‑server
Simple  web-­‐‑server
index.js
1
2
3
4
5
6
7
8
9

var http = require('http');
function helloService(request, response) {
response.end("Hello, stranger!");
}
var server = http.createServer(helloService);
module.exports = server;
Run,  Forest,  Run!
Run,  Forest,  Run!
Run,  Forest,  Run!
Run,  Forest,  Run!
Simple  web-­‐‑server
node_modules
Run,  Forest,  Run!
Run,  Forest,  Run!
Run,  Forest,  Run!
Run,  Forest,  Run!
require("ʺantigravity"ʺ)
in  /home/user/programm/library/index.js
require("ʺantigravity"ʺ)
in  /home/user/programm/library/index.js
1.   /home/user/programm/library/node_modules/antigravity
require("ʺantigravity"ʺ)
in  /home/user/programm/library/index.js
1.   /home/user/programm/library/node_modules/antigravity
2.   /home/user/programm/node_modules/antigravity
require("ʺantigravity"ʺ)
in  /home/user/programm/library/index.js
1.   /home/user/programm/library/node_modules/antigravity
2.   /home/user/programm/node_modules/antigravity
3.   /home/user/node_modules/antigravity
require("ʺantigravity"ʺ)
in  /home/user/programm/library/index.js
1.   /home/user/programm/library/node_modules/antigravity
2.   /home/user/programm/node_modules/antigravity
3.   /home/user/node_modules/antigravity
4.   /home/node_modules/antigravity
require("ʺantigravity"ʺ)
in  /home/user/programm/library/index.js
1.   /home/user/programm/library/node_modules/antigravity
2.   /home/user/programm/node_modules/antigravity
3.   /home/user/node_modules/antigravity
4.   /home/node_modules/antigravity
5.   /node_modules/antigravity
require("ʺantigravity"ʺ)
in  /home/user/programm/library/index.js
1.   /home/user/programm/library/node_modules/antigravity
2.   /home/user/programm/node_modules/antigravity
3.   /home/user/node_modules/antigravity
4.   /home/node_modules/antigravity
5.   /node_modules/antigravity
NODE_PATH
require("ʺantigravity"ʺ)
in  /home/user/programm/library/index.js
1.   /home/user/programm/library/node_modules/antigravity
2.   /home/user/programm/node_modules/antigravity
3.   /home/user/node_modules/antigravity
4.   /home/node_modules/antigravity
5.   /node_modules/antigravity
NODE_PATH
$HOME/.node_modules,  $HOME/.node_libraries,  $PREFIX/lib/node
node_modules/antigravity.js
1

module.exports = new Date();

index.js
1

console.log(require("antigravity"));
node_modules/antigravity.js
1
2
3

console.log(module);
module.exports = new Date();
Circular  dependencies
Circular  dependencies
a.js
1
2

var b = require('./b.js');
console.log("B: ", b);

b.js
1
2

var a = require('./a.js');
console.log("A: ", a);
Circular  dependencies
a.js
1
2
3
4

module.exports.hello = "Hello from A";
var b = require('./b.js');
module.exports.helloFromB = b.hello;
console.log("B: ", b);

b.js
1
2
3
4

module.exports.hello = "Hello from B";
var a = require('./a.js');
module.exports.helloFromA = a.hello;
console.log("A: ", a);
modulecounts.com
Installing  module
Installing  module
Installing  module
Installing  module
Installing  module
Nested  dependencies
pros  /  cons
Nested  dependencies
pros  /  cons
+  Version  independent
Nested  dependencies
pros  /  cons
+  Version  independent
-­‐‑  Wieght  more
package.json
{

}

"name": "express",
"version": "3.4.4",
"dependencies": {
"connect": "2.11.0", "commander": "1.3.2", "range-parser
},
"devDependencies": {
"ejs": "*", "mocha": "*", "jade": "0.30.0", "hjs": "*", "
},
"main": "index",
"bin": {
"express": "./bin/express"
},
"scripts": {
"prepublish": "npm prune",
"test": "make test"
},
"engines": {
"node": "*"
}
Express  application
var express = require('express');
var app = express();
app.get('/', function(req, res) { res.end('Hello!'); });
app.listen(3000);
Event  loop
bit.ly/kantor-­‐‑node
joyent/node  -­‐‑  node.cc
joyent/node  -­‐‑  env-­‐‑inl.h
joyent/node  -­‐‑  env-­‐‑inl.h
joyent/libuv  -­‐‑  loop.c
joyent/libuv  -­‐‑  loop.c
1 static int uv__loop_init(uv_loop_t* loop, int default_loop) {
2
// ...
3
RB_INIT(&loop->timer_handles);
4
QUEUE_INIT(&loop->wq);
5
QUEUE_INIT(&loop->active_reqs);
6
QUEUE_INIT(&loop->idle_handles);
7
QUEUE_INIT(&loop->async_handles);
8
QUEUE_INIT(&loop->check_handles);
9
QUEUE_INIT(&loop->prepare_handles);
10
QUEUE_INIT(&loop->handle_queue);
11
QUEUE_INIT(&loop->pending_queue);
12
QUEUE_INIT(&loop->watcher_queue);
13
14
err = uv__platform_loop_init(loop, default_loop);
15
// ...
16 }
uv__platform_loop_init
kqueue
epoll
joyent/node  -­‐‑  node.cc
joyent/node  -­‐‑  core.c  

:  258

1 int uv_run(uv_loop_t* loop, uv_run_mode mode) {
2
r = uv__loop_alive(loop);
3
while (r != 0 && loop->stop_flag == 0) {
4
// ...
5
uv__update_time(loop);
6
uv__run_timers(loop);
7
uv__io_poll(loop, timeout);
8
// ...
9
}
10 }
1
2
3
4
5

static int uv__loop_alive(uv_loop_t* loop) {
return uv__has_active_handles(loop) ||
uv__has_active_reqs(loop) ||
loop->closing_handles != NULL;
}
Fibonacci
1
2
3
4
5
6
7
8
9
10

function fibonacci(n) {
if (n < 2)
return 1;
else
return fibonacci(n-2) + fibonacci(n-1);
}
require('http').createServer(function (req, res) {
res.end("40: " + fibonacci(40));
}).listen(8005);
Fibonacci
Requests per second: 0.61
Time per request: 1634.748 ms (vs 5676 ms)
setTimeout,  setImmediate,
process.nextTick
1.   process.nextTick
1.   process.nextTick*
2.   Input  /  Output
1.   process.nextTick*
2.   Input  /  Output
3.   setImmediate
1.   process.nextTick*
2.   Input  /  Output
3.   setImmediate
4.   setTimeout
Fibonacci
1
2
3
4
5
6
7
8
9
10
11
12

function fibonacci(i, n, f1, f2, res) {
if (i >= n)
res.end(n + ": " + (f1 + f2));
else
setImmediate(function() {
fibonacci(i + 1, n, f2, f1 + f2, res);
});
}
require('http').createServer(function (req, res) {
fibonacci(0, 1473, 1, 1, res);
}).listen(8005);
Fibonacci
Requests per second: 264.55
Time per request: 3.780 ms
Streams
bit.ly/streams-­‐‑node
Streams
0.10.x
bit.ly/streams-­‐‑node
1

$ cut -f 1 | uniq -c | sort -n
Streams  in  Node.JS
Streams  in  Node.JS
1.   fs  -­‐‑  createReadStream,  createWriteStream
Streams  in  Node.JS
1.   fs  -­‐‑  createReadStream,  createWriteStream
2.   process  -­‐‑  stdin,  stderr  and  stdout
Streams  in  Node.JS
1.   fs  -­‐‑  createReadStream,  createWriteStream
2.   process  -­‐‑  stdin,  stderr  and  stdout
3.   http  -­‐‑  client  requests,  server  response
Streams  in  Node.JS
1.   fs  -­‐‑  createReadStream,  createWriteStream
2.   process  -­‐‑  stdin,  stderr  and  stdout
3.   http  -­‐‑  client  requests,  server  response
4.   tcp  -­‐‑  sockets
Streams  in  Node.JS
1.   fs  -­‐‑  createReadStream,  createWriteStream
2.   process  -­‐‑  stdin,  stderr  and  stdout
3.   http  -­‐‑  client  requests,  server  response
4.   tcp  -­‐‑  sockets
5.   zlib  -­‐‑  createUnzip...
Streams  in  Node.JS
1.   fs  -­‐‑  createReadStream,  createWriteStream
2.   process  -­‐‑  stdin,  stderr  and  stdout
3.   http  -­‐‑  client  requests,  server  response
4.   tcp  -­‐‑  sockets
5.   zlib  -­‐‑  createUnzip...
6.   crypto  -­‐‑  createCipher
Crypto  service
1

var app = require('express')();
Crypto  service
1

var app = require('express')();

1
2
3
4

app.post('/:algo/:secret', function(req, res) {
// Some magic should be applied here
res.end(req.params.algo + " " + req.params.secret);
});
Crypto  service
1

var app = require('express')();

1
2
3
4

app.post('/:algo/:secret', function(req, res) {
// Some magic should be applied here
res.end(req.params.algo + " " + req.params.secret);
});

1

app.listen(31337);
Crypto  stdin
1
2
3
4
5
6

var cipher = require('crypto')
.createCipher('aes192', 'secret');
process.stdin.pipe(cipher).pipe(process.stdout);
Crypto  service
1

var app = require('express')();

1
2
3
4
5

app.get('/:algo/:secret', function(req, res) {
var cipher = require('crypto')
.createCipher(req.params.algo, req.params.secret);
req.pipe(cipher).pipe(res);
});

1

app.listen(31337);
Push  vs  Pull  streams
Pull  streams
Push  streams
Streams  in  Node.JS  are  Push
ReadableStream.  Events:
data,  end,  close,  error,  readable
ReadableStream
data  event
1
2
3
4

process.stdin.on('data',
function(chunk) {
console.log(chunk);
});
WriteableStream.  Events
finish,  pipe,  unpipe,  drain
WriteableStream.  Methods
write  method
1

var backpressure = process.stdout.write('data');
Writeable  stream
backpressure
1

var backpressure = process.stdout.write('data');
Writeable  stream
backpressure
1

var backpressure = process.stdout.write('data');

This  return  value  is  strictly  advisory.  You  MAY  continue
to  write,  even  if  it  returns  false.  However,  writes  will  be
buffered  in  memory,  so  it  is  best  not  to  do  this
excessively.  Instead,  wait  for  the  drain  event  before
writing  more  data.

Contenu connexe

Tendances

What is systemd? Why use it? how does it work? - breizhcamp
What is systemd? Why use it? how does it work? - breizhcampWhat is systemd? Why use it? how does it work? - breizhcamp
What is systemd? Why use it? how does it work? - breizhcampQuentin Adam
 
Asynchronous I/O in PHP
Asynchronous I/O in PHPAsynchronous I/O in PHP
Asynchronous I/O in PHPThomas Weinert
 
Teaching Your Machine To Find Fraudsters
Teaching Your Machine To Find FraudstersTeaching Your Machine To Find Fraudsters
Teaching Your Machine To Find FraudstersIan Barber
 
Decoupling Objects With Standard Interfaces
Decoupling Objects With Standard InterfacesDecoupling Objects With Standard Interfaces
Decoupling Objects With Standard InterfacesThomas Weinert
 
To Err Is Human
To Err Is HumanTo Err Is Human
To Err Is HumanAlex Liu
 
ROS2勉強会@別府 第7章Pythonクライアントライブラリrclpy
ROS2勉強会@別府 第7章PythonクライアントライブラリrclpyROS2勉強会@別府 第7章Pythonクライアントライブラリrclpy
ROS2勉強会@別府 第7章PythonクライアントライブラリrclpyAtsuki Yokota
 
Grails 1.2 探検隊 -新たな聖杯をもとめて・・・-
Grails 1.2 探検隊 -新たな聖杯をもとめて・・・-Grails 1.2 探検隊 -新たな聖杯をもとめて・・・-
Grails 1.2 探検隊 -新たな聖杯をもとめて・・・-Tsuyoshi Yamamoto
 
ZeroMQ Is The Answer: PHP Tek 11 Version
ZeroMQ Is The Answer: PHP Tek 11 VersionZeroMQ Is The Answer: PHP Tek 11 Version
ZeroMQ Is The Answer: PHP Tek 11 VersionIan Barber
 
React PHP: the NodeJS challenger
React PHP: the NodeJS challengerReact PHP: the NodeJS challenger
React PHP: the NodeJS challengervanphp
 
Why Redux-Observable?
Why Redux-Observable?Why Redux-Observable?
Why Redux-Observable?Anna Su
 
Asynchronous PHP and Real-time Messaging
Asynchronous PHP and Real-time MessagingAsynchronous PHP and Real-time Messaging
Asynchronous PHP and Real-time MessagingSteve Rhoades
 
node.js Module Development
node.js Module Developmentnode.js Module Development
node.js Module DevelopmentJay Harris
 
Modern Getopt for Command Line Processing in Perl
Modern Getopt for Command Line Processing in PerlModern Getopt for Command Line Processing in Perl
Modern Getopt for Command Line Processing in PerlNova Patch
 
Security Challenges in Node.js
Security Challenges in Node.jsSecurity Challenges in Node.js
Security Challenges in Node.jsWebsecurify
 

Tendances (20)

What is systemd? Why use it? how does it work? - breizhcamp
What is systemd? Why use it? how does it work? - breizhcampWhat is systemd? Why use it? how does it work? - breizhcamp
What is systemd? Why use it? how does it work? - breizhcamp
 
Asynchronous I/O in PHP
Asynchronous I/O in PHPAsynchronous I/O in PHP
Asynchronous I/O in PHP
 
Teaching Your Machine To Find Fraudsters
Teaching Your Machine To Find FraudstersTeaching Your Machine To Find Fraudsters
Teaching Your Machine To Find Fraudsters
 
Decoupling Objects With Standard Interfaces
Decoupling Objects With Standard InterfacesDecoupling Objects With Standard Interfaces
Decoupling Objects With Standard Interfaces
 
To Err Is Human
To Err Is HumanTo Err Is Human
To Err Is Human
 
Fun with Ruby and Cocoa
Fun with Ruby and CocoaFun with Ruby and Cocoa
Fun with Ruby and Cocoa
 
ROS2勉強会@別府 第7章Pythonクライアントライブラリrclpy
ROS2勉強会@別府 第7章PythonクライアントライブラリrclpyROS2勉強会@別府 第7章Pythonクライアントライブラリrclpy
ROS2勉強会@別府 第7章Pythonクライアントライブラリrclpy
 
Nubilus Perl
Nubilus PerlNubilus Perl
Nubilus Perl
 
Grails 1.2 探検隊 -新たな聖杯をもとめて・・・-
Grails 1.2 探検隊 -新たな聖杯をもとめて・・・-Grails 1.2 探検隊 -新たな聖杯をもとめて・・・-
Grails 1.2 探検隊 -新たな聖杯をもとめて・・・-
 
ZeroMQ Is The Answer: PHP Tek 11 Version
ZeroMQ Is The Answer: PHP Tek 11 VersionZeroMQ Is The Answer: PHP Tek 11 Version
ZeroMQ Is The Answer: PHP Tek 11 Version
 
Testing with Node.js
Testing with Node.jsTesting with Node.js
Testing with Node.js
 
React PHP: the NodeJS challenger
React PHP: the NodeJS challengerReact PHP: the NodeJS challenger
React PHP: the NodeJS challenger
 
Why Redux-Observable?
Why Redux-Observable?Why Redux-Observable?
Why Redux-Observable?
 
Perl Web Client
Perl Web ClientPerl Web Client
Perl Web Client
 
Object oriented JavaScript
Object oriented JavaScriptObject oriented JavaScript
Object oriented JavaScript
 
Asynchronous PHP and Real-time Messaging
Asynchronous PHP and Real-time MessagingAsynchronous PHP and Real-time Messaging
Asynchronous PHP and Real-time Messaging
 
node.js Module Development
node.js Module Developmentnode.js Module Development
node.js Module Development
 
Modern Getopt for Command Line Processing in Perl
Modern Getopt for Command Line Processing in PerlModern Getopt for Command Line Processing in Perl
Modern Getopt for Command Line Processing in Perl
 
Security Challenges in Node.js
Security Challenges in Node.jsSecurity Challenges in Node.js
Security Challenges in Node.js
 
ES6 is Nigh
ES6 is NighES6 is Nigh
ES6 is Nigh
 

En vedette

Денис Чистяков: Паттерны проектирования
Денис Чистяков: Паттерны проектированияДенис Чистяков: Паттерны проектирования
Денис Чистяков: Паттерны проектированияYandex
 
Yandex20131017 Ageev
Yandex20131017 AgeevYandex20131017 Ageev
Yandex20131017 AgeevYandex
 
1 hofstad
1 hofstad1 hofstad
1 hofstadYandex
 
5 samosvat
5 samosvat5 samosvat
5 samosvatYandex
 
4 litvak
4 litvak4 litvak
4 litvakYandex
 
4 musatov
4 musatov4 musatov
4 musatovYandex
 
5 ostroumova
5 ostroumova5 ostroumova
5 ostroumovaYandex
 

En vedette (8)

Денис Чистяков: Паттерны проектирования
Денис Чистяков: Паттерны проектированияДенис Чистяков: Паттерны проектирования
Денис Чистяков: Паттерны проектирования
 
Iiguerramundial
IiguerramundialIiguerramundial
Iiguerramundial
 
Yandex20131017 Ageev
Yandex20131017 AgeevYandex20131017 Ageev
Yandex20131017 Ageev
 
1 hofstad
1 hofstad1 hofstad
1 hofstad
 
5 samosvat
5 samosvat5 samosvat
5 samosvat
 
4 litvak
4 litvak4 litvak
4 litvak
 
4 musatov
4 musatov4 musatov
4 musatov
 
5 ostroumova
5 ostroumova5 ostroumova
5 ostroumova
 

Similaire à Всеволод Струкчинский: Node.js

Building and Scaling Node.js Applications
Building and Scaling Node.js ApplicationsBuilding and Scaling Node.js Applications
Building and Scaling Node.js ApplicationsOhad Kravchick
 
Workshop 1: Good practices in JavaScript
Workshop 1: Good practices in JavaScriptWorkshop 1: Good practices in JavaScript
Workshop 1: Good practices in JavaScriptVisual Engineering
 
Debugging: Rules & Tools
Debugging: Rules & ToolsDebugging: Rules & Tools
Debugging: Rules & ToolsIan Barber
 
PHP and Rich Internet Applications
PHP and Rich Internet ApplicationsPHP and Rich Internet Applications
PHP and Rich Internet Applicationselliando dias
 
Code Generation in PHP - PHPConf 2015
Code Generation in PHP - PHPConf 2015Code Generation in PHP - PHPConf 2015
Code Generation in PHP - PHPConf 2015Lin Yo-An
 
Writing robust Node.js applications
Writing robust Node.js applicationsWriting robust Node.js applications
Writing robust Node.js applicationsTom Croucher
 
Node Boot Camp
Node Boot CampNode Boot Camp
Node Boot CampTroy Miles
 
Velocity EU 2014 — Offline-first web apps
Velocity EU 2014 — Offline-first web appsVelocity EU 2014 — Offline-first web apps
Velocity EU 2014 — Offline-first web appsandrewsmatt
 
Dmp hadoop getting_start
Dmp hadoop getting_startDmp hadoop getting_start
Dmp hadoop getting_startGim GyungJin
 
Server side scripting smack down - Node.js vs PHP
Server side scripting smack down - Node.js vs PHPServer side scripting smack down - Node.js vs PHP
Server side scripting smack down - Node.js vs PHPMarc Gear
 
Node.js - A practical introduction (v2)
Node.js  - A practical introduction (v2)Node.js  - A practical introduction (v2)
Node.js - A practical introduction (v2)Felix Geisendörfer
 
Helma / RingoJS – Vienna.js Minitalk
Helma / RingoJS – Vienna.js MinitalkHelma / RingoJS – Vienna.js Minitalk
Helma / RingoJS – Vienna.js MinitalkPhilipp Naderer
 
Symfony 2 (PHP Quebec 2009)
Symfony 2 (PHP Quebec 2009)Symfony 2 (PHP Quebec 2009)
Symfony 2 (PHP Quebec 2009)Fabien Potencier
 
PHP and Rich Internet Applications
PHP and Rich Internet ApplicationsPHP and Rich Internet Applications
PHP and Rich Internet Applicationselliando dias
 
Beyond DOMReady: Ultra High-Performance Javascript
Beyond DOMReady: Ultra High-Performance JavascriptBeyond DOMReady: Ultra High-Performance Javascript
Beyond DOMReady: Ultra High-Performance Javascriptaglemann
 
Javascript basics
Javascript basicsJavascript basics
Javascript basicsFin Chen
 
Anatomy of a PHP Request ( UTOSC 2010 )
Anatomy of a PHP Request ( UTOSC 2010 )Anatomy of a PHP Request ( UTOSC 2010 )
Anatomy of a PHP Request ( UTOSC 2010 )Joseph Scott
 

Similaire à Всеволод Струкчинский: Node.js (20)

Fatc
FatcFatc
Fatc
 
Building and Scaling Node.js Applications
Building and Scaling Node.js ApplicationsBuilding and Scaling Node.js Applications
Building and Scaling Node.js Applications
 
Workshop 1: Good practices in JavaScript
Workshop 1: Good practices in JavaScriptWorkshop 1: Good practices in JavaScript
Workshop 1: Good practices in JavaScript
 
Debugging: Rules & Tools
Debugging: Rules & ToolsDebugging: Rules & Tools
Debugging: Rules & Tools
 
PHP and Rich Internet Applications
PHP and Rich Internet ApplicationsPHP and Rich Internet Applications
PHP and Rich Internet Applications
 
Code Generation in PHP - PHPConf 2015
Code Generation in PHP - PHPConf 2015Code Generation in PHP - PHPConf 2015
Code Generation in PHP - PHPConf 2015
 
Writing robust Node.js applications
Writing robust Node.js applicationsWriting robust Node.js applications
Writing robust Node.js applications
 
Node Boot Camp
Node Boot CampNode Boot Camp
Node Boot Camp
 
Velocity EU 2014 — Offline-first web apps
Velocity EU 2014 — Offline-first web appsVelocity EU 2014 — Offline-first web apps
Velocity EU 2014 — Offline-first web apps
 
Dmp hadoop getting_start
Dmp hadoop getting_startDmp hadoop getting_start
Dmp hadoop getting_start
 
Server side scripting smack down - Node.js vs PHP
Server side scripting smack down - Node.js vs PHPServer side scripting smack down - Node.js vs PHP
Server side scripting smack down - Node.js vs PHP
 
What is nodejs
What is nodejsWhat is nodejs
What is nodejs
 
Node.js - A practical introduction (v2)
Node.js  - A practical introduction (v2)Node.js  - A practical introduction (v2)
Node.js - A practical introduction (v2)
 
Helma / RingoJS – Vienna.js Minitalk
Helma / RingoJS – Vienna.js MinitalkHelma / RingoJS – Vienna.js Minitalk
Helma / RingoJS – Vienna.js Minitalk
 
Symfony 2 (PHP Quebec 2009)
Symfony 2 (PHP Quebec 2009)Symfony 2 (PHP Quebec 2009)
Symfony 2 (PHP Quebec 2009)
 
PHP and Rich Internet Applications
PHP and Rich Internet ApplicationsPHP and Rich Internet Applications
PHP and Rich Internet Applications
 
Play vs Rails
Play vs RailsPlay vs Rails
Play vs Rails
 
Beyond DOMReady: Ultra High-Performance Javascript
Beyond DOMReady: Ultra High-Performance JavascriptBeyond DOMReady: Ultra High-Performance Javascript
Beyond DOMReady: Ultra High-Performance Javascript
 
Javascript basics
Javascript basicsJavascript basics
Javascript basics
 
Anatomy of a PHP Request ( UTOSC 2010 )
Anatomy of a PHP Request ( UTOSC 2010 )Anatomy of a PHP Request ( UTOSC 2010 )
Anatomy of a PHP Request ( UTOSC 2010 )
 

Plus de Yandex

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksYandex
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Yandex
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаYandex
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаYandex
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Yandex
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Yandex
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Yandex
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Yandex
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Yandex
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Yandex
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Yandex
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Yandex
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Yandex
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Yandex
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Yandex
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Yandex
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Yandex
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Yandex
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Yandex
 

Plus de Yandex (20)

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of Tanks
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
 

Всеволод Струкчинский: Node.js