yurufuwa introduction
of
2010/11/20@JStudy#2
id: Jxck
2010年11月21日日曜日
Jack
2010年11月21日日曜日
噂の Node.js について
•Node.js ってなんなのか?
•何故ここにきてサーバサイドJSな
のか?
•どんなことが出来るのか?
的な話を、
ゆるくふわっと解説します。
2010年11月21日日曜日
Node.js とは?
Node.js = サーバーサイドJS
2010年11月21日日曜日
それだけ?
2010年11月21日日曜日
なら昔からあるじゃん?
•Rhino
•Jaxer
•Nitro
etc..
なぜ Node.js なの?
2010年11月21日日曜日
なぜ を知る3つのキーワード
• イベントループ
• ブロック
• Google V8
2010年11月21日日曜日
イベントループ
2010年11月21日日曜日
スレッドモデルとイベントループ
•スレッドモデル
沢山スレッドを起動して同時に処理する
(マルチスレッド)
•イベントループ
一つのスレッド(シングルスレッド)の中
でイベントとコールバックを使って処理
する。
2010年11月21日日曜日
マルチスレッド
スレッドが増える程メモリを消費
でも今はメモリも安いしたくさん積んでるし。。
2010年11月21日日曜日
富豪メモリ
「メモリが沢山あれば何とかなる」
と思っていた時期が、
ボクにも有りました(キリ!
2010年11月21日日曜日
C10K問題
 リアルタイムWebとやらの流行もあって、同
時に1万くらい同時にアクセスがきて、しかも接
続しっぱなしとかもあり得る時代になって来た。
 そこまで行くと、メモリとかネットワークを
強化しても、越えられない壁が有るかもしれない
こ...
イベントループ
2010年11月21日日曜日
イベントループ
イベントとコールバックで処理をする。
シングルスレッドなので
メモリが少なくて済む。
2010年11月21日日曜日
イベントループモデル
イベントループを採用した実装は既にいく
つかある。
•Twisted - Python
•EventMachine - Ruby
•AnyEvent - Perl
2010年11月21日日曜日
ブロック
2010年11月21日日曜日
イベントループとブロック
イベントループはシングルスレッドなので、途中でブ
ロックが発生すると全体に影響する。
ブロックとは、何か時間のかかる処理のせいで、次の処
理が待たされる状態。
例えば、
•DB からデータをたんまり読み込む
•ネットワ...
ブロックに注意
さっきの実装
•Twisted - Python
•EventMachine - Ruby
•AnyEvent - Perl
これらはブロックを禁止していない。
だからブッロクの有る処理が混じると
パフォーマンスに影響がでてしま...
ノンブロックの強制
そこで、
「普通にやってれば絶対にブロックしない」
(ノンブロックを強制する)
ようにしてしまえば解決だろ!
と考えた人が居た。
Ryan Dahl
←この人
2010年11月21日日曜日
最適な言語は?
ちょっと前の話をまとめると、
•シングルスレッドである
•イベントループを持つ
そんな言語が良い。
そこにノンブロックなAPIを実装すれば勝つる!
2010年11月21日日曜日
JavaScript !!
Q: シングルスレッドですか?
A:「あー、ワーカーとか使わなければ基本そうっす。」
Q: イベントループ持ってる?
A: 「クリックしたら∼、とかは良くやってますよ?」
完璧!
> でも JS じゃ遅くね?
201...
Google V8
2010年11月21日日曜日
Google V8
•メチャクチャ速いJS実装。
•中間コードなし直コンパイル。
•C++ からも色々使いやすい。
•C++ でアドオンも書ける。
2010年11月21日日曜日
ここまでのまとめ
Node.js とは、
シングルスレッドで、イベントループを持っていた JS に
ノンブロッキングな API を添えて、超速い V8 上で動く
様にしたサーバーサイド JavaScript 実行環境。
ただ単に「サーバも JS...
Node.js ++
• 少ないメモリで沢山さばける。
• V8 なので速い。
• 最初からブロックしない仕様になってる。
• 難しいマルチスレッドプログラミングをしな
いで良い。
• JavaScript で書ける。
2010年11月21日日...
Node.js --
• CPUにもの凄い負荷のかかる処理(CPU Heavy)は苦手
• マルチコア環境を使いこなせない
これは将来 Worker を使って解決の予定
• 処理してない例外が発生するとイベントループ全体が止ま
る
uncaug...
Dive Into Node.js !!
2010年11月21日日曜日
Node.js でプログラミング
•Event Driven(Event Emitter)
•ECMA 5th edition
•Common JS
•No Cross Browser
•Same language in Client &
Se...
Event Emitter
•イベント用オブジェクト、こんなのが沢山出てくる。
•今までのイベントと基本同じ考え方
emitter.on(‘event’,callback); // bind
emitter.emit(‘event’); // ...
ECMA 5th edition
基本は 3rd で、全部ではないが 5th も使える。
• getter/setter Syntax
• Property Descriptor
• Native JSON Object
• Array.pro...
Common JS
JavaScript のモジュールやテストに関する共通仕様。
今対応しているのは以下の二つ。
* Modules 1.0
(require, exports ...)
* Unit Testing 1.0
(Asssert ...
No Cross Browser
2010年11月21日日曜日
Node.js の得意分野
•リアルタイムWeb的なアプリ。
Ajax, Comet, WebSocket etc
•重たいI/Oを伴うアプリ。
ファイルアップロードとか
•クライアントでもJSを沢山書くアプリ。
共通の言語で全部書ける
201...
Node.js を始めるには
言語 環境管理 パッケージ管理
Ruby rvm gem
Python Virtualenv PyPI
Perl Perlbrew CPAN
node nave npm
2010年11月21日日曜日
Node.js で "HelloThe World!!"
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Cont...
Socket.IO で WebSocket
•Socket.io
WebSocket の定番ライブラリ。
WebSocket が無いブラウザでも動く様
になってる。
WebSocket は Node.js との相性がい
い。
2010年11月2...
Socket.io
WebSocketが無かったら
(フォールバック)
• Adobe Flash Socket
• ActiveX HTMLFile (IE)
• XHR with multipart encoding
• XHR with ...
Socket.io サーバ側
var socketio = require('socket.io');
var io = socketio.listen(server);
io.on('connection', function(client)...
Socket.io クライアント側
$(function() {
var socket = new io.Socket(null, {port: 8080});
socket.connect();
$('#button').click(func...
他のモジュール
•FW
Express (like Sinatra), etc
•Template
ejs(like erb), haml, sass, Jade, etc
•RDB
sqlite, mysql, postgresql, etc...
実装例
•Node Knock Out
•http://nodeknockout.com/
•48時間の Node.js 耐久ハッカソン
•リアルタイムWebな作品が多い
2010年11月21日日曜日
日本語リソース
JP User Group : http://nodejs.jp/
@yssk22 hands on : http://bit.ly/a7Mm5i
@meso hands on : http://bit.ly/bNSDyD
@b...
他参考資料
• 本家: http://nodejs.org/
• JSConf09 Slide: http://bit.ly/6lZvhy
• JSConf10 Slide: http://bit.ly/c67UQB
• Knockout: h...
That's All
Thank You.
2010年11月21日日曜日
Question?
2010年11月21日日曜日
Upcoming SlideShare
Loading in …5
×

Nodejs Introduction

4,303 views

Published on

2010/11/20
JStudy#2
(一部誤植訂正済)

Published in: Technology
0 Comments
8 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,303
On SlideShare
0
From Embeds
0
Number of Embeds
731
Actions
Shares
0
Downloads
58
Comments
0
Likes
8
Embeds 0
No embeds

No notes for slide

Nodejs Introduction

  1. 1. yurufuwa introduction of 2010/11/20@JStudy#2 id: Jxck 2010年11月21日日曜日
  2. 2. Jack 2010年11月21日日曜日
  3. 3. 噂の Node.js について •Node.js ってなんなのか? •何故ここにきてサーバサイドJSな のか? •どんなことが出来るのか? 的な話を、 ゆるくふわっと解説します。 2010年11月21日日曜日
  4. 4. Node.js とは? Node.js = サーバーサイドJS 2010年11月21日日曜日
  5. 5. それだけ? 2010年11月21日日曜日
  6. 6. なら昔からあるじゃん? •Rhino •Jaxer •Nitro etc.. なぜ Node.js なの? 2010年11月21日日曜日
  7. 7. なぜ を知る3つのキーワード • イベントループ • ブロック • Google V8 2010年11月21日日曜日
  8. 8. イベントループ 2010年11月21日日曜日
  9. 9. スレッドモデルとイベントループ •スレッドモデル 沢山スレッドを起動して同時に処理する (マルチスレッド) •イベントループ 一つのスレッド(シングルスレッド)の中 でイベントとコールバックを使って処理 する。 2010年11月21日日曜日
  10. 10. マルチスレッド スレッドが増える程メモリを消費 でも今はメモリも安いしたくさん積んでるし。。 2010年11月21日日曜日
  11. 11. 富豪メモリ 「メモリが沢山あれば何とかなる」 と思っていた時期が、 ボクにも有りました(キリ! 2010年11月21日日曜日
  12. 12. C10K問題  リアルタイムWebとやらの流行もあって、同 時に1万くらい同時にアクセスがきて、しかも接 続しっぱなしとかもあり得る時代になって来た。  そこまで行くと、メモリとかネットワークを 強化しても、越えられない壁が有るかもしれない ことが分かった。(実際はもっと深い話) 2010年11月21日日曜日
  13. 13. イベントループ 2010年11月21日日曜日
  14. 14. イベントループ イベントとコールバックで処理をする。 シングルスレッドなので メモリが少なくて済む。 2010年11月21日日曜日
  15. 15. イベントループモデル イベントループを採用した実装は既にいく つかある。 •Twisted - Python •EventMachine - Ruby •AnyEvent - Perl 2010年11月21日日曜日
  16. 16. ブロック 2010年11月21日日曜日
  17. 17. イベントループとブロック イベントループはシングルスレッドなので、途中でブ ロックが発生すると全体に影響する。 ブロックとは、何か時間のかかる処理のせいで、次の処 理が待たされる状態。 例えば、 •DB からデータをたんまり読み込む •ネットワーク越しに応答をじっと待つ etc 2010年11月21日日曜日
  18. 18. ブロックに注意 さっきの実装 •Twisted - Python •EventMachine - Ruby •AnyEvent - Perl これらはブロックを禁止していない。 だからブッロクの有る処理が混じると パフォーマンスに影響がでてしまう。 2010年11月21日日曜日
  19. 19. ノンブロックの強制 そこで、 「普通にやってれば絶対にブロックしない」 (ノンブロックを強制する) ようにしてしまえば解決だろ! と考えた人が居た。 Ryan Dahl ←この人 2010年11月21日日曜日
  20. 20. 最適な言語は? ちょっと前の話をまとめると、 •シングルスレッドである •イベントループを持つ そんな言語が良い。 そこにノンブロックなAPIを実装すれば勝つる! 2010年11月21日日曜日
  21. 21. JavaScript !! Q: シングルスレッドですか? A:「あー、ワーカーとか使わなければ基本そうっす。」 Q: イベントループ持ってる? A: 「クリックしたら∼、とかは良くやってますよ?」 完璧! > でも JS じゃ遅くね? 2010年11月21日日曜日
  22. 22. Google V8 2010年11月21日日曜日
  23. 23. Google V8 •メチャクチャ速いJS実装。 •中間コードなし直コンパイル。 •C++ からも色々使いやすい。 •C++ でアドオンも書ける。 2010年11月21日日曜日
  24. 24. ここまでのまとめ Node.js とは、 シングルスレッドで、イベントループを持っていた JS に ノンブロッキングな API を添えて、超速い V8 上で動く 様にしたサーバーサイド JavaScript 実行環境。 ただ単に「サーバも JS で書きたい」という理由以上 に、JavaScript が Ryan の要求を満たしていた。 もし満たしてなかったら、別の言語になってたかも。 2010年11月21日日曜日
  25. 25. Node.js ++ • 少ないメモリで沢山さばける。 • V8 なので速い。 • 最初からブロックしない仕様になってる。 • 難しいマルチスレッドプログラミングをしな いで良い。 • JavaScript で書ける。 2010年11月21日日曜日
  26. 26. Node.js -- • CPUにもの凄い負荷のかかる処理(CPU Heavy)は苦手 • マルチコア環境を使いこなせない これは将来 Worker を使って解決の予定 • 処理してない例外が発生するとイベントループ全体が止ま る uncaughtException という機構がある。 • コールバック入れ子の嵐 Defferd とか使う • Windows.. orz つ VM 2010年11月21日日曜日
  27. 27. Dive Into Node.js !! 2010年11月21日日曜日
  28. 28. Node.js でプログラミング •Event Driven(Event Emitter) •ECMA 5th edition •Common JS •No Cross Browser •Same language in Client & Server 2010年11月21日日曜日
  29. 29. Event Emitter •イベント用オブジェクト、こんなのが沢山出てくる。 •今までのイベントと基本同じ考え方 emitter.on(‘event’,callback); // bind emitter.emit(‘event’); // trigger $(‘div’).bind(‘event’,callback); $(‘div’).trigger(‘event’); 2010年11月21日日曜日
  30. 30. ECMA 5th edition 基本は 3rd で、全部ではないが 5th も使える。 • getter/setter Syntax • Property Descriptor • Native JSON Object • Array.prototype.(map¦reduce¦filter) etc 2010年11月21日日曜日
  31. 31. Common JS JavaScript のモジュールやテストに関する共通仕様。 今対応しているのは以下の二つ。 * Modules 1.0 (require, exports ...) * Unit Testing 1.0 (Asssert ...) 2010年11月21日日曜日
  32. 32. No Cross Browser 2010年11月21日日曜日
  33. 33. Node.js の得意分野 •リアルタイムWeb的なアプリ。 Ajax, Comet, WebSocket etc •重たいI/Oを伴うアプリ。 ファイルアップロードとか •クライアントでもJSを沢山書くアプリ。 共通の言語で全部書ける 2010年11月21日日曜日
  34. 34. Node.js を始めるには 言語 環境管理 パッケージ管理 Ruby rvm gem Python Virtualenv PyPI Perl Perlbrew CPAN node nave npm 2010年11月21日日曜日
  35. 35. Node.js で "HelloThe World!!" var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('The World!!n'); }).listen(8124); console.log('Server running at http://127.0.0.1:8124/'); 2010年11月21日日曜日
  36. 36. Socket.IO で WebSocket •Socket.io WebSocket の定番ライブラリ。 WebSocket が無いブラウザでも動く様 になってる。 WebSocket は Node.js との相性がい い。 2010年11月21日日曜日
  37. 37. Socket.io WebSocketが無かったら (フォールバック) • Adobe Flash Socket • ActiveX HTMLFile (IE) • XHR with multipart encoding • XHR with long-polling • JSONP polling (for cross- domain) サポートするブラウザ • Safari 4 • Google Chrome 5 • Internet Explorer 6 • Internet Explorer 7 • Internet Explorer 8 • iPhone Safari • iPad Safari • Firefox 3 • Firefox 4 (Minefield) • Opera 10.61 2010年11月21日日曜日
  38. 38. Socket.io サーバ側 var socketio = require('socket.io'); var io = socketio.listen(server); io.on('connection', function(client) { //接続イベント client.on('message', function(message) { //受信イベント //クライアントがメッセージを送って来たら実行される。 //messageが送られて来たデータ client.send(message); //送って来た本人だけに送る。 client.broadcast(message); //送って来た人以外全員に送る。 }); }); 2010年11月21日日曜日
  39. 39. Socket.io クライアント側 $(function() { var socket = new io.Socket(null, {port: 8080}); socket.connect(); $('#button').click(function() { // 送信 socket.send('message'); return false; }); socket.on('message', function(obj) { // 受信ベント $('#output').text(obj); }); }); 2010年11月21日日曜日
  40. 40. 他のモジュール •FW Express (like Sinatra), etc •Template ejs(like erb), haml, sass, Jade, etc •RDB sqlite, mysql, postgresql, etc •KVS couch, mongodb, redis, etc •Test/Spec Vows, jasmine, Qunit, etc 2010年11月21日日曜日
  41. 41. 実装例 •Node Knock Out •http://nodeknockout.com/ •48時間の Node.js 耐久ハッカソン •リアルタイムWebな作品が多い 2010年11月21日日曜日
  42. 42. 日本語リソース JP User Group : http://nodejs.jp/ @yssk22 hands on : http://bit.ly/a7Mm5i @meso hands on : http://bit.ly/bNSDyD @bad_at_math : node.js とは何か : http://bit.ly/bdfrbz 2010年11月21日日曜日
  43. 43. 他参考資料 • 本家: http://nodejs.org/ • JSConf09 Slide: http://bit.ly/6lZvhy • JSConf10 Slide: http://bit.ly/c67UQB • Knockout: http://nodeknockout.com/ • Bench: http://bit.ly/ao3zc5 • C10K: http://bit.ly/N2DWS 2010年11月21日日曜日
  44. 44. That's All Thank You. 2010年11月21日日曜日
  45. 45. Question? 2010年11月21日日曜日

×