⊗jsSpOtMm 278 of 294 menu

Optimisation de la consommation mémoire en JavaScript

Toutes les variables créées sont stockées dans la mémoire vive de l'ordinateur. Parfois, écrire du code sans réfléchir peut augmenter brusquement la consommation de mémoire.

Regardons un exemple. Supposons que nous ayons pour tâche de trouver la somme des nombres entiers de 1 à 100000000. Supposons que nous ayons une fonction qui remplit un tableau avec des nombres entiers dans un intervalle donné :

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

Supposons que nous ayons également une fonction qui trouve la somme des éléments d'un tableau :

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

En combinant ces fonctions, on peut facilement résoudre la tâche posée :

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

La solution est élégante. Elle présente cependant un problème : elle consomme une quantité énorme de mémoire vive.

Faisons le calcul. La fonction fillArr crée un tableau avec 100000000 nombres. Supposons que JavaScript alloue 2 octets pour un nombre - alors le stockage de notre tableau nécessitera 200000000 octets, soit environ 200 mégaoctets de mémoire vive.

Mais en réalité, bien plus de mémoire vive sera nécessaire en raison des frais généraux très importants dans JavaScript pour le stockage des tableaux.

En comprenant le problème, il est facile de créer une fonction qui résout la tâche et consomme pratiquement pas de mémoire vive :

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

Résolvons la tâche avec notre fonction :

let sum = getNumsSum(100000000);

Un programmeur avait pour tâche de trouver le nombre de nombres divisibles sans reste par 7, situés dans un intervalle donné. Il l'a résolue de la manière suivante :

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

Expliquez ce qui ne va pas avec ce code. Modifiez le code pour le rendre plus optimal.

Un programmeur avait pour tâche de trouver la somme des diviseurs d'un nombre. Il l'a résolue de la manière suivante :

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);

Expliquez ce qui ne va pas avec ce code. Modifiez le code pour le rendre plus optimal.

Français
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Nous utilisons des cookies pour le fonctionnement du site, l'analyse et la personnalisation. Le traitement des données est effectué conformément à la Politique de confidentialité.
accepter tout personnaliser refuser