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
290
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とペアプロして処理時間を97%削減した話 #pyconshizu
kashewnuts
1
240
ふつうのRubyist、ちいさなデバイス、大きな一年 / Ordinary Rubyists, Tiny Devices, Big Year
chobishiba
1
450
nilとは何か 〜interfaceの構造とnil!=nilから理解する〜
kuro_kurorrr
3
1.9k
ベクトル検索のフィルタを用いた機械学習モデルとの統合 / python-meetup-fukuoka-06-vector-attr
monochromegane
2
420
SourceGeneratorのマーカー属性問題について
htkym
0
200
API Platformを活用したPHPによる本格的なWeb API開発 / api-platform-book-intro
ttskch
1
140
AIに任せる範囲を安全に広げるためにやっていること
fukucheee
0
130
Swift ConcurrencyでよりSwiftyに
yuukiw00w
0
270
野球解説AI Agentを開発してみた - 2026/02/27 LayerX社内LT会資料
shinyorke
PRO
0
290
AWS×クラウドネイティブソフトウェア設計 / AWS x Cloud-Native Software Design
nrslib
16
3.2k
AI Assistants for Your Angular Solutions
manfredsteyer
PRO
0
140
CS教育のDX AIによる育成の効率化
niftycorp
PRO
0
110
Featured
See All Featured
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
72
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
470
Paper Plane (Part 1)
katiecoart
PRO
0
5.6k
The Spectacular Lies of Maps
axbom
PRO
1
620
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
140
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.4k
[SF Ruby Conf 2025] Rails X
palkan
2
830
GraphQLとの向き合い方2022年版
quramy
50
14k
Google's AI Overviews - The New Search
badams
0
930
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