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/
0671デフォルトの名無しさん
垢版 |
2017/06/28(水) 11:55:35.82ID:6M+2cmcB
そのぶん金取るだけだよな
そんな主張もできない弱小は存在価値ないから他に吸収された方がいい
0672デフォルトの名無しさん
垢版 |
2017/06/28(水) 16:29:31.80ID:7uiFkJf0
>>671
マルチに反応するな
0673デフォルトの名無しさん
垢版 |
2017/06/28(水) 21:25:29.27ID:V4ji+kX8
>>670
「2年目以降は不具合の修正に対応しない」と主張するベンダーはまれだ。多くの場合は、納品から何年たっても、
バグが見つかればユーザーのところに飛んで行き、有償で改修するだろう。

の間違いでは?
普通は不具合の修正に有償で対応する方を選ぶでしょ?
0674デフォルトの名無しさん
垢版 |
2017/06/29(木) 03:44:27.70ID:KULunYvr
app.jsみたいなフレームワーク固有のファイルって
どんな役割なのかもよくわからんし
何を書けばいいのかもわからないしすげえ苦手だ。
最低限何を書けば動くの?
0675デフォルトの名無しさん
垢版 |
2017/06/29(木) 09:04:07.63ID:nn6a6Cug
フレームワークのドキュメントに書いてあるんじゃないですかね…
書いてないなら使う価値がない(品質が水準に達していない)
0677デフォルトの名無しさん
垢版 |
2017/07/08(土) 21:12:14.30ID:XWVPkNFz
触ろうと思ってサンプルプロジェクト作って中途半端に弄ってから半年経ったわ
0678デフォルトの名無しさん
垢版 |
2017/07/09(日) 00:03:48.07ID:FGayP2eL
jQueryとかnode.jsとかデファクトスタンダードでみんなやってる感のやつはどうも食指が動かない
変わり者ですみません
0685デフォルトの名無しさん
垢版 |
2017/07/09(日) 02:41:44.02ID:zx3kMPLK
自分から○○がやりたい!っていうのなら
それは前向きな意見であるが、

みんながやってるからやらない。
誰もやってないからそれをやるっていうのは
それをやりたいという意志がないので
後ろ向きな考え方だよ。やる気が無いといえる
0686デフォルトの名無しさん
垢版 |
2017/07/09(日) 08:27:13.61ID:CH1C34jF
みんながやってるからやりたくない、はひねくれ者
気がついたらみんながやってることと違うことをやってた、てのが変わり者
0687デフォルトの名無しさん
垢版 |
2017/07/09(日) 10:14:40.44ID:LHQ7nZ8B
javascriptとかいうデファクトスタンダードの権化を使うのをまずやめるべきだね
0690デフォルトの名無しさん
垢版 |
2017/07/09(日) 17:11:49.90ID:88Sc1mx+
>>676
async await使ってるならむしろどんどん触るべきじゃないのか。
俺はgoでサーバサイド書いてるからあえて使ってないけど、
全部jsでやるならkoaかも
0691デフォルトの名無しさん
垢版 |
2017/07/09(日) 18:30:24.07ID:cjuI8GCo
express使ってても自分でミドルウェア書きまくるわけじゃないからな
標準のやらpassportやら使うだけだからasync/await使えて嬉しいことはほぼない
結局エコシステム揃ってる方を使う
0692デフォルトの名無しさん
垢版 |
2017/07/10(月) 13:43:08.24ID:gqDySAuG
>>691
koaってexpressのミドルウェア使えたはず。
だからエコシステム的には問題ない。
とは言えasync-awaitもところどころ詰まるところはあるのは分かる
(例えばarrayのmapに渡す関数としては使えないとか。)

でも今から使うならkoaの方かな。
0696デフォルトの名無しさん
垢版 |
2017/07/10(月) 16:33:23.58ID:hbYLDPUX
0697デフォルトの名無しさん
垢版 |
2017/07/10(月) 17:53:20.41ID:LYSrTSKk
>>692
array.mapに非同期関数渡したいならrxjsで処理してtoPromiseすればおk
0699デフォルトの名無しさん
垢版 |
2017/07/10(月) 19:17:56.48ID:9M+6V9gq
まっ CORE ASP使っている身としては、koa2で十分なんだが、JadeからPugへの変更って必要だったのかえぇ〜? いまいちのような感じかする。
軽いCMSにkoa2は便利。 重いのもいけそうではあるが・・・
0700デフォルトの名無しさん
垢版 |
2017/07/10(月) 19:26:02.76ID:LYSrTSKk
>>699
jadeもpugも一緒だぞ
商標の問題で名前変えただけで
0701デフォルトの名無しさん
垢版 |
2017/07/11(火) 16:15:40.20ID:IkyG2RiR
koa2ってなに?koa.jsのこと?
0702デフォルトの名無しさん
垢版 |
2017/07/11(火) 17:21:49.33ID:9uLf2kf9
koe.js v2
0703デフォルトの名無しさん
垢版 |
2017/07/11(火) 17:22:14.73ID:9uLf2kf9
x koe.js v2
o koa.js v2
0704デフォルトの名無しさん
垢版 |
2017/07/11(火) 23:24:55.50ID:rvrzGERi
あんましexpressもkoaも使ってるぜーって情報発信してる人いない気がする。
知らないうちにブロだクションで動いてるんかな
0705デフォルトの名無しさん
垢版 |
2017/07/11(火) 23:54:59.61ID:0kzPGIzN
expressってwebアプリケーションフレームワークって感じじゃないからな
rubyでいえばrack相当でrails相当じゃないから表に出ない
0706デフォルトの名無しさん
垢版 |
2017/07/12(水) 00:05:15.88ID:lpTuRvg7
expressはnode.js標準に付いていてもおかしくない程度の軽いフレームワークだしな
0709デフォルトの名無しさん
垢版 |
2017/07/12(水) 03:27:41.84ID:VV5TEq59
>>708
おれもゲームサーバーでnode+socket.io使ってるけど、expressで配信するコンテンツってphpでよくね?ってパターン多い気がする
どうしても非同期じゃないと無理ってパターン以外は非同期のデメリットがでかすぎる
とくにDBがらみの単純な登録画面とかね
phpの数倍の開発コストかかるよ
0710デフォルトの名無しさん
垢版 |
2017/07/12(水) 04:17:22.08ID:Rdi75m+a
expressでdbアクセスなんてしてないな
bffとして使ってるから
node/expressの後ろのapi鯖はphpだったりrailsだったりjavaだったり
0712デフォルトの名無しさん
垢版 |
2017/07/12(水) 07:31:45.77ID:46U9BX05
でもphpって1requestが1プロセスで高コストだから同時接続数を稼ごうと思ったらnode.jsの方が良いんじゃないの?dbがボトルネックだから気にする必要はない?
0713デフォルトの名無しさん
垢版 |
2017/07/12(水) 07:33:23.93ID:46U9BX05
それにasync awaitつかえば非同期処理はかなり自然に書けないかな?
学習コストは高くなるかもだけど
0714デフォルトの名無しさん
垢版 |
2017/07/12(水) 08:32:57.14ID:Fm5flkvk
async/await使いたいけど、LTSになるまで待ってって言われてる(´・ω・`)
TypeScriptはコンパイルしたくないって言われた、、、
0715デフォルトの名無しさん
垢版 |
2017/07/12(水) 08:35:16.60ID:VV5TEq59
最終的にはアクセス増えたときのパフォーマンスの話になるんだろうけどそんなこと気にするレベルじゃない案件でわざわざ苦労してまでexpressでがんばる必要はないなと思う
必要な場面で局所的に使うのがnodeっていうイメージ
0719デフォルトの名無しさん
垢版 |
2017/07/24(月) 09:12:28.43ID:/vKjgZpt
express-resourceを使ってAPIサーバーを作りたいって考えているのですが
データベースへのアクセス手順を共通化したくなり、下記のようにしました。

class dbaccess {
 constructor(db) {
  this.db = db
 }
 index(req, res, next) {
  console.log(this) // undefined
  this.db.find({}, (e,r)=>res.json(r))
 }
 // 以下略
}

app.use('users', new dbaccess(db))

1 APIクライアントからの GET /
-> this が undefined になっていてエラーになる

2 下記のコードからのindex()呼び出し
var dba = new dbaccess(db)
dba.index(null, null)
-> thisの内容が表示される

何か上手い解決策はないでしょうか。
0721デフォルトの名無しさん
垢版 |
2017/07/24(月) 15:05:38.54ID:BdqEvISL
うむ
0722デフォルトの名無しさん
垢版 |
2017/07/24(月) 17:23:58.44ID:/vKjgZpt
>>720
お答えいただきありがとうございます。
それを全部のメソッドにやるのも何かしっくりこないので、

下のようにクロージャにしてしまったら何とか期待する動作になりました。

function dbaccess(db) {
 let _db = db;
 return {
  index(req, res) {
  }
  // 以下略
 }
}

クラスだと上手くいかないのがイマイチ納得できてませんけど。
0724デフォルトの名無しさん
垢版 |
2017/07/25(火) 21:46:43.91ID:1fcXX4D/
>>719
おいおい、変なことしないほうが良いぞ
もうちょっと調べるべきだろ?

他のプロジェクトでそんな書き方してるか?
昔やったきりで忘れたし今のやり方は変わってるかもしれないから
適切なアドバイスはできないがよ、他はもっと簡単な書き方してるだろ?
0725デフォルトの名無しさん
垢版 |
2017/07/25(火) 22:27:51.60ID:5XPEt11J
>>724
http://qiita.com/kazusa-qooq/items/23926befcb87c0c7b26f
によると
req,res,nextの3引数を取る関数を作ればいいみたいね。
偶然にもクロージャーを使うというのは正解だけど
nextを省略してるってことは他のミドルウエアを後から追加したら
動かなくなる

こういうの見てるとtypescript使うべきって思う。
型でapp.useに渡すクロージャーを制約できるからこういう失敗がない。
0727デフォルトの名無しさん
垢版 |
2017/07/26(水) 15:41:26.54ID:2Xw6+C7K
722です
一応、最小限っぽいコードを書いてみました。
http://www.dotup.org/uploda/www.dotup.org1319642.zip.html
users.jsからdbaccessを利用していますが、ここをtags.js, articles.jsと増やしていきたいって考えています。

>>724
本家のサンプルも利用者のblog記事なども一通り見たのですが、
見つかるは全部関数なので、そもそもクラスでの利用を想定していないのだろうと当たりを付けて
影響なさそうなクロージャにしてしまいました

>>725
ミドルウェアの追加は想定していない、クライアントコードなので特に支障はないと判断してます
本音を言うと、ただ書き忘れただけなのですけど。
0728デフォルトの名無しさん
垢版 |
2017/07/26(水) 16:04:27.16ID:2Xw6+C7K
ちなみに、なんでクラスで書こうと思ったのかと言えば
クロージャとクラスのインスタンスが内部的には等価だと思っていたからです
0730デフォルトの名無しさん
垢版 |
2017/07/26(水) 16:56:23.68ID:p1ZvRLSy
>>728
将来の自分のためにも流儀は合わせておくべき。
コード量の削減に影響するとも思えない。
0731デフォルトの名無しさん
垢版 |
2017/07/26(水) 21:17:16.61ID:EkC4vcRh
>>728
thisが違うことから等価じゃないことが証明されてるでしょ?
じゃあクラスで書こうと思った理由は消滅してるよね?
ならクラスで書くのをやめるべきだよね?
0733デフォルトの名無しさん
垢版 |
2017/08/27(日) 14:46:16.26ID:JVSE3drk
forkの経緯を眺めてたけどこれio.jsの時と違って結構めんどくさいな
これまでのNodeは人治主義のOSSだったってことか
0734デフォルトの名無しさん
垢版 |
2017/08/27(日) 15:42:03.26ID:XHFSs/EA
シングルスレッドだから遅くならないって言うけど
マルチスレッド言語で動的にスケールすればいいでしょ?
0738デフォルトの名無しさん
垢版 |
2017/08/27(日) 16:05:49.89ID:iBnNI7N6
シングルスレッドだから遅くならないなんて言っている人なんているかねぇ?
C10Kの話ならかなりニュアンスが違う。
0739デフォルトの名無しさん
垢版 |
2017/08/27(日) 16:12:18.21ID:HAnDkIM0
優秀な一名をこき使うから速いんだな。
ほんの少しでも空時間があったら仕事をぶっこむ。
人間なら死ぬわ。
0740デフォルトの名無しさん
垢版 |
2017/08/27(日) 16:17:42.17ID:XHFSs/EA
>>738
メモリ使用量が増えないってnodeのメリットじゃないの?
そんなのスケールアウトで十分だと思うんだが
0741デフォルトの名無しさん
垢版 |
2017/08/27(日) 16:22:23.64ID:sNhXAArf
> メモリ使用量が増えないってnodeのメリットじゃないの?
だれがメモリ使用量が増えないというメリットが有ると
いったんだ? お前の脳内か?
0742デフォルトの名無しさん
垢版 |
2017/08/27(日) 17:35:42.54ID:0P4eY3kj
nodeが良かったのはは非同期apiにより
プロセスあたりのリクエスト処理数を高めたからでしょう?
マルチプロセスにすればその分リクエスト処理数もある程度スケールしてくれる。ただしdbアクセスは考慮しないものとする
0746デフォルトの名無しさん
垢版 |
2017/08/29(火) 09:43:28.14ID:PNzW02X+
let dict = {}
で辞書のように使おうとしたんだけど、
dict['constructor']ではまった
アレイにkvペア入れて頑張るしか無いの?
16万項目あるので線形検索は躊躇う
0748デフォルトの名無しさん
垢版 |
2017/08/29(火) 11:53:07.27ID:sgTDSrY2
>>746
16万項目のデータをメモリ内に置くのか。
もっといい方法無いかな。realmとか使えればいいんだけど。
0749デフォルトの名無しさん
垢版 |
2017/08/29(火) 11:59:45.48ID:PNzW02X+
Object.createで上手くいった
try catchで検出してエラーになるのを、別管理と考えてたけど、すっきりした
さんきゅ
0750デフォルトの名無しさん
垢版 |
2017/08/29(火) 12:07:49.40ID:PNzW02X+
>>748
db構築に使うフォーマット変換ツールなので、適切な時間で終了する事が要件で
利用リソース量はあまり気にしない
0751デフォルトの名無しさん
垢版 |
2017/09/03(日) 12:30:07.14ID:U+3KDr2c
eslintとそれにぶら下がるプラグイン本当互換性がない
ツール入れる所でトラブらないといけないとかだるいわ
これだからJavaScriptなんて書きたくないんだよ
0755デフォルトの名無しさん
垢版 |
2017/09/04(月) 11:57:48.72ID:xXgpQO1P
>>742
そういうのもNginxやApacheがある程度やってくれるようになってるからね。
後ろは好きな言語をそのまま使えばいい。PHP-FcgidとかuWSGIとかRackとかServletとか。
0756デフォルトの名無しさん
垢版 |
2017/09/04(月) 18:58:52.14ID:XPn2hQsA
>>755
非同期apiはphp処理系では無理じゃない?phpはインスタンスの生存時間がリクエストを受けてからレスポンスを返すまでの固定だよね。

どうやってイベントループ回すの?
0757デフォルトの名無しさん
垢版 |
2017/09/04(月) 20:39:48.99ID:tWvDAnX3
>>756
フレームワークによってはイベントループで生存期間が無限のものもあったはず。
前の会社で、そういうWebSocketフレームワーク使おうとしてたよ。

…そんな用途全く想定してない普通のPHP用のオレオレライブラリ組み合わせて
メモリリーク起こしてたけど(藁
0758デフォルトの名無しさん
垢版 |
2017/09/05(火) 08:00:30.55ID:JsNUX7wh
>>757
メモリリーク起こすなら使えないな。
phpってインスタンスの生存時間短い前提だから、
メモリリークってさほど気にしなくて良い言語なのかも。
素直にjsでいい気がするけどね。今の時代。
yahooで勤務してる知り合いも今はjsでサーバサイドを書いてるってさ。
0759デフォルトの名無しさん
垢版 |
2017/09/05(火) 14:51:11.75ID:x6NjkUnp
もともとCGIはリクエスト毎にプロセス作ってサービスしてた
なので、一つのリクエストが終了するとperlやphpのプロセスも終了するので、オブジェクトを解放(リファレンス外す)しないCGIが多くある

ところが、これじゃおせーよと言うことで、終了させないで無理やりに複数リクエストを処理させる仕組みをでっち上げた
これがPHP-FcgidとかuWSGI

リークしまくりのサービスが出来上がり

三菱とかやりそうだろ
0760デフォルトの名無しさん
垢版 |
2017/09/05(火) 15:05:46.14ID:EAdtS/tk
だから一定数のリクエストを処理したらプロセス再起動する
三菱でも大丈夫
0762デフォルトの名無しさん
垢版 |
2017/09/05(火) 16:00:05.67ID:JsNUX7wh
>>760
なるほどね。大雑把な作りだ。
大昔Dephiの案件をやった時に、PLが
ひとかたまりのEXEを画面ごとにバラバラのEXEにして
切り替えるたびに終了させる仕組みを作り出して、メモリリークを
極力抑える仕様にしてたの思い出した(データはDBにおいてる)
0766デフォルトの名無しさん
垢版 |
2017/09/06(水) 22:59:23.06ID:CWS2BygD
三菱電機インフォメーションシステムズ (MDIS) 製のソフトウェアは、
1時間に400以上リクエストを送られると他のリクエストの処理が不可能になる不具合を含んでいた

これか?
9秒に1回以上で破たんするなんてどんな実装か興味津々
0768デフォルトの名無しさん
垢版 |
2017/09/07(木) 03:05:39.43ID:x1ExMc+m
そもそもDOMとのメモリリークとかまともに対応してきたJS界のエンジンが優秀過ぎるだけで
他のサーバサイド言語で環境を跨いた循環参照とか上手く処理できるエンジンは無いし、他のGC技術や調整も何年も遅れてる
0769デフォルトの名無しさん
垢版 |
2017/09/07(木) 06:19:08.39ID:+w9zPnXt
WebアプリでDBコネクションを10分間も保持するなんてどういう実装したらできるんだろ?
普通にやったんじゃできないよね。
■ このスレッドは過去ログ倉庫に格納されています

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