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
260
企业级Node.js开发
jacksontian
8
500
git-social-coding-system
jacksontian
6
100
Other Decks in Programming
See All in Programming
PSR-15 はあなたのための ものではない? - phpcon2024
myamagishi
0
330
Jaspr Dart Web Framework 박제창 @Devfest 2024
itsmedreamwalker
0
130
責務を分離するための例外設計 - PHPカンファレンス 2024
kajitack
9
2.2k
採用事例の少ないSvelteを選んだ理由と それを正解にするためにやっていること
oekazuma
2
1.1k
PHPカンファレンス 2024|共創を加速するための若手の技術挑戦
weddingpark
0
110
LLM Supervised Fine-tuningの理論と実践
datanalyticslabo
8
1.7k
CloudflareStack でRAGに入門
asahiiwm
0
140
なまけものオバケたち -PHP 8.4 に入った新機能の紹介-
tanakahisateru
1
140
Go の GC の不得意な部分を克服したい
taiyow
3
950
テストケースの名前はどうつけるべきか?
orgachem
PRO
1
170
アクターシステムに頼らずEvent Sourcingする方法について
j5ik2o
6
650
歴史と現在から考えるスケーラブルなソフトウェア開発のプラクティス
i10416
0
220
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
18
2.3k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.2k
For a Future-Friendly Web
brad_frost
176
9.5k
Testing 201, or: Great Expectations
jmmastey
41
7.2k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
940
Why Our Code Smells
bkeepers
PRO
335
57k
The Pragmatic Product Professional
lauravandoore
32
6.3k
Done Done
chrislema
182
16k
RailsConf 2023
tenderlove
29
960
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Building Adaptive Systems
keathley
38
2.3k
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
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⽇日星期⼆二