Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
node
Search
nctunba
May 02, 2012
9
50k
node
nctunba
May 02, 2012
Tweet
Share
More Decks by nctunba
See All by nctunba
被 Qt 快樂的玩弄
nctunba
2
400
被 Qt 快樂的玩弄 part 1
nctunba
1
290
Node - Express - Socket.io
nctunba
1
420
Python
nctunba
3
520
jQuery
nctunba
9
610
JS
nctunba
11
640
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
338
57k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.6k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.9k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
30
9.6k
The Language of Interfaces
destraynor
160
25k
Facilitating Awesome Meetings
lara
55
6.5k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
8
480
Imperfection Machines: The Place of Print at Facebook
scottboms
268
13k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
183
54k
Transcript
Node.js
Evented I/O for V8 JavaScript
DAFUQ?
Jan 2009
Ryan Dahl
None
None
None
None
None
None
None
None
None
De facto language of the web Event-driven culture JavaScript
Chrome's JavaScript runtime Blazing FAST!!! V8 JavaScript Engine
Event-driven Non-blocking Asynchronous I/O Model
ಠ_ಠ
result = readFile('foo') foobar = result Let's do some I/O
None
Register Cache Memory Harddisk Relative latency 1 10 100 10000000
result = readFile('foo') 100000 foobar = result 1 Relative latency
go fetch some file do nothing and wait ... wait
... wait ... got the file! assign it to foobar Meanwhile result = readFile('foo') foobar = result
result = readUserInput() ∞ foobar = result 1 How about
this
None
Input blocks! A Fact
Introducing … Non-blocking I/O Now what?
readFile('foo', function (result) { foobar = result; }); Non-blocking I/O
go fetch some file wait ... wait ... wait ...
got the file! assign it to foobar Meanwhile readFile('foo', function (result) { foobar = result })
None
go fetch some file 'Hello!!' wait ... wait ... got
the file! assign it to foobar Difference readFile('foo', function (result) { foobar = result }) Print('hello!!')
None
“Tell me when you're done, I have something else to
do” Event loop Evented I/O Non-blocking I/O
Another Solution?
Nginx v.s. Apache
Nginx v.s. Apache
None
More power, More responsibility Synchronizations, deadlocks, … Concurrency is fundamentally
hard Threads
From 1 to 10000 or even more Ability to scale
Evented I/O scales well! Scalability
Node.js runs in a single process How to take advantage
of multi-core? Simple, run more Node instance! Single Threaded
http://nodejs.org Hosted on Github Powered by Community Node.js
Unix ./configure make make install Windows click next, next, and
next Install
hello.js console.log('Hello world!'); and do this node hello.js Hello World
var http = require('http'); http.Server(function (req, res) { res.writeHead(200, {'Content-Type':
'text/plain'}); res.end('Hello World\n'); }).listen(3000); HTTP server
var net = require('net'); var server = net.Server(function (socket) {
socket.write('Echo server\r\n'); socket.pipe(socket); }).listen(1337); TCP server
Modularize everything! Built-in Third-party Homemade :D Modules
Node Package Manager Perl's CPAN Ruby's Gem NPM
Over 9000 packages Dead easy to use NPM
npm install express NPM
http://no.de Joyent http://heroku.com Heroku http://nodester.com Nodester … Hosting