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
Jackson Tian
September 10, 2012
Programming
5
760
Node的核心与红利
尝试从历史的角度来说明为什么Node是今天这个样子的。至少,它不是为前端工程师写就的,尽管前端工程师可以轻易地用上它。
Jackson Tian
September 10, 2012
Tweet
Share
More Decks by Jackson Tian
See All by Jackson Tian
Node简介
jacksontian
5
270
企业级Node.js开发
jacksontian
8
510
git-social-coding-system
jacksontian
6
100
Other Decks in Programming
See All in Programming
変化を楽しむエンジニアリング ~ いままでとこれから ~
murajun1978
0
710
自作OSでDOOMを動かしてみた
zakki0925224
1
1.3k
サイトを作ったらNFCタグキーホルダーを爆速で作れ!
yuukis
0
110
STUNMESH-go: Wireguard NAT穿隧工具的源起與介紹
tjjh89017
0
340
可変性を制する設計: 構造と振る舞いから考える概念モデリングとその実装
a_suenami
10
1.7k
Webinar: AI-Powered Development: Transformiere deinen Workflow mit Coding Tools und MCP Servern
danielsogl
0
110
「リーダーは意思決定する人」って本当?~ 学びを現場で活かす、リーダー4ヶ月目の試行錯誤 ~
marina1017
0
210
オホーツクでコミュニティを立ち上げた理由―地方出身プログラマの挑戦 / TechRAMEN 2025 Conference
lemonade_37
2
460
No Install CMS戦略 〜 5年先を見据えたフロントエンド開発を考える / no_install_cms
rdlabo
0
480
なぜ今、Terraformの本を書いたのか? - 著者陣に聞く!『Terraformではじめる実践IaC』登壇資料
fufuhu
4
570
あまり知られていない MCP 仕様たち / MCP specifications that aren’t widely known
ktr_0731
0
240
令和最新版手のひらコンピュータ
koba789
13
7.4k
Featured
See All Featured
It's Worth the Effort
3n
185
28k
Mobile First: as difficult as doing things right
swwweet
223
9.9k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
How to Ace a Technical Interview
jacobian
278
23k
Faster Mobile Websites
deanohume
308
31k
The Language of Interfaces
destraynor
158
25k
Building Applications with DynamoDB
mza
96
6.5k
Become a Pro
speakerdeck
PRO
29
5.5k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Why You Should Never Use an ORM
jnunemaker
PRO
58
9.5k
What's in a price? How to price your products and services
michaelherold
246
12k
Transcript
Node.js的核⼼心与红利 by @朴灵 1 12年9月11⽇日星期⼆二
关于我 • 阿⾥里巴巴 - CDO - 数据产品部 • CNode社区活动组织者之⼀一 •
InfoQ专栏:#深⼊入浅出Node.js#主持者 2 12年9月11⽇日星期⼆二
议程 • 淘宝指数 • Node.js的历史 • Node.js的崛起 • 拥抱开源 3
12年9月11⽇日星期⼆二
⼀一站式JavaScript体验 4 12年9月11⽇日星期⼆二
⼀一站式JavaScript体验 4 12年9月11⽇日星期⼆二
⼀一站式JavaScript体验 4 12年9月11⽇日星期⼆二
⼀一站式JavaScript体验 4 12年9月11⽇日星期⼆二
⼀一站式JavaScript体验 4 12年9月11⽇日星期⼆二
⼀一站式JavaScript体验 4 12年9月11⽇日星期⼆二
⼀一站式JavaScript体验 Connect 4 12年9月11⽇日星期⼆二
⼀一站式JavaScript体验 Connect 4 12年9月11⽇日星期⼆二
⼀一站式JavaScript体验 Redis & MRedis Connect 4 12年9月11⽇日星期⼆二
⼀一站式JavaScript体验 Redis & MRedis Connect 4 12年9月11⽇日星期⼆二
⼀一站式JavaScript体验 MongoSkin Redis & MRedis Connect 4 12年9月11⽇日星期⼆二
⼀一站式JavaScript体验 MongoSkin ITier Redis & MRedis Connect 4 12年9月11⽇日星期⼆二
⼀一站式JavaScript体验 MongoSkin ITier Redis & MRedis Connect 4 12年9月11⽇日星期⼆二
⼀一站式JavaScript体验 Should MongoSkin ITier Redis & MRedis Connect 4 12年9月11⽇日星期⼆二
⼀一站式JavaScript体验 Should MongoSkin ITier Redis & MRedis Connect 4 12年9月11⽇日星期⼆二
⼀一站式JavaScript体验 WebGhost Should MongoSkin ITier Redis & MRedis Connect 4
12年9月11⽇日星期⼆二
⼀一站式JavaScript体验 WebGhost Should MongoSkin ITier Redis & MRedis Connect Myfox
4 12年9月11⽇日星期⼆二
市⾯面上的误解 5 12年9月11⽇日星期⼆二
市⾯面上的误解 • ⼜又是⼀一⻔门什么新语⾔言吧 5 12年9月11⽇日星期⼆二
市⾯面上的误解 • ⼜又是⼀一⻔门什么新语⾔言吧 • Node.js肯定是⼏几个前端⼯工程师在实验室 ⾥里捣⿎鼓出来的 5 12年9月11⽇日星期⼆二
市⾯面上的误解 • ⼜又是⼀一⻔门什么新语⾔言吧 • Node.js肯定是⼏几个前端⼯工程师在实验室 ⾥里捣⿎鼓出来的 • 直觉上JavaScript不应该跑在后端 5 12年9月11⽇日星期⼆二
市⾯面上的误解 • ⼜又是⼀一⻔门什么新语⾔言吧 • Node.js肯定是⼏几个前端⼯工程师在实验室 ⾥里捣⿎鼓出来的 • 直觉上JavaScript不应该跑在后端 • 异步是反⼈人类的?
5 12年9月11⽇日星期⼆二
JavaScript历史的开启 6 12年9月11⽇日星期⼆二
JavaScript历史的开启 • Brendan Eich 6 12年9月11⽇日星期⼆二
JavaScript历史的开启 • Brendan Eich • Netscape 6 12年9月11⽇日星期⼆二
JavaScript历史的开启 • Brendan Eich • Netscape • 10 days 6
12年9月11⽇日星期⼆二
突变的基因 7 12年9月11⽇日星期⼆二
突变的基因 • ⺴⽹网景希望的JavaScript是Java + Script 7 12年9月11⽇日星期⼆二
突变的基因 • ⺴⽹网景希望的JavaScript是Java + Script 7 12年9月11⽇日星期⼆二
突变的基因 7 12年9月11⽇日星期⼆二
突变的基因 7 12年9月11⽇日星期⼆二
突变的基因 • 实际上是C + Scheme + Self + Java 7
12年9月11⽇日星期⼆二
突变的基因 • 实际上是C + Scheme + Self + Java 7
12年9月11⽇日星期⼆二
突变的基因 7 12年9月11⽇日星期⼆二
突变的基因 7 12年9月11⽇日星期⼆二
拐点1 • 原型链 • 函数式 8 12年9月11⽇日星期⼆二
最早的ServerSide JS • LiveWire 9 12年9月11⽇日星期⼆二
ECMAScript 10 12年9月11⽇日星期⼆二
ECMAScript • 1997年ECMA262颁布 10 12年9月11⽇日星期⼆二
ECMAScript • 1997年ECMA262颁布 • 极⼩小的语⾔言标准集 10 12年9月11⽇日星期⼆二
ECMAScript • 1997年ECMA262颁布 • 极⼩小的语⾔言标准集 • 早产的优质基因携带者 10 12年9月11⽇日星期⼆二
问题1 • 为何LiveWire没有后续发展? 11 12年9月11⽇日星期⼆二
问题2 • 1997-2006年间JavaScript都在干嘛? 12 12年9月11⽇日星期⼆二
浏览器⼤大战 13 12年9月11⽇日星期⼆二
浏览器⼤大战 13 12年9月11⽇日星期⼆二
浏览器⼤大战 13 12年9月11⽇日星期⼆二
浏览器⼤大战 13 12年9月11⽇日星期⼆二
浏览器⼤大战 13 12年9月11⽇日星期⼆二
浏览器⼤大战 13 12年9月11⽇日星期⼆二
JavaScript性能提升 14 12年9月11⽇日星期⼆二
JavaScript性能提升 function fibonacci(n) { if (n < 2) { return
n; } return fibonacci(n - 2) + fibonacci(n - 1); } console.log(fibonacci(40)); 14 12年9月11⽇日星期⼆二
JavaScript性能提升 14 12年9月11⽇日星期⼆二
JavaScript性能提升 14 12年9月11⽇日星期⼆二
JavaScript性能提升 14 12年9月11⽇日星期⼆二
Web2.0 • Web2.0 • Ajax⼲⼴广泛应⽤用 15 12年9月11⽇日星期⼆二
拐点2 • JavaScript引擎性能⼤大幅提升 • JavaScript趋向应⽤用化 16 12年9月11⽇日星期⼆二
问题3 • 为何⼀一⻔门图灵完备的语⾔言,在前端⼲⼴广泛 应⽤用,在后端却⽆无⼈人问津? 17 12年9月11⽇日星期⼆二
此时现状 • JavaScript严重依赖浏览器 • JavaScript API⽀支离破碎 18 12年9月11⽇日星期⼆二
CommonJS • ⼀一个理想主义的救世主 • JavaScript anywhere 19 12年9月11⽇日星期⼆二
拐点3 • CommonJS规范指导JavaScrit⼤大规模编程 20 12年9月11⽇日星期⼆二
问题4 • 谁能帮助CommonJS实现理想? 21 12年9月11⽇日星期⼆二
JavaScript的转折者 22 12年9月11⽇日星期⼆二
• 2009 JavaScript的转折者 22 12年9月11⽇日星期⼆二
• 2009 • Ryan Dahl JavaScript的转折者 22 12年9月11⽇日星期⼆二
• 2009 • Ryan Dahl • 资深C/C++码农 JavaScript的转折者 22 12年9月11⽇日星期⼆二
Node.js的逆袭 http:/ / www.google.com/ trends/?q=node.js 23 12年9月11⽇日星期⼆二
Ryan的⺫⽬目标 • 三年前写作Ebb/libebb • Ryan Dahl需要⼀一个⾼高性能的Web Server • 它应该是基于Event Loop的,异步的
24 12年9月11⽇日星期⼆二
Web Server的发展 • 多进程(fork/prefork) • 多线程(thread per connection, thread pool)
• 单线程(poll/epoll/IOCP) 25 12年9月11⽇日星期⼆二
Ryan的选择 • Ruby • C/C++ • Lua 26 12年9月11⽇日星期⼆二
问题5 • ebb项⺫⽬目为什么三年前停⽌止了更新? 27 12年9月11⽇日星期⼆二
拐点的作⽤用 28 12年9月11⽇日星期⼆二
拐点的作⽤用 • V8 28 12年9月11⽇日星期⼆二
拐点的作⽤用 • V8 • JavaScript在服务端基本是⼀一⽚片空⽩白 28 12年9月11⽇日星期⼆二
拐点的作⽤用 • V8 • JavaScript在服务端基本是⼀一⽚片空⽩白 • 事件驱动 28 12年9月11⽇日星期⼆二
拐点的作⽤用 • V8 • JavaScript在服务端基本是⼀一⽚片空⽩白 • 事件驱动 • CommonJS给予结构化的指导 28
12年9月11⽇日星期⼆二
Node.js成果 29 12年9月11⽇日星期⼆二
Node.js成果 • ⾼高性能Web服务器 ➛ ⾯面向⺴⽹网络的平台 29 12年9月11⽇日星期⼆二
Node.js成果 • ⾼高性能Web服务器 ➛ ⾯面向⺴⽹网络的平台 • ⾸首个将异步⼲⼴广泛应⽤用到业务层的平台!!! 29 12年9月11⽇日星期⼆二
对⽐比⼀一下Nginx 30 12年9月11⽇日星期⼆二
对⽐比⼀一下Nginx • 作为Web服务器,逊于Nginx 30 12年9月11⽇日星期⼆二
对⽐比⼀一下Nginx • 作为Web服务器,逊于Nginx • Nginx仅仅只是Web Server 30 12年9月11⽇日星期⼆二
对⽐比⼀一下Nginx • 作为Web服务器,逊于Nginx • Nginx仅仅只是Web Server • Node.js却可以⾯面向各个业务⽅方向 30 12年9月11⽇日星期⼆二
拐点5 • 引⼊入异步到业务层,⾮非阻塞特性,使得 语⾔言模型在单线程上就脱颖⽽而出 31 12年9月11⽇日星期⼆二
云时代并⾏行的重要性 IO开销 花费CPU时钟周期 CPU Cache L1 3 CPU Cache L2
14 RAM 250 Disk 41000000 Net 240000000 32 12年9月11⽇日星期⼆二
Show me the code • 10次⽆无依赖的数据库调⽤用(分布式) • 时间消耗分别为t1、t2、t3、...、t10 • 总时间?你的答案是?
33 12年9月11⽇日星期⼆二
Node.js是有暇的 34 12年9月11⽇日星期⼆二
Node.js是有暇的 • 单线程,多核CPU如何利⽤用? 34 12年9月11⽇日星期⼆二
Node.js是有暇的 • 单线程,多核CPU如何利⽤用? • 单线程,⼀一个异常就导致进程挂掉 34 12年9月11⽇日星期⼆二
Node.js是有暇的 • 单线程,多核CPU如何利⽤用? • 单线程,⼀一个异常就导致进程挂掉 • 听说内存使⽤用有限制? 34 12年9月11⽇日星期⼆二
Node.js是有暇的 • 单线程,多核CPU如何利⽤用? • 单线程,⼀一个异常就导致进程挂掉 • 听说内存使⽤用有限制? • 听说异步是反⼈人类的? 34
12年9月11⽇日星期⼆二
Node.js是有暇的 • 单线程,多核CPU如何利⽤用? • 单线程,⼀一个异常就导致进程挂掉 • 听说内存使⽤用有限制? • 听说异步是反⼈人类的? •
回调函数的嵌套会死⼈人呢!!! 34 12年9月11⽇日星期⼆二
怎么解决? 35 12年9月11⽇日星期⼆二
怎么解决? • 在⼀一个解决⽅方案⽐比问题还多的社区 35 12年9月11⽇日星期⼆二
怎么解决? • 在⼀一个解决⽅方案⽐比问题还多的社区 • 呵呵。 35 12年9月11⽇日星期⼆二
怎么解决? • 在⼀一个解决⽅方案⽐比问题还多的社区 • 呵呵。 35 12年9月11⽇日星期⼆二
怎么解决? • 在⼀一个解决⽅方案⽐比问题还多的社区 • 呵呵。 35 12年9月11⽇日星期⼆二
怎么解决? • 在⼀一个解决⽅方案⽐比问题还多的社区 • 呵呵。 35 12年9月11⽇日星期⼆二
怎么解决? • 在⼀一个解决⽅方案⽐比问题还多的社区 • 呵呵。 35 12年9月11⽇日星期⼆二
怎么解决? • 在⼀一个解决⽅方案⽐比问题还多的社区 • 呵呵。 35 12年9月11⽇日星期⼆二
怎么解决? • 在⼀一个解决⽅方案⽐比问题还多的社区 • 呵呵。 35 12年9月11⽇日星期⼆二
因果循环1 36 12年9月11⽇日星期⼆二
因果循环1 CommonJS 36 12年9月11⽇日星期⼆二
因果循环1 CommonJS 36 12年9月11⽇日星期⼆二
因果循环1 CommonJS Node 36 12年9月11⽇日星期⼆二
因果循环1 CommonJS Node 36 12年9月11⽇日星期⼆二
因果循环1 CommonJS Node NPM 36 12年9月11⽇日星期⼆二
因果循环1 CommonJS Node NPM 36 12年9月11⽇日星期⼆二
因果循环2 37 12年9月11⽇日星期⼆二
因果循环2 V8 37 12年9月11⽇日星期⼆二
因果循环2 V8 Node 37 12年9月11⽇日星期⼆二
因果循环2 V8 Node 37 12年9月11⽇日星期⼆二
享受开源 38 12年9月11⽇日星期⼆二
享受开源 官⽅方NPM 38 12年9月11⽇日星期⼆二
享受开源 官⽅方NPM 38 12年9月11⽇日星期⼆二
享受开源 官⽅方NPM 单向同步 38 12年9月11⽇日星期⼆二
享受开源 本地NPM 官⽅方NPM 单向同步 38 12年9月11⽇日星期⼆二
享受开源 本地NPM 官⽅方NPM 单向同步 38 12年9月11⽇日星期⼆二
享受开源 本地NPM 官⽅方NPM 项⺫⽬目 单向同步 38 12年9月11⽇日星期⼆二
享受开源 本地NPM 官⽅方NPM 项⺫⽬目 单向同步 38 12年9月11⽇日星期⼆二
享受开源 本地NPM 官⽅方NPM 项⺫⽬目 单向同步 私有模块 38 12年9月11⽇日星期⼆二
享受开源 本地NPM 官⽅方NPM 项⺫⽬目 单向同步 私有模块 38 12年9月11⽇日星期⼆二
享受开源 本地NPM 官⽅方NPM 项⺫⽬目 单向同步 私有模块 38 12年9月11⽇日星期⼆二
享受开源 本地NPM 官⽅方NPM 项⺫⽬目 单向同步 私有模块 公有模块 38 12年9月11⽇日星期⼆二
享受开源 本地NPM 官⽅方NPM 项⺫⽬目 单向同步 私有模块 公有模块 38 12年9月11⽇日星期⼆二
拐点6 39 12年9月11⽇日星期⼆二
拐点6 • ⽣生态系统的形成 39 12年9月11⽇日星期⼆二
拐点6 • ⽣生态系统的形成 • 有梦就会实现 39 12年9月11⽇日星期⼆二
Q & A 40 12年9月11⽇日星期⼆二
41 12年9月11⽇日星期⼆二