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
530
jQuery
nctunba
8
620
JS
nctunba
11
650
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.2k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.3k
First, design no harm
axbom
PRO
2
1.1k
RailsConf 2023
tenderlove
30
1.3k
GraphQLの誤解/rethinking-graphql
sonatard
74
11k
The agentic SEO stack - context over prompts
schlessera
0
630
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
76
GraphQLとの向き合い方2022年版
quramy
50
14k
Context Engineering - Making Every Token Count
addyosmani
9
650
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.2k
Designing for Performance
lara
610
70k
Stop Working from a Prison Cell
hatefulcrawdad
273
21k
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