メモ化を用いた JavaScript 関数の最適化

Beginner

This tutorial is from open-source community. Access the source code

はじめに

この実験では、JavaScript におけるメモ化の概念を検討します。メモ化は、高コストの関数呼び出しの結果をキャッシュし、同じ入力が再度発生した場合にキャッシュされた結果を返すことで、関数のパフォーマンスを最適化するために使用される技術です。この実験を通じて、Map オブジェクトを使用して JavaScript におけるメモ化を実装する方法を学びます。

これは Guided Lab です。学習と実践を支援するためのステップバイステップの指示を提供します。各ステップを完了し、実践的な経験を積むために、指示に注意深く従ってください。過去のデータによると、この 初級 レベルの実験の完了率は 100%です。学習者から 92% の好評価を得ています。

メモ化関数

コーディングを始めるには、ターミナル/SSH を開き、node と入力します。この関数は、メモ化された(キャッシュされた)関数を返します。この関数を使用する手順は以下の通りです。

  1. 空のキャッシュを作成するために新しい Map オブジェクトをインスタンス化します。
  2. メモ化関数に渡される単一の引数を持つ関数を返します。関数を実行する前に、その特定の入力値に対する出力が既にキャッシュされているかどうかを確認します。もしキャッシュされていれば、キャッシュされた出力を返します。そうでなければ、それを格納して返します。
  3. 必要に応じて this コンテキストを変更できるようにするために function キーワードを使用します。
  4. 返された関数のプロパティとして cache を設定して、それにアクセスできるようにします。

ここにメモ化関数を実装するコードがあります。

const memoize = (fn) => {
  const cache = new Map();
  const cached = function (val) {
    return cache.has(val)
      ? cache.get(val)
      : cache.set(val, fn.call(this, val)) && cache.get(val);
  };
  cached.cache = cache;
  return cached;
};

この関数がどのように機能するかを見るには、anagrams 関数と一緒に使用できます。以下は例です。

const anagramsCached = memoize(anagrams);
anagramsCached("javascript"); // 時間がかかります
anagramsCached("javascript"); // キャッシュされているため、ほぼ即座に返されます
console.log(anagramsCached.cache); // キャッシュされたアナグラムのマップ

まとめ

おめでとうございます!あなたはメモ化関数の実験を完了しました。あなたの技術を向上させるために、LabEx でさらに多くの実験を練習できます。