Нет прироста производительности - совсем наоборот.Построение возможно пустого массива намного проще, чем рекурсивный поиск по всем парам ключ-значение и построение из них строки.
Даже когда рассматриваемый объект равен простой пустой объект,JSON.stringify
на порядок медленнее:
const o = {};
const p0 = performance.now();
for (let i = 0; i < 1e7; i++) {
Object.keys(o).length === 0
}
const p1 = performance.now();
for (let i = 0; i < 1e7; i++) {
JSON.stringify(o) === '{}'
}
const p2 = performance.now();
console.log(p1 - p0);
console.log(p2 - p1);
(в браузерах на базе Chrome, по крайней мере, на FF, JSON.stringify
для меня примерно в 3 раза медленнее)
Что-то, что выглядиткак может быть немного быстрее, чем построение массива с Object.keys
будет использовать цикл for..in
, например
function isEmpty(o) {
for (const key in o) {
return false;
}
return true;
}
const o = {};
const p0 = performance.now();
for (let i = 0; i < 1e7; i++) {
Object.keys(o).length === 0
}
const p1 = performance.now();
for (let i = 0; i < 1e7; i++) {
for (const key in o) {
continue;
}
}
const p2 = performance.now();
console.log(p1 - p0);
console.log(p2 - p1);
Выше for..in
на моей машине на порядок быстрее на FF и примерно на 1/4 быстрее на Chrome.
(но учтите, что логика не совсем та же, потому что for..in
выполняет итерации и для унаследованных ключей)