私が正しく質問していることを願っていますが、基本的に、NodeJSで、(長い) 計算の後にデータの最終的なチャンクではなく、CommonJSモジュールにデータのストリームを返す方法はありますか? 複数の方法があると仮定すると、それらのテクニックは何ですか?
たとえば、 CommonJSモジュールfindPrimes
として記述された関数があるとします。
find-primes.js
/**
* @module findPrimes
* @param {int} n - Find all primes less than this number
* @return {array}
*/
module.exports = function(n) {
if (n < 2) {
return [];
} else if (n === 2) {
return [2];
}
var primes = [2];
for (let i = 3; i < n; i += 2) {
let is_prime = true;
let sq = Math.ceil(Math.sqrt(i));
for (let t = 2; t <= sq; t++) {
if (i % t === 0) {
is_prime = false;
break;
}
}
if (is_prime) {
primes.push(i);
}
}
return primes;
};
ご覧のとおり、この関数は、入力より小さいすべての素数の配列を返します。これらの数値をすべて計算した後、配列を返します。
このモジュールをノード スクリプトで使用するとします。
index.js
const primes = require('./find-primes.js');
// Usage: `node index.js <num>`
let primes_less_than = process.argv[2];
console.log(primes(primes_less_than));
の引数で上記のスクリプトを実行すると25
、次の (予想される) 出力が得られます。
$ node index.js 25
[ 2, 3, 5, 7, 11, 13, 17, 19, 23 ]
ただし、10,000,000 など、はるかに大きな数を渡したとします。
$ node index.js 10000000
# Takes a while to run before outputting the numbers...
これは機能しますが、理想的には、プログラムが終了する前に、計算した数値の書き出しを開始したいと考えています。
したがって、私のプログラムの実行にはまだ時間がかかりますが、「最初にすべてを計算してからすべての結果を出力する」よりもはるかに高速に画面に情報を出力し始めます。
この効果を達成するための最良の方法は何ですか? ストリーム? 約束?
私はこのためのあらゆるテクニックを受け入れています、ありがとう。