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
270
Node简介
Jackson Tian
July 11, 2013
Tweet
Share
More Decks by Jackson Tian
See All by Jackson Tian
企业级Node.js开发
jacksontian
8
520
git-social-coding-system
jacksontian
6
110
Node的核心与红利
jacksontian
5
770
Other Decks in Programming
See All in Programming
CSC307 Lecture 08
javiergs
PRO
0
670
Grafana:建立系統全知視角的捷徑
blueswen
0
330
AI時代のキャリアプラン「技術の引力」からの脱出と「問い」へのいざない / tech-gravity
minodriven
21
7.1k
SourceGeneratorのススメ
htkym
0
190
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
680
QAフローを最適化し、品質水準を満たしながらリリースまでの期間を最短化する #RSGT2026
shibayu36
2
4.4k
0→1 フロントエンド開発 Tips🚀 #レバテックMeetup
bengo4com
0
560
AWS re:Invent 2025参加 直前 Seattle-Tacoma Airport(SEA)におけるハードウェア紛失インシデントLT
tetutetu214
2
110
AIと一緒にレガシーに向き合ってみた
nyafunta9858
0
210
humanlayerのブログから学ぶ、良いCLAUDE.mdの書き方
tsukamoto1783
0
190
MUSUBIXとは
nahisaho
0
130
ThorVG Viewer In VS Code
nors
0
770
Featured
See All Featured
Code Review Best Practice
trishagee
74
20k
A Modern Web Designer's Workflow
chriscoyier
698
190k
30 Presentation Tips
portentint
PRO
1
210
Designing Powerful Visuals for Engaging Learning
tmiket
0
230
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
90
Building AI with AI
inesmontani
PRO
1
690
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
140
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
53
Six Lessons from altMBA
skipperchong
29
4.1k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
300
From π to Pie charts
rasagy
0
120
Prompt Engineering for Job Search
mfonobong
0
160
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⽇日星期四