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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Jackson Tian
July 11, 2013
Programming
300
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
540
git-social-coding-system
jacksontian
6
120
Node的核心与红利
jacksontian
5
790
Other Decks in Programming
See All in Programming
技術記事、 専門家としてのプログラマ、 言語化
mizchi
13
6.4k
AI時代のUIはどこへ行く?その2!
yusukebe
22
7.4k
スマートグラスで並列バイブコーディング
hyshu
0
250
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
220
AIとASP.NET Coreで雑Webアプリを作った話
mayuki
0
670
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.7k
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
350k
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
550
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
1
290
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
800
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
2.2k
Go1.27で導入されるジェネリクスメソッドでできること
mackee
0
160
Featured
See All Featured
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4k
Code Review Best Practice
trishagee
74
20k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
Test your architecture with Archunit
thirion
1
2.3k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
200
BBQ
matthewcrist
89
10k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.1k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.5k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.9k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Music & Morning Musume
bryan
47
7.2k
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⽇日星期四