170 похожих чатов

Const ITERATIONS = 100000; const fastArrayJoin = (array, separator = "")

=> {
const length = array.length;
const last = length - 1;
let result = "";
for (let i = 0; i < length; i++) {
result += i !== last ? array[i] + separator : array[i];
}
return result;
};

const generateString = (length = 32) => {
let result = '';
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
const charactersLength = characters.length;
for (let i = 0; i < length; i++) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
return result;
}

const generateArray = (length = 32) => {
return [...Array(length).keys()].map(() => generateString())
}

console.time("FastArrayJoin()");
for (let i = 0; i < ITERATIONS; i++) {
fastArrayJoin(generateArray(), ",")
}
console.timeEnd("FastArrayJoin()");

console.time("Array.join()");
for (let i = 0; i < ITERATIONS; i++) {
generateArray().join(",")
}
console.timeEnd("Array.join()");

12 ответов

8 просмотров

Array.join() быстрее

А за счет чего fastArrayJoin быстрее array.join?

John Doe
А за счет чего fastArrayJoin быстрее array.join?

А ты проверил самостоятельно? Менял местами методы? Менял число итераций? Менял размер и состав массива? По мне так код выглядит подозрительно, но я пока что не имею возможности проверить самостоятельно

Anton-Piliugin Автор вопроса

что можно поменять местами?

Anton Piliugin
что можно поменять местами?

То, что сравниваешь Вообще корректнее было бы вот тут разместить тест. И инициализировать массив как-то более внятно, например рандомными числами и/или строками

Anton-Piliugin Автор вопроса

Проблема с этим сайтом, что тесты нельзя разделить, он показывает результат одного теста как лучший: https://jsbench.me/mql5xwrymg/1

Anton Piliugin
Проблема с этим сайтом, что тесты нельзя разделить...

Это может быть удобно для попарного сравнения (на телефоне у меня для строк и смешанного варианта нативный метод медленнее, для чисел быстрее) Но никто не мешает в один тест запихнуть сразу три проверки Но мне по прежнему не нравится инициализация. И если правильно понял, размер массива маленький. Всё же лучше бы на больших массивах проверять Хотя возможно для конкретной задачи нужны конкретные условия. Где там этот метод используется? Что конкатенируется?

Anton-Piliugin Автор вопроса
Алексей Попов
Это может быть удобно для попарного сравнения (на ...

Я только строки объединю в нескольких местах для создания HTTP заголовков

Anton-Piliugin Автор вопроса
Алексей Попов
Это может быть удобно для попарного сравнения (на ...

массив в тесте 64 элемента, можно менять, также как и длинну строк/чисел

Тест некорректен: все данные для тестирования должны быть подготовлены заранее, и должны быть одинаковы для каждого из вариантов. А в этом примере генерация данных происходит во время теста. Соответственно и замеряешь ты не сам join, а генерацию данных с последующим join Надо заранее подготовить три массива

Похожие вопросы

Обсуждают сегодня

@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Заметил в ghci 9.4.8: > :t (<*>) @((->)_) (<*>) @((->)_) :: (w -> (a -> b)) -> (w -> a) -> w -> b Разве не должно (w -> (a -> b)) быть записано как (w -> a -> b)? Это баг, ил...
Михаил
13
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Подобного рода ;Следующие три строки это директивы ассемблера, ;которые можно не задавать, т.к.работаем в Visual Studio. ;Символ ";" - это начало однострочного комментария ...
Егор Анелькин
3
Any electron dev here?
Sayanth Tezro
12
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
так это может кто что знает или использует что-то как макбук только не макбук? на 13…14 дюймов
Michael
9
Карта сайта