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
09 - Node.JS - OpenWebSchool
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
openwebschool
August 20, 2012
Programming
1
390
09 - Node.JS - OpenWebSchool
openwebschool
August 20, 2012
Tweet
Share
More Decks by openwebschool
See All by openwebschool
11 - CodeIgniter - OpenWebSchool
openwebschool
1
350
07 - Javascript - OpenWebSchool
openwebschool
3
340
08 - js frontend & jQuery - OpenWebSchool
openwebschool
3
280
05 - MySQL - OpenWebSchool
openwebschool
1
250
06 - PHP & MySQL - OpenWebSchool
openwebschool
1
280
03 - PHP II - OpenWebSchool
openwebschool
2
400
04 - CSS - OpenWebSchool
openwebschool
4
360
01 - W3 intro - OpenWebSchool
openwebschool
3
250
02 - PHP I - OpenWebSchool
openwebschool
3
270
Other Decks in Programming
See All in Programming
AI Schema Enrichment for your Oracle AI Database
thatjeffsmith
0
270
KIKI_MBSD Cybersecurity Challenges 2025
ikema
0
1.3k
AI巻き込み型コードレビューのススメ
nealle
1
170
なぜSQLはAIぽく見えるのか/why does SQL look AI like
florets1
0
450
[KNOTS 2026登壇資料]AIで拡張‧交差する プロダクト開発のプロセス および携わるメンバーの役割
hisatake
0
280
MDN Web Docs に日本語翻訳でコントリビュート
ohmori_yusuke
0
650
15年続くIoTサービスのSREエンジニアが挑む分散トレーシング導入
melonps
2
190
AI によるインシデント初動調査の自動化を行う AI インシデントコマンダーを作った話
azukiazusa1
1
720
コマンドとリード間の連携に対する脅威分析フレームワーク
pandayumi
1
450
Oxlintはいいぞ
yug1224
5
1.3k
AtCoder Conference 2025
shindannin
0
1.1k
責任感のあるCloudWatchアラームを設計しよう
akihisaikeda
3
170
Featured
See All Featured
Believing is Seeing
oripsolob
1
54
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
120
The Language of Interfaces
destraynor
162
26k
Unsuck your backbone
ammeep
671
58k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.9k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
580
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
430
The Curious Case for Waylosing
cassininazir
0
230
Optimizing for Happiness
mojombo
379
71k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Navigating Team Friction
lara
192
16k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
290
Transcript
None
除了瀏覽器之外 JS 還有其他的環境
Node 是其中之一
JavaScript + Google V8 + I/O API
None
JavaScript 引擎 Google Chrome 裡面跑得那顆
與 Chrome 是互相獨立的項目 可以單獨瀏覽器在外面跑
Node 用的也是這顆
但是因為 JS 語言本身 不包含輸入輸出
於是 Ryan Dahl 便幫他 加了一套上去
文字 Ryan Dahl
讀寫檔案、網路 ... 這套 API 能做的事情
完全沒什麼特別的
特別的地方在於 他做輸入輸出的方式
Asynchronous Event-driven Non-blocking
這些特色又是什麼意思?
Node 的輸入輸出模型
var file = readFile(‘banana.txt’); console.log(file); console.log(‘hello’);
1. 讀檔 2. 印出來 3. 印其他東西
一句做完接著一句 稀鬆平常的三行
但是執行這三行 各花費的時間不成比例
var file = readFile(‘banana.txt’); console.log(file); console.log(‘hello’); 100000 10 10
來個可能要等到死的
var text = scanKeyboard(); console.log(text); console.log(‘hello’);
var text = scanKeyboard(); console.log(text); console.log(‘hello’); ∞ ?? 10 10
假如使用者永遠不敲鍵盤 後面兩行永遠都不會被執行
Blocking I/O 會讓後面塞住的輸入輸出方式
傳統解決方式:Thread 一次開多一點一起等
傳統解決方式:Thread 一次開多一點一起等
Thread
Node 的解決方式 老子不等你
等你好了再叫我 我先去做其他事情
readFile(‘banana.txt’, function (data) { console.log(data) }) console.log(‘hello’); 一樣要開始等 但是可以先偷跑
readFile(‘banana.txt’, function (data) { console.log(data) }) console.log(‘hello’); 等到了再繼續做想做的事
Event-driven Node 利用事件與 callback 來改變執行的時間與順序
Non-blocking I/O 所以也不會讓後面塞住了
Asynchronous 程式是非同步的 輸入從開始到完成不在同一行
文字 Blocking vs. Non-blocking 資源使用量
優點 & 缺點
效能十分優異 Scalibility 也非常好 社群大 網頁開發前後端可以用同一種語言 ...
Single-threaded 還太年輕
使用方法
可以去官網下載然後安裝 應該都找得到自己平台的版本
node banana.js
2009 年誕生 同年釋出第一個穩定版 v0.2 目前最新的穩定版本為 v0.8
雙數版本號為穩定版 單數版本號回開發版
整個專案都在 Github 上面
內建模組
Node 內建了許多基本的 I/O 模組 讀寫檔、網路 ...
Node 弄了一套模組系統 這些模組都可以用 野生的物件 reqiure 取得
var fs = require(‘fs’); fs.readFile(‘banana.txt’, function (data) { console.log(data); });
var http = require(‘http’); http.createServer(function (req, res) { res.writeHead(200, {
‘Content-Type’, ‘text/plain’ }); res.end(‘Hello World’); }).listen(3000);
fs net http ... 檔案系統 網路 HTTP ...
自己寫個模組
只要在 require 放進相對路徑
用 module.exports 輸出
banana.js module.exports = 42; main.js var banana = require(‘./banana’); //
42
用別人寫的模組
NPM
Perl 有 CPAN Ruby 有 Gem Node 有 NPM
可以到這裡去找看要什麼 https://npmjs.org/ http://blago.dachev.com/modules
npm install express