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
770
Node的核心与红利
尝试从历史的角度来说明为什么Node是今天这个样子的。至少,它不是为前端工程师写就的,尽管前端工程师可以轻易地用上它。
Jackson Tian
September 10, 2012
Tweet
Share
More Decks by Jackson Tian
See All by Jackson Tian
Node简介
jacksontian
5
280
企业级Node.js开发
jacksontian
8
520
git-social-coding-system
jacksontian
6
110
Other Decks in Programming
See All in Programming
AIに任せる範囲を安全に広げるためにやっていること
fukucheee
0
110
nuget-server - あなたが必要だったNuGetサーバー
kekyo
PRO
0
170
CSC307 Lecture 13
javiergs
PRO
0
310
API Platformを活用したPHPによる本格的なWeb API開発 / api-platform-book-intro
ttskch
1
120
あなたはユーザーではない #PdENight
kajitack
4
300
CSC307 Lecture 15
javiergs
PRO
0
220
maplibre-gl-layers - 地図に移動体たくさん表示したい
kekyo
PRO
0
180
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
380
ベクトル検索のフィルタを用いた機械学習モデルとの統合 / python-meetup-fukuoka-06-vector-attr
monochromegane
2
320
15年目のiOSアプリを1から作り直す技術
teakun
1
600
20260228_JAWS_Beginner_Kansai
takuyay0ne
5
440
Ruby x Terminal
a_matsuda
7
580
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.2k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
A Soul's Torment
seathinner
5
2.4k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
620
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Faster Mobile Websites
deanohume
310
31k
Unsuck your backbone
ammeep
672
58k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.8k
WENDY [Excerpt]
tessaabrams
9
36k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
93
BBQ
matthewcrist
89
10k
Making the Leap to Tech Lead
cromwellryan
135
9.8k
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⽇日星期⼆二