サードパーティによる遅延評価の実施


function* f1() {
  yield 10;
  yield 20;
  return "완료";
}
const gen = f1();
私のアシスタントの文法を知っている人でも、私のアシスタントの使い方を知らない人もいます.(実は私も知りません!)
今日は、マネージャによってパフォーマンスを向上させる遅延評価(lazy evaluation)という技術について簡単に説明します.

📋 評価の遅延


遅延評価はJavaScriptにのみ存在する概念ではなく,関数式プログラミングにおける概念である.
遅延評価の概念とコードを簡単に紹介します.
const a = 3 + 5;
const b = 2 + 4;

console.log(a); // 8
変数aは、3+5の計算結果8を割り当て、コードの最下部で出力(使用)する.変数bは、2+4の結果6を割り当てたが、使用しなかった.
では、未使用の変数bの値を計算する必要がありますか?
遅延評価は遅延評価であり、このような不要なコード実行(計算)を回避するために計算を遅らせる方法を実際の状況に基づいて例示する.

表遅延評価とマネージャ


1からNの間の数字のうち、5つの10の倍数が小さい順に検索され、返されると仮定します.
function makeArray(N) {
  const arr = [];
  let idx = 1;
  while (idx <= N) {
    arr.push(idx++);
  }
  return arr;
}

function dividableWith10(iter) {
  const arr = [];
  for (const elem of iter) {
    if (elem % 10 === 0) {
      arr.push(elem);
    } else if (arr.length === 5) {
      return arr;
    }
  }
}

const arr = makeArray(50)
console.log(dividableWith10(arr)); // [ 10, 20, 30, 40, 50 ]
ほとんどの人が似たような形でコードを書いていると思います.ブラウザを使うと、これらのコードをより効果的に改善することができます.
// 제너레이터 사용
function* makeIterable(N) {
  let idx = 1;
  while (idx <= N) {
    yield idx++;
  }
}

// dividableWith10 함수는 그대로입니다.
function dividableWith10(iter) {
  const arr = [];
  for (const elem of iter) {
    if (elem % 10 === 0) {
      arr.push(elem);
    } else if (arr.length === 5) {
      return arr;
    }
  }
}

const iter = makeIterable(50);
console.log(dividableWith10(iter)); // [ 10, 20, 30, 40, 50 ]
一見すると、違いに気づかないかもしれませんが、dividableWith10関数に渡されるパラメータが変化し、前に1~Nの配列が渡された場合、新しいコードは1つ以上のJENNERオブジェクトをパラメータとして渡します.

📈 同じ動作、異なるパフォーマンス


Nが大きいほど、2つのコードの実行速度が大きくなります.アレイを使用する場合は、1~Nのアレイ全体を転送し、その値を使用できますが、ブラウザオブジェクトを使用する場合は、必要な範囲内で任意の数の値しか呼び出せず、I/Oパフォーマンスが大幅に向上します.
私のブラウザを活用すれば、パフォーマンスのほかにも多くのメリットがあります.今日紹介した遅延評価はJavaScriptだけでなく、PythonやJavaなどの言語にも適用されますので、時間をかけて理解してください.😆