元記事
調査方法
とりあえず、gulpの各タスクに、 process.memoryUsage()
を埋め込んで、実行。
開始と終了時に計測するようにした。
終わりは、on('end', ・・・・)
でイベント拾って出すようにした。
本当は、もっとうまいやり方があるのかも知れない。。。
原因
tsのビルドタスクが、3つくらい並列して実行しているところがあって、そこで一気にメモリを喰って発生していたみたい。。。
特に依存関係もないし、分割したら問題なく動いた。
ちなみに発生していた箇所のタスクの実装は、以下みたいな感じ。
gulp.task('A', [b, c, d], function () { ・・・・ });
他の流れにそって、並列実行するようにしたのがアカンかった。。。
というか、最初から並列実行するように作らんでもええやんけ!って、最初に作った人を呪ってしまった。
俺も同じことしそうだから、他人を責めるのは良くないね。
回避方法
run-sequence
っていうnodeモジュールを使えば、順次実行制御できるようになる。
gulp内の機能にないのが、面倒くさいところではあるが。。。
感想
gulpは並列実行できるのは良いんだけど、並列でやりすぎてメモリが枯渇するのは、どうにかできないもんだろうか?