jsPerf.app is an online JavaScript performance benchmark test runner & jsperf.com mirror. It is a complete rewrite in homage to the once excellent jsperf.com now with hopefully a more modern & maintainable codebase.
jsperf.com URLs are mirrored at the same path, e.g:
https://jsperf.com/negative-modulo/2
Can be accessed at:
https://jsperf.app/negative-modulo/2
// код для генерации данных
const alph = 'qwertyuiop[]asdfghjkl;\'\\zxcvbnm,./QWERTYUIOPASDFGHJKLZXCVBNM"<>';
const getRandomStr = (length) => Array(length)
.fill(null)
.reduce((acc) => acc + alph[Math.floor(Math.random()*alph.length)], '')
// создаём новую строку в памяти для более честной работы
.replace('$', '');
const getRandomSubstr = (str, length) => {
const start = Math.floor(Math.random()*(str.length - length));
return str
.substring(start, start + length)
// создаём новую строку в памяти для более честной работы
.replace('$', '');
}
//данные
const bigStr = getRandomStr(1<<20);
const replaceArr = Array(10).fill(0).map(() => [getRandomSubstr(bigStr, 50), getRandomStr(1<<20)]);
// реализации
const replaceByArr = (str, arr) => {
const indexes = arr
// ищем места для замены через indexOf
.map(([placeholder, content]) => {
const start = str.indexOf(placeholder);
if (start === -1) {
return null;
}
return {
start,
end: start + placeholder.length,
content,
};
})
.filter(item => item !== null)
// сортируем их в порядке вхождения в строку
.sort((a, b) => a.start - b.start);
// если ничего не нашли, возвращаем исходную строку
if (!indexes.length) {
return str;
}
return indexes.reduce((acc, {start, end, content}, i, arr) => {
const next = arr[i + 1];
// текс находящийся между текущим плейсхолдером и следующим
const tailPart = str.substring(end, next ? next.start : undefined);
return acc + content + tailPart;
}, str.substring(0, indexes[0].start))
}
const simpleReplaceByArr = (str, arr) => arr.reduce((acc, [placeholder, content]) => str.replace(placeholder, content), str);
Ready to run.
Test | Ops/sec | |
---|---|---|
indexOf + reduce + substring |
| ready |
recude + replace |
| ready |
You can edit these tests or add more tests to this page by appending /edit to the URL.