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
330
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
260
Other Decks in Programming
See All in Programming
今年一番支援させていただいたのは認証系サービスでした
satoshi256kbyte
1
280
선언형 UI에서의 상태관리
l2hyunwoo
0
250
アクターシステムに頼らずEvent Sourcingする方法について
j5ik2o
6
650
CloudflareStack でRAGに入門
asahiiwm
0
140
ATDDで素早く安定した デリバリを実現しよう!
tonnsama
1
620
Итераторы в Go 1.23: зачем они нужны, как использовать, и насколько они быстрые?
lamodatech
0
1.2k
Amazon S3 NYJavaSIG 2024-12-12
sullis
0
130
見えないメモリを観測する: PHP 8.4 `pg_result_memory_size()` とSQL結果のメモリ管理
kentaroutakeda
0
880
AppRouterを用いた大規模サービス開発におけるディレクトリ構成の変遷と問題点
eiganken
1
390
数十万行のプロジェクトを Scala 2から3に完全移行した
xuwei_k
0
490
月刊 競技プログラミングをお仕事に役立てるには
terryu16
1
660
ChatGPT とつくる PHP で OS 実装
memory1994
PRO
3
160
Featured
See All Featured
Site-Speed That Sticks
csswizardry
2
210
4 Signs Your Business is Dying
shpigford
182
21k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
112
50k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
365
25k
Code Review Best Practice
trishagee
65
17k
Faster Mobile Websites
deanohume
305
30k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.4k
Navigating Team Friction
lara
183
15k
Bash Introduction
62gerente
609
210k
The Power of CSS Pseudo Elements
geoffreycrofte
74
5.4k
What's in a price? How to price your products and services
michaelherold
244
12k
Building Flexible Design Systems
yeseniaperezcruz
328
38k
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