@DeveleinDev

Почему время наполнения массива отличается?

Приветствую!
Ради эксперимента написал две функции, которые выполняют одно и то же действие (наполняют массив указанного размера), но делают это по-разному. Отличие видно в коде.

П.с. на названия "старый" и "новый" не обращайте внимания, сделал исключительно для удобства.

const fillList = (size) => {
    const list = new Array(size);

    for (let i = 0; i < size; i++) {
        list[i] = i;
    }

    return list;
};

const fillListOld = (size) => {
    const list = [];

    for (let i = 0; i < size; i++) {
        list.push(i);
    }

    return list;
};

const timer = (size) => {
    console.log(`Наполняем старым способом`);
    const date = new Date();
    fillListOld(size);
    const date2 = new Date();
    console.log(`Наполнили за ${date2.getTime() - date.getTime()}`);
    console.log(`Наполняем новым способом`);
    const date3 = new Date();
    fillList(size);
    const date4 = new Date();
    console.log(`Наполнили за ${date4.getTime() - date3.getTime()}`);
};

const size = 100000000;
timer(size);
timer(size);
timer(size);


Результат отработки:
Наполняем старым способом
Наполнили за 1079
Наполняем новым способом
Наполнили за 2698
Наполняем старым способом
Наполнили за 811
Наполняем новым способом
Наполнили за 2620
Наполняем старым способом
Наполнили за 890
Наполняем новым способом
Наполнили за 2659

Собственно, у меня два вопроса:
1. Почему время наполнения массива старым способом почти в 3 раза меньше, чем новым?
2. Почему при повторном запуске время наполнения старым способом уменьшилось на 200мс, а у нового вообще не произошло изменений? (полагаю, это связано с оптимизацией движком, но хочется больше деталей)

Запускал на nodejs 21.6.1
  • Вопрос задан
  • 468 просмотров
Пригласить эксперта
Ответы на вопрос 1
@ZhenyaMak
Писать качественный софт? Пфф, это не для меня.
Метод push медленнее, чем обращение к индексу на прямую. Ну и выделение памяти через new Array даёт свои бонусы. Так как ты выделил фиксированное количество
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы