【node.js】サーバサイドjavascript 3【io.js】©5ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net
2014/12/27(土) 18:40:07.70ID:MwQYLNURサーバサイドjavascriptについて語りましょう。
node.js - googleが開発したV8エンジン上で実行できる処理系
http://nodejs.org/
io.js - node.js 互換で Joyent の影響からの脱却を目指す処理系
http://iojs.org/
Rhino - JVM上で実行できる処理系
https://developer.mozilla.org/ja/Rhino
io.js の経緯
http://stackoverflow.com/questions/27309412/what-is-the-difference-between-node-js-and-io-js
javascriptはrubyと比較してもかなり速い
http://shootout.alioth.debian.org/u32/benchmark.php?test=all&lang=v8&lang2=yarv
基礎から学ぶNode.js
http://gihyo.jp/dev/serial/01/nodejs
node.jsの概要とアプリケーション開発の準備
http://gihyo.jp/dev/serial/01/realtimeweb/0002
前スレ
【node.js】サーバサイドjavascript 2【Rhino】
http://peace.2ch.net/test/read.cgi/tech/1358937029/
【node.js】サーバサイドjavascript【Rhino】
http://toro.2ch.net/test/read.cgi/tech/1310087535/
0002デフォルトの名無しさん
2014/12/27(土) 18:40:56.41ID:MwQYLNUR0003デフォルトの名無しさん
2014/12/27(土) 18:42:30.42ID:Cc0RXd7d0004デフォルトの名無しさん
2014/12/27(土) 22:58:41.76ID:2nBgrTKt0005デフォルトの名無しさん
2014/12/27(土) 23:02:11.92ID:+XmnrNOH流行ってた
0006デフォルトの名無しさん
2014/12/31(水) 18:23:54.12ID:ySiWi1AV0007デフォルトの名無しさん
2014/12/31(水) 19:45:43.48ID:qeTCZCBAOKなら、今どっち採用するか凄く迷ってるんですけど
0008デフォルトの名無しさん
2015/01/01(木) 16:37:51.69ID:PtOebUlaと安易に寄ってきたにわかがイベントドリブン周りが頭に入らなくてすごすご退散するケースが多そう
0009デフォルトの名無しさん
2015/01/02(金) 00:11:15.27ID:8He3Adur俺はそれに近い
0010デフォルトの名無しさん
2015/01/02(金) 00:20:31.87ID:mlj15zVW0011デフォルトの名無しさん
2015/01/02(金) 00:22:52.63ID:1zRkX7fJ自己紹介乙
0012デフォルトの名無しさん
2015/01/02(金) 00:54:28.10ID:buPBY5a2って以外のメリットって何かあるの?
0013デフォルトの名無しさん
2015/01/02(金) 14:54:02.14ID:mlj15zVW綺麗っていうのが曖昧な表現だがおおむね以下のメリットがある
・コールバック関数から更にコールバックを呼ぶ時にネストが深くなるのを防げる
(ソースが三角形になるのを防げる)
・A,B,Cの内ABが終わっててかつCが終了した直後に処理を開始するとかの制御が簡単になる
(つうか自前でやろうとするとかなり面倒な事になる)
・エラー処理を一纏めにしたりなんかの制御が簡単になる
これを綺麗に書けるの一言でくくってしまったら他のメリットは無い
0014デフォルトの名無しさん
2015/01/02(金) 16:32:56.94ID:buPBY5a2レスさんくす。
>>8 に対しては、むしろコールバック関数を使ったやり方のほうが
node.jsの動作を理解できていいんじゃないかと思ったのでね。
0015デフォルトの名無しさん
2015/01/03(土) 11:31:09.56ID:duDbuP4G漏れはチベット国旗みたいになる
0016デフォルトの名無しさん
2015/01/03(土) 22:51:09.22ID:Uo8+VTLN「Promiseを理解しないと非同期のメリットを生かせない」ってのは
表層しか理解してないって証だわな
Promiseと非同期をjQueryとDOMにでも置き換えて考えてみるといい
0017デフォルトの名無しさん
2015/01/03(土) 23:38:28.29ID:AuGuhWCh実際生かせないだろ
> ・A,B,Cの内ABが終わっててかつCが終了した直後に処理を開始するとかの制御が簡単になる
非同期処理をやってると↑こういう事がしょっちゅうあるけど、どうやって自前でやんの?
単にフラグだらけの糞みたいなソースが出来るだけだ
0018デフォルトの名無しさん
2015/01/04(日) 00:06:14.65ID:NffMCEWR実際はそんなもん自前で書かずにasync使ってたけどな
ECMA標準だから仕事じゃPromise使ってくけどそんなのは所詮表層の話に過ぎないよ
PromiseよりStreamが適することも多いし
0019デフォルトの名無しさん
2015/01/04(日) 00:10:50.21ID:kuXg+7pGどうせマルチスレッドvs非同期処理の事いってんだろ
そんな事言ってんじゃねーんだよ
スレの流れも読まずに何一人でブチ切れてんだよアホか
0020デフォルトの名無しさん
2015/01/04(日) 00:18:39.72ID:LcMrfHes一方俺は、asyncもどきを自前で作った。(趣味でだけど)
非同期処理の中でさらに非同期処理をして、それぞれの終了時に指定された関数を呼び出す
可能性があるようなプログラムだったんで、途中頭がこんがらがったけど何とかできたわ。
0021デフォルトの名無しさん
2015/01/04(日) 00:26:18.12ID:kuXg+7pG一応だけど、ブラウザ内蔵のPromiseはJavaScriptで実装出来ない事をしてるから
Promise使った方がいいとは思うよ
・渡されたコールバックを確実に非同期で実行する
・飲み込まれた例外をデバッグ出来る
ってのがそう
0022デフォルトの名無しさん
2015/01/04(日) 00:35:28.28ID:NffMCEWRどこを誤読するとそうなるんだよwww
並列ってのはPromise.all()やasyncのparallel()のような処理フローのこと
逐次ってのはPromiseのthen()によるチェーンやasyncのseries()・waterfall()のような処理フローのこと
俺の方はスレの流れを読めてると思うぞ
002320
2015/01/04(日) 00:38:56.49ID:LcMrfHesブラウザのJavascriptもシングルスレッドじゃなかったっけ?
であれば、
・渡されたコールバックを確実に非同期で実行する
・飲み込まれた例外をデバッグ出来る
はPromise使わなくてもできるよ。使った方が楽だろうけど。
0024デフォルトの名無しさん
2015/01/04(日) 00:53:04.50ID:kuXg+7pG> ・渡されたコールバックを確実に非同期で実行する
これはsetTimeout使ったハックがあってほぼ確実なのは可能だけど、
絶対確実な実装はブラウザが内部で実装しないと無理なんだよね
> ・飲み込まれた例外をデバッグ出来る
そりゃ、ライブラリ内部のcatch内にブレークポイントを張って待ちかまえていれば
可能だが毎回そんな事すんのか?いやするわけない
そして例外がスルーされて何も起きない
0025デフォルトの名無しさん
2015/01/04(日) 00:54:44.21ID:NffMCEWRサーバサイドJSスレで「ブラウザ内蔵のPromise」ってw
そこはv8のPromise実装って書けよ
>>22
QとかBlurbirdはそれらをJSで実装してるわけだからな
どうしてJSで実装できないと思い込んだのか謎だ
0026デフォルトの名無しさん
2015/01/04(日) 00:56:26.84ID:NffMCEWRあとBlurbirdじゃなくてBluebird
0027デフォルトの名無しさん
2015/01/04(日) 01:03:40.55ID:kuXg+7pGブラウザ内蔵って…ごめんちゃい
QとかBlurbirdはほぼ確実な実装でお茶を濁してる (実用上問題ないけど)
例外の件は>>24の通りだ
0028デフォルトの名無しさん
2015/01/04(日) 01:21:16.51ID:NffMCEWR「お茶を濁してる」について詳しく
nodeではprocess.nextTick()かsetImmediate()で確実に非同期にできるが?
v8のPromiseだってマイクロタスクキューに入れられて結局はnodeのイベントループで処理されるのは同じ
例外のデバッグって具体的には?
Promise.catch()にブレークポイント付けれるって話?(それはブラウザ関係ないと思うが…?)
もしそうならライブラリがcatchした例外はコールバックの第1引数に渡されるのがnodeの流儀で同じようにできるが?
0029デフォルトの名無しさん
2015/01/04(日) 01:41:12.11ID:NffMCEWR0030デフォルトの名無しさん
2015/01/04(日) 01:57:43.71ID:kuXg+7pG> nodeではprocess.nextTick()かsetImmediate()で確実に非同期にできるが?
Qとかはnode用やIE用じゃないが、場合分けしてる可能性はある
> v8のPromiseだってマイクロタスクキューに入れられて結局はnodeのイベントループで処理されるのは同じ
それがJavaScriptで実装出来ない事をしてることじゃなくて?
> 例外のデバッグって具体的には?
説明が面倒になってきた…
Promiseに限った話しじゃないが、ライブラリ内でtry,catchしちゃってると
呼び出し側に例外が来ないって事だ (当たり前の事だけど)
で、Promiseの場合は呼び出し側がエラー処理もしてない場合でも、
デバッガが気を効かせて例外を上げてくれるってだけだ
ま、薄々感づいてると思うが、俺はずっとブラウザ実装の事を言っていた…
しかしPromiseが満たすべき一般的な動作仕様を言ってるつもりではある
■ このスレッドは過去ログ倉庫に格納されています