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
色々なIaCツールを実際に触って比較してみる
iriikeita
0
320
JavaでLチカしたい! / JJUG CCC 2024 Fall LT
nhayato
0
140
タクシーアプリ『GO』のリアルタイムデータ分析基盤における機械学習サービスの活用
mot_techtalk
4
1.2k
subpath importsで始めるモック生活
10tera
0
260
Amazon Qを使ってIaCを触ろう!
maruto
0
390
Webの技術スタックで マルチプラットフォームアプリ開発を可能にするElixirDesktopの紹介
thehaigo
2
1k
アジャイルを支えるテストアーキテクチャ設計/Test Architecting for Agile
goyoki
9
3.2k
2024/11/8 関西Kaggler会 2024 #3 / Kaggle Kernel で Gemma 2 × vLLM を動かす。
kohecchi
5
870
どうして僕の作ったクラスが手続き型と言われなきゃいけないんですか
akikogoto
1
110
Content Security Policy入門 セキュリティ設定と 違反レポートのはじめ方 / Introduction to Content Security Policy Getting Started with Security Configuration and Violation Reporting
uskey512
1
520
Contemporary Test Cases
maaretp
0
130
Better Code Design in PHP
afilina
PRO
0
120
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
The Pragmatic Product Professional
lauravandoore
31
6.3k
How To Stay Up To Date on Web Technology
chriscoyier
788
250k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
830
KATA
mclloyd
29
14k
Gamification - CAS2011
davidbonilla
80
5k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
28
2k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.1k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
710
A Modern Web Designer's Workflow
chriscoyier
693
190k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
400
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⽇日星期四