トップページtech
1002コメント339KB

【node.js】サーバサイドjavascript 3【io.js】©5ch.net

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net2014/12/27(土) 18:40:07.70ID:MwQYLNUR
pythonやrubyやPHPと同じ土俵でjavascriptが使えるようになりました。
サーバサイド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:MwQYLNUR
あけおめことよろ
0003デフォルトの名無しさん2014/12/27(土) 18:42:30.42ID:Cc0RXd7d
yesde.js
0004デフォルトの名無しさん2014/12/27(土) 22:58:41.76ID:2nBgrTKt
node.jsって流行るの?
0005デフォルトの名無しさん2014/12/27(土) 23:02:11.92ID:+XmnrNOH
流行ってる
流行ってた
0006デフォルトの名無しさん2014/12/31(水) 18:23:54.12ID:ySiWi1AV
gulp 4 って使えるの?
0007デフォルトの名無しさん2014/12/31(水) 19:45:43.48ID:qeTCZCBA
node-webkitやatom-shellはスレチ?
OKなら、今どっち採用するか凄く迷ってるんですけど
0008デフォルトの名無しさん2015/01/01(木) 16:37:51.69ID:PtOebUla
「node.js覚えればクライアントもサーバもjavascriptだから他の言語覚えなくてすむぜ!」
と安易に寄ってきたにわかがイベントドリブン周りが頭に入らなくてすごすご退散するケースが多そう
0009デフォルトの名無しさん2015/01/02(金) 00:11:15.27ID:8He3Adur
>>8
俺はそれに近い
0010デフォルトの名無しさん2015/01/02(金) 00:20:31.87ID:mlj15zVW
とりあえずPromiseを理解しないと非同期のメリットを生かせないだろうな
0011デフォルトの名無しさん2015/01/02(金) 00:22:52.63ID:1zRkX7fJ
>>8
自己紹介乙
0012デフォルトの名無しさん2015/01/02(金) 00:54:28.10ID:buPBY5a2
Promise って非同期処理のコールバックを比較的キレイに書ける、
って以外のメリットって何かあるの?
0013デフォルトの名無しさん2015/01/02(金) 14:54:02.14ID:mlj15zVW
>>12
綺麗っていうのが曖昧な表現だがおおむね以下のメリットがある
・コールバック関数から更にコールバックを呼ぶ時にネストが深くなるのを防げる
 (ソースが三角形になるのを防げる)
・A,B,Cの内ABが終わっててかつCが終了した直後に処理を開始するとかの制御が簡単になる
 (つうか自前でやろうとするとかなり面倒な事になる)
・エラー処理を一纏めにしたりなんかの制御が簡単になる

これを綺麗に書けるの一言でくくってしまったら他のメリットは無い
0014デフォルトの名無しさん2015/01/02(金) 16:32:56.94ID:buPBY5a2
>>13
レスさんくす。

>>8 に対しては、むしろコールバック関数を使ったやり方のほうが
node.jsの動作を理解できていいんじゃないかと思ったのでね。
0015デフォルトの名無しさん2015/01/03(土) 11:31:09.56ID:duDbuP4G
>ソースが三角形

漏れはチベット国旗みたいになる
0016デフォルトの名無しさん2015/01/03(土) 22:51:09.22ID:Uo8+VTLN
Promiseなんて実際綺麗に書きやすいライブラリの一つってだけだから
「Promiseを理解しないと非同期のメリットを生かせない」ってのは
表層しか理解してないって証だわな
Promiseと非同期をjQueryとDOMにでも置き換えて考えてみるといい
0017デフォルトの名無しさん2015/01/03(土) 23:38:28.29ID:AuGuhWCh
>>16
実際生かせないだろ
> ・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
>>18
どうせマルチスレッドvs非同期処理の事いってんだろ
そんな事言ってんじゃねーんだよ
スレの流れも読まずに何一人でブチ切れてんだよアホか
0020デフォルトの名無しさん2015/01/04(日) 00:18:39.72ID:LcMrfHes
>>18
一方俺は、asyncもどきを自前で作った。(趣味でだけど)

非同期処理の中でさらに非同期処理をして、それぞれの終了時に指定された関数を呼び出す
可能性があるようなプログラムだったんで、途中頭がこんがらがったけど何とかできたわ。
0021デフォルトの名無しさん2015/01/04(日) 00:26:18.12ID:kuXg+7pG
>>20
一応だけど、ブラウザ内蔵のPromiseはJavaScriptで実装出来ない事をしてるから
Promise使った方がいいとは思うよ
・渡されたコールバックを確実に非同期で実行する
・飲み込まれた例外をデバッグ出来る
ってのがそう
0022デフォルトの名無しさん2015/01/04(日) 00:35:28.28ID:NffMCEWR
>>19
どこを誤読するとそうなるんだよwww
並列ってのはPromise.all()やasyncのparallel()のような処理フローのこと
逐次ってのはPromiseのthen()によるチェーンやasyncのseries()・waterfall()のような処理フローのこと
俺の方はスレの流れを読めてると思うぞ
0023202015/01/04(日) 00:38:56.49ID:LcMrfHes
>>21
ブラウザのJavascriptもシングルスレッドじゃなかったっけ?
であれば、
・渡されたコールバックを確実に非同期で実行する
・飲み込まれた例外をデバッグ出来る
はPromise使わなくてもできるよ。使った方が楽だろうけど。
0024デフォルトの名無しさん2015/01/04(日) 00:53:04.50ID:kuXg+7pG
>>23
> ・渡されたコールバックを確実に非同期で実行する
これはsetTimeout使ったハックがあってほぼ確実なのは可能だけど、
絶対確実な実装はブラウザが内部で実装しないと無理なんだよね

> ・飲み込まれた例外をデバッグ出来る
そりゃ、ライブラリ内部のcatch内にブレークポイントを張って待ちかまえていれば
可能だが毎回そんな事すんのか?いやするわけない
そして例外がスルーされて何も起きない
0025デフォルトの名無しさん2015/01/04(日) 00:54:44.21ID:NffMCEWR
>>21
サーバサイドJSスレで「ブラウザ内蔵のPromise」ってw
そこはv8のPromise実装って書けよ

>>22
QとかBlurbirdはそれらをJSで実装してるわけだからな
どうしてJSで実装できないと思い込んだのか謎だ
0026デフォルトの名無しさん2015/01/04(日) 00:56:26.84ID:NffMCEWR
安価ミス、>>25の後半は>>23へのレス
あとBlurbirdじゃなくてBluebird
0027デフォルトの名無しさん2015/01/04(日) 01:03:40.55ID:kuXg+7pG
>>25
ブラウザ内蔵って…ごめんちゃい

QとかBlurbirdはほぼ確実な実装でお茶を濁してる (実用上問題ないけど)
例外の件は>>24の通りだ
0028デフォルトの名無しさん2015/01/04(日) 01:21:16.51ID:NffMCEWR
>>27
「お茶を濁してる」について詳しく
nodeではprocess.nextTick()かsetImmediate()で確実に非同期にできるが?
v8のPromiseだってマイクロタスクキューに入れられて結局はnodeのイベントループで処理されるのは同じ

例外のデバッグって具体的には?
Promise.catch()にブレークポイント付けれるって話?(それはブラウザ関係ないと思うが…?)
もしそうならライブラリがcatchした例外はコールバックの第1引数に渡されるのがnodeの流儀で同じようにできるが?
0029デフォルトの名無しさん2015/01/04(日) 01:41:12.11ID:NffMCEWR
で、>>19>>18を誤読してたってことでいいのか? >>22を読んだ上での反論は?
0030デフォルトの名無しさん2015/01/04(日) 01:57:43.71ID:kuXg+7pG
>>28
> nodeではprocess.nextTick()かsetImmediate()で確実に非同期にできるが?
Qとかはnode用やIE用じゃないが、場合分けしてる可能性はある
> v8のPromiseだってマイクロタスクキューに入れられて結局はnodeのイベントループで処理されるのは同じ
それがJavaScriptで実装出来ない事をしてることじゃなくて?

> 例外のデバッグって具体的には?
説明が面倒になってきた…
Promiseに限った話しじゃないが、ライブラリ内でtry,catchしちゃってると
呼び出し側に例外が来ないって事だ (当たり前の事だけど)
で、Promiseの場合は呼び出し側がエラー処理もしてない場合でも、
デバッガが気を効かせて例外を上げてくれるってだけだ

ま、薄々感づいてると思うが、俺はずっとブラウザ実装の事を言っていた…
しかしPromiseが満たすべき一般的な動作仕様を言ってるつもりではある
■ このスレッドは過去ログ倉庫に格納されています