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
500
git-social-coding-system
jacksontian
6
100
Other Decks in Programming
See All in Programming
C++20 射影変換
faithandbrave
0
490
Haskell でアルゴリズムを抽象化する / 関数型言語で競技プログラミング
naoya
17
4.7k
Claude Codeの使い方
ttnyt8701
1
120
2度もゼロから書き直して、やっとブラウザでぬるぬる動くAIに辿り着いた話
tomoino
0
160
生成AIコーディングとの向き合い方、AIと共創するという考え方 / How to deal with generative AI coding and the concept of co-creating with AI
seike460
PRO
1
310
カクヨムAndroidアプリのリブート
numeroanddev
0
430
Gleamという選択肢
comamoca
6
740
データベースコネクションプール(DBCP)の変遷と理解
fujikawa8
1
270
来たるべき 8.0 に備えて React 19 新機能と React Router 固有機能の取捨選択とすり合わせを考える
oukayuka
2
800
Beyond Portability: Live Migration for Evolving WebAssembly Workloads
chikuwait
0
380
Passkeys for Java Developers
ynojima
3
870
既存デザインを変更せずにタップ領域を広げる方法
tahia910
1
230
Featured
See All Featured
Producing Creativity
orderedlist
PRO
346
40k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Music & Morning Musume
bryan
46
6.6k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
20k
Writing Fast Ruby
sferik
628
61k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
660
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.8k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Designing for Performance
lara
609
69k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
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⽇日星期⼆二