X



【node.js】サーバサイドjavascript 4【io.js】 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2016/04/11(月) 16:28:34.52ID:ORuOCkHy
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 3【io.js】(c)2ch.net
http://echo.2ch.net/test/read.cgi/tech/1419673207/
【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/
0413デフォルトの名無しさん
垢版 |
2017/04/03(月) 21:16:06.10ID:XYXk6jFX
>>411
RxJSのメリットは非同期の扱いを楽にしてくれること

RxJSとreduxを組み合わせるのは
一番よく使われてるフレームワークにのっかることで
Redux向けのツール類やノウハウなんかでそのメリットを享受するため

>>409の1つ目のリンクはRxJSだけでreduxと同じようなことをやってる例
2つ目は組み合わせて使う例
0414デフォルトの名無しさん
垢版 |
2017/04/03(月) 21:22:08.20ID:MrxLrKt6
>>410
少し訂正。問題は適切な名前をつけるのが難しいところにあると思うね。

var func1 = function(err, files) {
 if (err) {
  console.log('Error finding files: ' + err)
 } else {
  files.forEach(func2)
 }
}
var func2 = function(filename, fileIndex) {
 console.log(filename)
 gm(source + filename).size(func3)
}
var func3 = function(err, values) {
 if (err) {
  console.log('Error identifying file size: ' + err)
 } else {
  console.log(filename + ' : ' + values)
  aspect = (values.width / values.height)
  widths.forEach(func4.bind(this)))
 }
}
var func4 = function(width, widthIndex) {
 height = Math.round(width / aspect)
 console.log('resizing ' + filename + 'to ' + height + 'x' + height)
 this.resize(width, height).write(destination + 'w' + width + '_' + filename, func5)
}
var func5 = function(err) {
 if (err) console.log('Error writing file: ' + err)
}
fs.readdir(source, func1)
0415デフォルトの名無しさん
垢版 |
2017/04/03(月) 23:44:03.74ID:1+ofpVMn
electronというかjsでデスクトップアプリって流行ると思いますか?
0417デフォルトの名無しさん
垢版 |
2017/04/04(火) 00:42:57.27ID:P+kSkPRB
>>413
非同期の扱いを楽にするって観点ならasync awaitで必要十分じゃないか。
RxJSならではのメリットを知りたい。
0418デフォルトの名無しさん
垢版 |
2017/04/04(火) 00:47:36.02ID:P+kSkPRB
>>415
reactnativeでデスクトップアプリが作れるようになったほうがいいと思うけどね。性能面でも。

electronで結構キラーアプリは出てるから使えて損はない。
chromeOSが復活しないかな。
アプリごとにchromeが中で動いてるのって無駄な気がするんだよね
0421デフォルトの名無しさん
垢版 |
2017/04/04(火) 03:08:30.98ID:QcgfrUUh
RxJSをみてるとJavaScriptにPromise入れるのは
もっと慎重にやるべきだったと思うね
0422デフォルトの名無しさん
垢版 |
2017/04/05(水) 00:42:45.34ID:wcVK36T3
reduxは非同期処理入れるのにミドルウエアが必要でその中の候補としてrxjsがあるってこと?

非同期処理は多用するんだからミドルウエア無しで対応しろよ
0424デフォルトの名無しさん
垢版 |
2017/04/05(水) 02:29:41.05ID:kU4Jv4wh
非同期の方法がたくさんあるからビルトインにしてないんだろ
RxJSが使いたい→redux-observable
generaterが使いたい→redux-saga
Promiseが使いたい→redux-promise
好きなのを選べる
0426デフォルトの名無しさん
垢版 |
2017/04/05(水) 18:20:05.80ID:6P7JyL2t
猫は炬燵で丸くなる
0429デフォルトの名無しさん
垢版 |
2017/04/06(木) 17:23:22.82ID:udT44U5Z
Rxってコンセプトがシンプルなのにいざ使おうとするとライブラリのインターフェースは複雑で、シンドってならない?
0431デフォルトの名無しさん
垢版 |
2017/04/06(木) 20:20:21.49ID:rNIgAdOn
Fetch APIがPromiseベースなので、処理がキャンセルできなくて困ったしな。
Fetch APIの戻り値はObservableに変更すべき。
0432デフォルトの名無しさん
垢版 |
2017/04/06(木) 20:23:20.40ID:rNIgAdOn
>>429
jQueryとPromise(Deffered)で関数型インターフェースには慣れていたから、
イベントでフィルタできる新しいメソッドが追加されたぐらいにしか思ってないよw
0433デフォルトの名無しさん
垢版 |
2017/04/07(金) 00:20:55.58ID:W6kcLwca
>>430
おいおい大丈夫か??
PromiseはPromiseで、ObservableはObservableで必要だよ
いいか?
ObがあればPrが要らないと言うのは
ジェネレーター関数があれば関数が要らないと言ってるのと同じことだぞ
0435デフォルトの名無しさん
垢版 |
2017/04/07(金) 01:27:24.68ID:E9+XPTIr
関数とジェネレータ関数の関係とはちょっと違う気がするが
まあ言いたいことはわかる
0436デフォルトの名無しさん
垢版 |
2017/04/07(金) 01:53:54.75ID:feQdKcc1
>>433
説得力ゼロだなw

ObservableがあればPromiseはいらない。
ObservableにPromiseの機能が含まれてるから
0438デフォルトの名無しさん
垢版 |
2017/04/07(金) 02:12:06.86ID:xCtKbZyH
completeしか発生しないObservable = Promise

そもそも非同期=時間がかかる処理なのだから、
必然的に途中でキャンセルしたくなるのが普通。
キャンセルができない時点でPromiseは片手落ち
0439デフォルトの名無しさん
垢版 |
2017/04/07(金) 02:20:36.15ID:MrQDMpDH
>>436

promiseは非同期処理の約束手形observableはオブジェクトの値の変化を検知する仕組み。

なんでどっちかしかいらないって話になるのか
0440デフォルトの名無しさん
垢版 |
2017/04/07(金) 02:25:12.94ID:MrQDMpDH
>>438
Netflixとかなら動画を取り扱うからキャンセルできたほうがいいけど、
他の案件でも必要か?適材適所でしょう。
なんでもストリームとして取り扱うRxは宣言的な記述になるけど、
それが読みやすいかというと、
俺はpromise とasync awaitの方が読みやすい。
0447デフォルトの名無しさん
垢版 |
2017/04/07(金) 09:44:07.30ID:xCtKbZyH
>>445
違う。Promiseで十分と思えるような作業であっても
実際は、処理のキャンセルや進捗状況の把握が必要になる。
だからPromiseの仕様では不十分という話
0449デフォルトの名無しさん
垢版 |
2017/04/07(金) 10:50:07.00ID:a3tdoMh+
promiseでは全てのケースをカバーできない→正しい
だからpromiseはいらない→間違い
0450デフォルトの名無しさん
垢版 |
2017/04/07(金) 11:38:12.33ID:MrQDMpDH
でもPromiseだからこそasync awaitを駆使して同期プログラミングっポイ見た目でかけるわけで。
そこはRxではむりでしょ?そもそも宣言的な記述なウリなんだろうけども。
まぁ結局一人で開発だったらドッチもあってもいいけど
複数人プロジェクトだとRxは使いづらいわな。
0451デフォルトの名無しさん
垢版 |
2017/04/07(金) 11:54:59.99ID:5+HcG4Iv
Observeを束ねて全部処理が終わったら終了処理をしたいんだけど、どうやったらいいんだろう
0453デフォルトの名無しさん
垢版 |
2017/04/07(金) 12:28:20.19ID:Fuvg5lKD
Httpリクエスト…Promise
websocket…Observable
0454デフォルトの名無しさん
垢版 |
2017/04/07(金) 13:19:55.32ID:MrQDMpDH
んでRx使ったやつで良いプロジェクトってあるの?
RxSwift使ってたときは良いプロジェクトが見当たらなくて
汚い設計になってしまった。
0455デフォルトの名無しさん
垢版 |
2017/04/07(金) 13:59:32.72ID:0MVaqOPa
>>449
これな
0458デフォルトの名無しさん
垢版 |
2017/04/07(金) 18:11:21.26ID:W6kcLwca
つうかキャンセルだけならCancelablePromise案もあるし、
実際はキャンセルが内蔵されていると不都合があるのでCancelToken案のように
仕組みを外部に用意するのがベストだからPromiseは今のままで良いと思うよ

あと因みに例で挙がってたfetchはキャンセル出来る。
キャンセルする必要があるような重たいファイルをDLするときは
Stream使うだろうから、その場合rs側にcancelメソッドがある。
0459デフォルトの名無しさん
垢版 |
2017/04/07(金) 18:13:30.99ID:W6kcLwca
逆に言うと、もしfetchがプロミスレベルでキャンセルに対応した場合、
こういうStream何かとの兼ね合いはどうするのかって話になる。
自動でrs.cancelが呼ばれるようにするのか、それともclosed例外吐くようにするのか。

やっぱりCancelTokenのように外側から突き刺す形が一番良いよ。
0462デフォルトの名無しさん
垢版 |
2017/04/07(金) 23:33:00.86ID:xCtKbZyH
>>449
promiseでは全てのケースをカバーできない→正しい
だからpromiseはいらない→そんなこと言ってない

Observableでpromiseのケースをカバーできる→正しい
だからpromiseはいらない→こう言っている
0463デフォルトの名無しさん
垢版 |
2017/04/07(金) 23:33:50.39ID:xCtKbZyH
>>460
> なんかの勉強会でcancelable promiseの標準化は頓挫したと聞いた

そしてObservableの標準化が進んでいる
0465デフォルトの名無しさん
垢版 |
2017/04/07(金) 23:55:32.50ID:xCtKbZyH
>>464
promiseとobservableはインターフェースが違うから互換性がない。
だからライブラリを作るならば両方に対応しなければならない。

またtoPromise()などでobservableからPromiseに変更するなんて
面倒なことをしなければならない場合もある。

promiseとobservableの両方に対応しなくて良いのがメリットだ
0466デフォルトの名無しさん
垢版 |
2017/04/07(金) 23:57:21.56ID:D3WCz+HD
>>461
そこはキャンセルしてたでしょ!
0467デフォルトの名無しさん
垢版 |
2017/04/08(土) 00:03:38.77ID:x261ON0r
>>465
は?
それならobservableなんて対応しなけりゃいいだけじゃねーか
なんで両方に対応しなきゃいけねーんだよ
0468デフォルトの名無しさん
垢版 |
2017/04/08(土) 00:07:31.07ID:Ibdd+rg/
>>467
殆どの要件でcancelは必要だから結局Fetch APIみたいに
cancelするための別の仕様が出てくる。

だから最初からobservable一本にしておけばいいという話
急ぎすぎてPromiseを標準化してしまったのは黒歴史
Promiseを使ったFetch APIも黒歴史
0469デフォルトの名無しさん
垢版 |
2017/04/08(土) 00:15:58.80ID:cNZiPnVn
>>468
fetchのことしか考えてねーのかよ
fsの非同期apiはキャンセル不可だがこれobservableにする意味あんのかよ

fetchが黒歴史なのは正しい
promiseじゃなくstreamだろってsubstackも突っ込んでた
0470デフォルトの名無しさん
垢版 |
2017/04/08(土) 00:23:48.13ID:Ibdd+rg/
> fsの非同期apiはキャンセル不可だがこれobservableにする意味あんのかよ

あると思うけど?

俺は200MBを超えるファイル×数十個を "並列で" サーバーに送信したことがあるのだが、
もしメモリに全部読み込んでいたら、マシンによってはメモリ不足になっただろう。

だから特定のチャンクごとに読み込んで送信していたわけだが、当然キャンセルもしたいし
どのファイルが何%処理完了したかの状況も表示したくなる。

そんときはループを使って、チャンクごとにデータを読み取って処理したわけだが、
もしfsがobservableであれば、メモリに全部読み取ることなく
一定のチャンクごとに処理する簡単な方法も提供されただろう。
0471デフォルトの名無しさん
垢版 |
2017/04/08(土) 00:28:43.38ID:Ibdd+rg/
setTimeoutなんかもclearTimeoutみたいにキャンセルするメソッドがあるし、
時間がかかるからこそ非同期にしているわけで、時間がかかる処理を
キャンセルしたいことがありえないなんてAPIが本当にあるのだろうか?
0472デフォルトの名無しさん
垢版 |
2017/04/08(土) 00:35:11.20ID:cNZiPnVn
>>470
それはnodeじゃ昔からstreamでやってるやつだがその話じゃねーよ
今のnodeではcallbsckを取るfs.fstatとかの話だ
0478デフォルトの名無しさん
垢版 |
2017/04/08(土) 00:44:38.31ID:Ibdd+rg/
>>477
それは言い方の違いでしかないよ

nodeでcallbackを使うやつの話であれば、そもそもなんで
nodeはPromiseを使わなかったのか?の話になるだろ。

それはcallbackを使う方が速いのと、
何度もイベントを発生する必要があるものがあるからだろうな。

つまり、Promiseでは要件に耐えられないから
Promiseではなくcallbackを使ったんだよ。

fs.fstatでは何度もイベントが発生するわけじゃなくても、
何度もイベントが発生することが可能なcallbackを使っている。

それは一度しかイベントが発生しなくてもPromiseではなく
Observableを使ってよいのと同じ考えだ。
0479デフォルトの名無しさん
垢版 |
2017/04/08(土) 00:49:22.15ID:cNZiPnVn
>>478
promiseの仕様がいつできたかも知らないのかよ
nodeはその前からあるんだよ
スレ違い野郎は消えろ
0480デフォルトの名無しさん
垢版 |
2017/04/08(土) 00:51:43.82ID:Ibdd+rg/
http://stackoverflow.com/questions/30299613/why-does-nodejs-not-use-promise-for-the-readfile-api

Node’s early iterations used Promises in its nonblocking API. However, in February 2010,
Ryan Dahl made the decision to switch to the now-familiar callback(err, results...)
format, on the grounds that Promises are a higher-level construct that belongs in “userland.”

英語わかるか?
Nodeは最初Promise使っていて、callbackに変えたって書いてあるんだぞ
0485デフォルトの名無しさん
垢版 |
2017/04/08(土) 01:05:41.12ID:Ibdd+rg/
> nodeでobservableに相当するのはstream

ちなみに、streamを知らない人に説明しておくと、
streamが使ってるのはPromiseではなくcallback
0486デフォルトの名無しさん
垢版 |
2017/04/08(土) 01:10:44.04ID:cNZiPnVn
>>484
promiseを使わない理由がキャンセルできないからじゃないのは分かってんのかよ
システムコールレベルでキャンセルする方法がないのにobservableにするメリットあんのかって問いに答えてねーだろ
nodeは単発にcallback、連発にstreamで使い分けてる
大は小を兼ねるとは限らないんだよ
0487デフォルトの名無しさん
垢版 |
2017/04/08(土) 01:24:00.13ID:Ibdd+rg/
システムコールレベルって何の話?

Win32APIとかレベルの話してるの?


独自用語で話すんなよ
0489デフォルトの名無しさん
垢版 |
2017/04/08(土) 01:27:17.78ID:GAoRTfTW
何やこいつ
キャンセルする必要がない単発はPromiseでいいし、キャンセルが必要か連発ならobs使えばいいって話だろ
しゅうきょーせんそーかな?
0490デフォルトの名無しさん
垢版 |
2017/04/08(土) 01:28:10.51ID:Ibdd+rg/
単発だからってキャンセルする必要が無いことにはならないんだが?

言ってる意味わかる?
0491デフォルトの名無しさん
垢版 |
2017/04/08(土) 01:31:42.23ID:Ibdd+rg/
Observableが得意なのはキャンセルだけじゃなくて
並列処理もなんで、fs.fstatを並列で実行したいときにも
簡単にかけるというメリットも有るな
0492デフォルトの名無しさん
垢版 |
2017/04/08(土) 01:33:57.12ID:i0oWHzgI
いくら君らが言い合っても、現実はかわらないでしょ?
今ある仕様がすべてで文句かるなら他の言語つかいなよで終わる話しじゃないの?
生産性のない答えもない事で争って暇すぎるだろ
0493デフォルトの名無しさん
垢版 |
2017/04/08(土) 01:36:49.14ID:GAoRTfTW
>>490
「キャンセルする必要がない場合は」
よく嫁
0494デフォルトの名無しさん
垢版 |
2017/04/08(土) 01:37:27.20ID:GAoRTfTW
こいつもしかしてIT速報の管理人か?
転載禁止やぞ。対立煽りはNG
0495デフォルトの名無しさん
垢版 |
2017/04/08(土) 01:45:22.63ID:w3FPiolV
スプーンとお玉の関係に似てる。
ジャムをすくうのにお玉を使ったら逆に不便だろ。そこは適切にスプーンを使え。
キャンセル処理がPromiseだと絶対無理というわけでもないし、Rxが必要とも思えないプロジェクトで無理やりRxを使う必要もない。
0497デフォルトの名無しさん
垢版 |
2017/04/08(土) 02:25:27.18ID:FnclMLRN
レスの文体からして前からJSスレに常駐してる荒らしでしょ
コピペブログ管理人もやってたのかは知らんが
0498デフォルトの名無しさん
垢版 |
2017/04/08(土) 02:31:02.63ID:hy422I1n
>>487
システムコールってwikipediaにもエントリあるのに
unix/linux系はダメなwindows君か
どうりでダメなわけだ
0499デフォルトの名無しさん
垢版 |
2017/04/08(土) 02:35:20.51ID:Ibdd+rg/
>>498
分かってないなw
なんでシステムコールの話がでてくるんだってことだよ。

nodeのAPIと、OSのシステムコールを
一対一で直接結びつける必要はないっつーの

nodeのAPIは単純な一命令でも、内部の実装は
何回もシステムコール呼んだって良いわけだ。

それが分かってないから、お前はシステムコールが
キャンセルできるかどうかなんて言い出したんだろ
こっちは全部お見通しだってーの
0500デフォルトの名無しさん
垢版 |
2017/04/08(土) 05:35:10.56ID:iZgQ7lMc
fetchはキャンセルできる必要があるが、
fetchの戻り値をObsevableにするのは駄目。
Obsevableって一様な幾つものデータを受け取るのに向いているので
fetchのように幾つかの段階で全然違うものが帰って来るのには向いていない。

単純に、Responseにabortメソッドを付けるのが良いと思う
勿論途中のStreamをObsevableにするのはとても良いと思うけど、
それを含んだ全体をするのはおかしい。
0501デフォルトの名無しさん
垢版 |
2017/04/08(土) 05:38:38.21ID:iZgQ7lMc
というか考えたら分かると思う。
キャンセルしたいのはfetchではなく、DLなのだから。
やっぱりCancelToken以外の解は無いと思うよ。
0503デフォルトの名無しさん
垢版 |
2017/04/08(土) 17:29:52.27ID:py60arCP
> キャンセルしたいのはfetchではなく、DLなのだから。

fetchはデータ送信もするんだが?
その場合キャンセルしたいのは何だよ
0504デフォルトの名無しさん
垢版 |
2017/04/08(土) 17:40:38.81ID:py60arCP
>>500
> 単純に、Responseにabortメソッドを付けるのが良いと思う

fetchの戻り値はpromiseであってresponseではない。

responseはpromiseのthenの時に渡される。
promiseのthenが呼び出されるのはfetchの処理が完了した後。

つまりresponseを取得したとき=fetchし終わった時に
abortするのは遅すぎる
0505デフォルトの名無しさん
垢版 |
2017/04/08(土) 18:46:58.17ID:1OsO7EoR
>>499
なにを見通してるのかさっぱり分からんがnodeは低水準のapiを提供するものだ
そうすれば複数のシステムコールを組み合わせた高水準apiはユーザーレベルのライブラリで実現できる
だからfsモジュールは意図的にposixの薄いラッパーになっていてキャンセルはない
0507デフォルトの名無しさん
垢版 |
2017/04/08(土) 18:56:59.44ID:py60arCP
>>505
> nodeは低水準のapiを提供するものだ

どこにそんなことが書いてあるのか?

nodeの立場はブラウザと同じだ。
JavaScriptの実行環境だ。

お前の理屈だと、ブラウザは低水準のAPIを提供するものということになる。
0508デフォルトの名無しさん
垢版 |
2017/04/08(土) 18:58:44.31ID:py60arCP
>>505
> だからfsモジュールは意図的にposixの薄いラッパーになっていてキャンセルはない

じゃあ、例えば、fs.lstatSync は posixのどの薄いラッパーなのか言ってみ
0509デフォルトの名無しさん
垢版 |
2017/04/08(土) 19:01:09.86ID:py60arCP
>>506
> 仕様にはstreamが追加されてる
どっちみち仕様を加えるなら
Observableにした方がいいだろうな。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況