⊗jsSpOtMm 278 of 294 menu

JavaScriptにおけるメモリ消費の最適化

作成されたすべての変数は、 コンピュータのRAM(メモリ)に保存されます。 時には、考えなしにコードを書くことで、 消費メモリが急激に増加することがあります。

具体例を見てみましょう。 ここに、 1 から 100000000 までの 整数の合計を見つけるという課題があるとします。 与えられた範囲の整数で配列を埋める 関数があるとしましょう:

function fillArr(a, b) { let res = []; for (let i = a; i <= b; i++) { res.push(i); } return res; }

また、配列の要素の合計を求める 関数もあるとします:

function getSum(arr) { let sum = 0; for (let elem of arr) { sum += elem } return sum; }

これらの関数を組み合わせることで、 与えられた課題を簡単に解決できます:

let sum = getSum(fillArr(1, 100000000));

エレガントな解決策が得られました。しかし、 これには問題があります:膨大な量のRAMを 消費することです。

計算してみましょう。関数 fillArr100000000 個の数値を持つ配列を作成します。 JavaScriptが1つの数値に 2 バイトを割り当てると仮定すると、 この配列を保存するには 200000000 バイト、つまり約 200 メガバイトのRAMが必要になります。

しかし実際には、JavaScriptでは配列を保存する際の オーバーヘッドが非常に大きいため、 はるかに多くのRAMが必要になります。

この問題を理解すれば、この課題を解決し、 ほとんどRAMを消費しない関数を 簡単に作ることができます:

function getNumsSum(max) { let sum = 0; for (let i = 1; i <= max; i++) { sum += i; } return sum; }

私たちの関数を使って課題を解決します:

let sum = getNumsSum(100000000);

とあるプログラマーに、与えられた範囲内で 7 で割り切れる数の個数を 見つける課題がありました。 彼は次のように解決しました:

let arr = []; for (let i = 0; i <= 1000; i++) { if (i % 7 == 0) { arr.push(i); } } console.log(arr.length);

このコードの何が問題かを説明してください。 より最適なコードに書き直してください。

とあるプログラマーに、ある数の約数の和を 求める課題がありました。 彼は次のように解決しました:

function getDivisors(num) { let res = []; for (let i = 1; i <= num; i++) { if (num % i === 0) { res.push(i); } } return res; } function getSum(arr) { let sum = 0; for (let elem of arr) { sum += elem } return sum; } let sum = getSum(getDivisors(320)); console.log(sum);

このコードの何が問題かを説明してください。 より最適なコードに書き直してください。

日本語
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItalianoქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
当サイトでは、サイトの動作、分析、パーソナライゼーションのためにクッキーを使用しています。 データ処理はプライバシーポリシーに従って行われます。
すべて受け入れる 設定 拒否