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
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
340
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
270
03 - PHP II - OpenWebSchool
openwebschool
2
390
04 - CSS - OpenWebSchool
openwebschool
4
360
01 - W3 intro - OpenWebSchool
openwebschool
3
240
02 - PHP I - OpenWebSchool
openwebschool
3
270
Other Decks in Programming
See All in Programming
富山発の個人開発サービスで日本中の学校の業務を改善した話
krpk1900
4
370
チームリードになって変わったこと
isaka1022
0
190
負債になりにくいCSSをデザイナとつくるには?
fsubal
9
2.3k
『GO』アプリ バックエンドサーバのコスト削減
mot_techtalk
0
130
自分ひとりから始められる生産性向上の取り組み #でぃーぷらすオオサカ
irof
8
2.6k
WebDriver BiDiとは何なのか
yotahada3
1
140
iOSエンジニアから始める visionOS アプリ開発
nao_randd
3
120
個人アプリを2年ぶりにアプデしたから褒めて / I just updated my personal app, praise me!
lovee
0
340
AHC041解説
terryu16
0
590
AWSマネコンに複数のアカウントで入れるようになりました
yuhta28
2
160
AIの力でお手軽Chrome拡張機能作り
taiseiue
0
170
密集、ドキュメントのコロケーション with AWS Lambda
satoshi256kbyte
0
170
Featured
See All Featured
The Invisible Side of Design
smashingmag
299
50k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
3
310
Building an army of robots
kneath
302
45k
Site-Speed That Sticks
csswizardry
3
370
Building Applications with DynamoDB
mza
93
6.2k
Building a Scalable Design System with Sketch
lauravandoore
460
33k
Visualization
eitanlees
146
15k
Documentation Writing (for coders)
carmenintech
67
4.6k
Docker and Python
trallard
44
3.3k
Mobile First: as difficult as doing things right
swwweet
223
9.3k
How to Think Like a Performance Engineer
csswizardry
22
1.3k
Bash Introduction
62gerente
610
210k
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