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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
nctunba
May 02, 2012
50k
9
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
node
nctunba
May 02, 2012
More Decks by nctunba
See All by nctunba
被 Qt 快樂的玩弄
nctunba
2
410
被 Qt 快樂的玩弄 part 1
nctunba
1
310
Node - Express - Socket.io
nctunba
1
440
Python
nctunba
3
550
jQuery
nctunba
8
630
JS
nctunba
11
650
Featured
See All Featured
A Soul's Torment
seathinner
6
3k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
330
KATA
mclloyd
PRO
35
15k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
870
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
240
Code Reviewing Like a Champion
maltzj
528
40k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
440
Game over? The fight for quality and originality in the time of robots
wayneb77
1
200
Building AI with AI
inesmontani
PRO
1
1.1k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
600
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