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 ответов

21 просмотр

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 Надо заранее подготовить три массива

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта