Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Node简介
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Jackson Tian
July 11, 2013
Programming
320
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Node简介
Jackson Tian
July 11, 2013
More Decks by Jackson Tian
See All by Jackson Tian
企业级Node.js开发
jacksontian
8
570
git-social-coding-system
jacksontian
6
150
Node的核心与红利
jacksontian
5
810
Other Decks in Programming
See All in Programming
Domain-Driven Transformation
hschwentner
2
2.3k
CodeRabbitの効果検証と過ごしてみた3ヶ月
armondando
0
230
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.6k
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
160
月間100万人のサービス刷新で、 技術選定をHonoに振り切った話
yutobara
8
6.4k
dotNET_vulnclicker_intro.pdf
deka_morita
0
140
RAG の “R” を Swift で覗いてみる 〜「意味から探す」検索の仕組み〜
nao_randd
0
160
Androidだけじゃない、DroidKaigiで広がった私の技術スタック
akkeylab
0
130
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
570
最近”作らせてる” ローカルAIアプリの話
akit37
0
450
Jetpack Compose Mechanisms
skydoves
2
730
AWSに止められる覚悟してますか?
morizo_1984
2
530
Featured
See All Featured
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
Navigating Team Friction
lara
192
16k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
sira's awesome portfolio website redesign presentation
elsirapls
0
450
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
560
Heart Work Chapter 1 - Part 1
lfama
PRO
10
37k
Discover your Explorer Soul
emna__ayadi
2
1.3k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
43k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
1
280
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
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⽇日星期四