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
July 11, 2013
Programming
5
260
Node简介
Jackson Tian
July 11, 2013
Tweet
Share
More Decks by Jackson Tian
See All by Jackson Tian
企业级Node.js开发
jacksontian
8
500
git-social-coding-system
jacksontian
6
100
Node的核心与红利
jacksontian
5
760
Other Decks in Programming
See All in Programming
React 19でお手軽にCSS-in-JSを自作する
yukukotani
5
520
GitHubで育つ コラボレーション文化 : ニフティでのインナーソース挑戦事例 - 2024-12-16 GitHub Universe 2024 Recap in ZOZO
niftycorp
PRO
0
900
PHPで学ぶプログラミングの教訓 / Lessons in Programming Learned through PHP
nrslib
4
990
Fixstars高速化コンテスト2024準優勝解法
eijirou
0
150
선언형 UI에서의 상태관리
l2hyunwoo
0
250
Kaigi on Railsに初参加したら、その日にLT登壇が決定した件について
tama50505
0
130
CQRS+ES の力を使って効果を感じる / Feel the effects of using the power of CQRS+ES
seike460
PRO
0
220
Compose UIテストを使った統合テスト
hiroaki404
0
110
103 Early Hints
sugi_0000
1
310
Monixと常駐プログラムの勘どころ / Scalaわいわい勉強会 #4
stoneream
0
310
CloudflareStack でRAGに入門
asahiiwm
0
140
Внедряем бюджетирование, или Как сделать хорошо?
lamodatech
0
830
Featured
See All Featured
Music & Morning Musume
bryan
46
6.3k
The Pragmatic Product Professional
lauravandoore
32
6.3k
We Have a Design System, Now What?
morganepeng
51
7.3k
Making Projects Easy
brettharned
116
6k
BBQ
matthewcrist
85
9.4k
Side Projects
sachag
452
42k
KATA
mclloyd
29
14k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
111
50k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
480
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.6k
Code Reviewing Like a Champion
maltzj
521
39k
Transcript
Node.js介绍 by @朴灵 1 13年7月11⽇日星期四
内容 • 服务端JavaScript • Node.js的诞⽣生 • 社区状况 • Why Node.js
2 13年7月11⽇日星期四
Node诸多疑问 • 前端⼯工程师在实验室捣⿎鼓出来的 • 为了让前端⼯工程师逆袭后端⽽而设计 • 直觉上JavaScript不应该跑在后端 • 不要为了JavaScript⽽而JavaScript •
让适合的语⾔言做适合的事,不要搞语⾔言 之争了 3 13年7月11⽇日星期四
JavaScript历史的开启 4 13年7月11⽇日星期四
JavaScript历史的开启 • Brendan Eich 4 13年7月11⽇日星期四
JavaScript历史的开启 • Brendan Eich • Netscape 4 13年7月11⽇日星期四
JavaScript历史的开启 • Brendan Eich • Netscape • 10 days 4
13年7月11⽇日星期四
突变的基因 5 13年7月11⽇日星期四
突变的基因 • ⺴⽹网景希望的JavaScript是Java + Script 5 13年7月11⽇日星期四
突变的基因 • ⺴⽹网景希望的JavaScript是Java + Script 5 13年7月11⽇日星期四
突变的基因 5 13年7月11⽇日星期四
突变的基因 5 13年7月11⽇日星期四
实际的JavaScript 6 13年7月11⽇日星期四
实际的JavaScript • 实际上是C + Scheme + Self + Java 6
13年7月11⽇日星期四
实际的JavaScript • 实际上是C + Scheme + Self + Java 6
13年7月11⽇日星期四
实际的JavaScript 6 13年7月11⽇日星期四
实际的JavaScript 6 13年7月11⽇日星期四
优点 • 原型链 • 函数式 7 13年7月11⽇日星期四
最早的ServerSide JS • LiveWire 8 13年7月11⽇日星期四
ECMAScript 9 13年7月11⽇日星期四
ECMAScript • 1997年ECMA262颁布 9 13年7月11⽇日星期四
ECMAScript • 1997年ECMA262颁布 • 极⼩小的语⾔言标准集 9 13年7月11⽇日星期四
ECMAScript • 1997年ECMA262颁布 • 极⼩小的语⾔言标准集 • 早产的优质基因携带者 9 13年7月11⽇日星期四
Node.js的诞⽣生 10 13年7月11⽇日星期四
• 2009 Node.js的诞⽣生 10 13年7月11⽇日星期四
• 2009 • Ryan Dahl Node.js的诞⽣生 10 13年7月11⽇日星期四
• 2009 • Ryan Dahl • 资深C/C++码农 Node.js的诞⽣生 10 13年7月11⽇日星期四
⺫⽬目标 • ⾼高性能Web服务器 • 基于事件驱动(Event Loop) • ⾮非阻塞IO 11 13年7月11⽇日星期四
Node的选型 12 13年7月11⽇日星期四
Node的选型 • Haskell。作者玩不转 12 13年7月11⽇日星期四
Node的选型 • Haskell。作者玩不转 • C/C++。利于性能、不利于业务,开发 ⻔门槛太⾼高 12 13年7月11⽇日星期四
Node的选型 • Haskell。作者玩不转 • C/C++。利于性能、不利于业务,开发 ⻔门槛太⾼高 • Ruby。性能太糟糕 12 13年7月11⽇日星期四
Node的选型 • Haskell。作者玩不转 • C/C++。利于性能、不利于业务,开发 ⻔门槛太⾼高 • Ruby。性能太糟糕 • Lua。同步IO的历史包袱
12 13年7月11⽇日星期四
历史的契机 13 13年7月11⽇日星期四
历史的契机 • JavaScript在服务端还⼏几乎是空⽩白 13 13年7月11⽇日星期四
历史的契机 • JavaScript在服务端还⼏几乎是空⽩白 • Rhino早就随着NetScape诞⽣生,却⼀一直没 有发展 13 13年7月11⽇日星期四
历史的契机 • JavaScript在服务端还⼏几乎是空⽩白 • Rhino早就随着NetScape诞⽣生,却⼀一直没 有发展 • Web2.0推动JavaScript⼤大规模应⽤用 13 13年7月11⽇日星期四
历史的契机 • JavaScript在服务端还⼏几乎是空⽩白 • Rhino早就随着NetScape诞⽣生,却⼀一直没 有发展 • Web2.0推动JavaScript⼤大规模应⽤用 • 浏览器战争促使JavaScript性能⻜飞速提升
13 13年7月11⽇日星期四
历史的契机 • JavaScript在服务端还⼏几乎是空⽩白 • Rhino早就随着NetScape诞⽣生,却⼀一直没 有发展 • Web2.0推动JavaScript⼤大规模应⽤用 • 浏览器战争促使JavaScript性能⻜飞速提升
• JavaScript的异步、事件与Ryan的想法不 谋⽽而合 13 13年7月11⽇日星期四
Node的历程 14 13年7月11⽇日星期四
Node的历程 • 2009年第⼀一个版本released 14 13年7月11⽇日星期四
Node的历程 • 2009年第⼀一个版本released • 2009年的JSConf会议上⼤大受欢迎 14 13年7月11⽇日星期四
Node的历程 • 2009年第⼀一个版本released • 2009年的JSConf会议上⼤大受欢迎 • 随后Joyent赞助Node项⺫⽬目 14 13年7月11⽇日星期四
Node的历程 • 2009年第⼀一个版本released • 2009年的JSConf会议上⼤大受欢迎 • 随后Joyent赞助Node项⺫⽬目 • 0.6版本中,微软⼤大⼒力⽀支持迁移到Windows 14
13年7月11⽇日星期四
Node的历程 • 2009年第⼀一个版本released • 2009年的JSConf会议上⼤大受欢迎 • 随后Joyent赞助Node项⺫⽬目 • 0.6版本中,微软⼤大⼒力⽀支持迁移到Windows •
2012年,Isaac Z. Schlueter称为gatekeeper 14 13年7月11⽇日星期四
Node的历程 • 2009年第⼀一个版本released • 2009年的JSConf会议上⼤大受欢迎 • 随后Joyent赞助Node项⺫⽬目 • 0.6版本中,微软⼤大⼒力⽀支持迁移到Windows •
2012年,Isaac Z. Schlueter称为gatekeeper • 现在,0.10.13 released 14 13年7月11⽇日星期四
Github关注排名 15 13年7月11⽇日星期四
NPM上的三⽅方包 16 13年7月11⽇日星期四
企业应⽤用状况 17 13年7月11⽇日星期四
国内状况 • 阿⾥里巴巴 • 腾讯 • 百度 • ⺴⽹网易 •
搜狐 • 新浪 • 美丽说 • 蘑菇街 • ... 18 13年7月11⽇日星期四
应⽤用⽅方向 • 实时应⽤用 • 数据中间层 • 全栈式应⽤用 • App Engine
• ⼯工具类 19 13年7月11⽇日星期四
阿⾥里数据平台 • 对外产品 • 淘宝指数 • 数据魔⽅方 • 淘宝时光机 •
淘宝情报 • 对内产品 • TCIF • 在云端 • 摩萨德 • 中间层应⽤用 • itier • myfox 20 13年7月11⽇日星期四
社区 • CNode社区 • NodeParty线下分享会议 • JSConf.cn(沪JS/京JS) 21 13年7月11⽇日星期四
为什么Node⽕火 • ⾼高性能 • JavaScript亲缘 • ⽣生态系统 22 13年7月11⽇日星期四
CPU性能 23 13年7月11⽇日星期四
CPU性能 • V8:在V8上的JavaScript是世界上最快的 动态脚本语⾔言之⼀一 23 13年7月11⽇日星期四
CPU性能 • V8:在V8上的JavaScript是世界上最快的 动态脚本语⾔言之⼀一 • 斐波那契数列运算 23 13年7月11⽇日星期四
CPU性能 • V8:在V8上的JavaScript是世界上最快的 动态脚本语⾔言之⼀一 • 斐波那契数列运算 23 13年7月11⽇日星期四
Hello world! var http = require('http'); http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(1337); console.log('Server running at http://127.0.0.1:1337/'); 24 13年7月11⽇日星期四
⾼高并发 • 每进程/每请求 • 每线程/每请求 • ⼀一个线程/所有请求 25 13年7月11⽇日星期四
浏览器 vs. Node 26 13年7月11⽇日星期四
API范畴 27 13年7月11⽇日星期四
Node与CommonJS 28 13年7月11⽇日星期四
Node与CommonJS • CommonJS规范。规范解决了API定义的 问题,模块和包使得Node具备开发⼤大规 模应⽤用的可能 28 13年7月11⽇日星期四
Node与CommonJS • CommonJS规范。规范解决了API定义的 问题,模块和包使得Node具备开发⼤大规 模应⽤用的可能 • NPM。作为CommonJS的实现,因着 Node的优异,促使CommonJS⼤大规模应 ⽤用,并形成⽣生态圈 28
13年7月11⽇日星期四
⽣生态循环 29 13年7月11⽇日星期四
⽣生态循环 NPM 29 13年7月11⽇日星期四
⽣生态循环 NPM 29 13年7月11⽇日星期四
⽣生态循环 NPM 项⺫⽬目 29 13年7月11⽇日星期四
⽣生态循环 NPM 项⺫⽬目 29 13年7月11⽇日星期四
⽣生态循环 NPM 项⺫⽬目 公有模块 29 13年7月11⽇日星期四
⽣生态循环 NPM 项⺫⽬目 公有模块 29 13年7月11⽇日星期四
企业NPM⽅方案 30 13年7月11⽇日星期四
企业NPM⽅方案 官⽅方NPM 30 13年7月11⽇日星期四
企业NPM⽅方案 官⽅方NPM 30 13年7月11⽇日星期四
企业NPM⽅方案 官⽅方NPM 单向同步 30 13年7月11⽇日星期四
企业NPM⽅方案 企业NPM 官⽅方NPM 单向同步 30 13年7月11⽇日星期四
企业NPM⽅方案 企业NPM 官⽅方NPM 单向同步 30 13年7月11⽇日星期四
企业NPM⽅方案 企业NPM 官⽅方NPM 项⺫⽬目 单向同步 30 13年7月11⽇日星期四
企业NPM⽅方案 企业NPM 官⽅方NPM 项⺫⽬目 单向同步 30 13年7月11⽇日星期四
企业NPM⽅方案 企业NPM 官⽅方NPM 项⺫⽬目 单向同步 私有模块 30 13年7月11⽇日星期四
企业NPM⽅方案 企业NPM 官⽅方NPM 项⺫⽬目 单向同步 私有模块 30 13年7月11⽇日星期四
企业NPM⽅方案 企业NPM 官⽅方NPM 项⺫⽬目 单向同步 私有模块 30 13年7月11⽇日星期四
企业NPM⽅方案 企业NPM 官⽅方NPM 项⺫⽬目 单向同步 私有模块 公有模块 30 13年7月11⽇日星期四
企业NPM⽅方案 企业NPM 官⽅方NPM 项⺫⽬目 单向同步 私有模块 公有模块 30 13年7月11⽇日星期四
为什么要异步IO 31 13年7月11⽇日星期四
为什么要异步IO 31 13年7月11⽇日星期四
为什么要异步IO • Node是⾸首个将异步IO提升到业务层的平台,使 得并⾏行计算、并⾏行IO变得⼗十分容易,分布式场 景中如⻥鱼得⽔水 31 13年7月11⽇日星期四
为什么要异步IO • Node是⾸首个将异步IO提升到业务层的平台,使 得并⾏行计算、并⾏行IO变得⼗十分容易,分布式场 景中如⻥鱼得⽔水 • M + N 与
max(M, N) 31 13年7月11⽇日星期四
同步阻塞代码 // CPU都浪费在等待IO完成上 // CPU与IO未能重叠利⽤用 ``` // 消费时间为M getData("from_db"); //
消费时间为N getData("from_remote_api"); ``` 32 13年7月11⽇日星期四
异步⾮非阻塞代码 // 异步代码,CPU并不需要等待IO完成,逻辑由事 件或回调通知完成 // IO与CPU之间各⾏行其事,重叠利⽤用 ``` getData("from_db", function (result)
{ // 消费时间为M }); getData("from_remote_api", function (result) { // 消费时间为N }); ``` 33 13年7月11⽇日星期四
Node难点 • 异步编程 • 三⽅方模块质量 34 13年7月11⽇日星期四
异步编程 • 事件 • Promise • 流程控制库 35 13年7月11⽇日星期四
挑剔的模块⽤用户 36 13年7月11⽇日星期四
挑剔的模块⽤用户 • 如何挑选模块 36 13年7月11⽇日星期四
挑剔的模块⽤用户 • 如何挑选模块 • 市场⼝口碑。查看模块依赖度 36 13年7月11⽇日星期四
挑剔的模块⽤用户 • 如何挑选模块 • 市场⼝口碑。查看模块依赖度 • ⽂文档与Demo⻬齐备与否 36 13年7月11⽇日星期四
挑剔的模块⽤用户 • 如何挑选模块 • 市场⼝口碑。查看模块依赖度 • ⽂文档与Demo⻬齐备与否 • 测试标明模块代码质量 36
13年7月11⽇日星期四
挑剔的模块⽤用户 • 如何挑选模块 • 市场⼝口碑。查看模块依赖度 • ⽂文档与Demo⻬齐备与否 • 测试标明模块代码质量 •
Github社区查看作者和模块底细 36 13年7月11⽇日星期四
挑剔的模块⽤用户 • 如何挑选模块 • 市场⼝口碑。查看模块依赖度 • ⽂文档与Demo⻬齐备与否 • 测试标明模块代码质量 •
Github社区查看作者和模块底细 • 读源码 36 13年7月11⽇日星期四
参考推荐 • http://www.infoq.com/cn/master-nodejs • http://nodejs.org/docs/latest/api/index.html 37 13年7月11⽇日星期四