Является ли глубокий объект медленным в JavaScript? Если да, то сколько
Простой вопрос: есть ли смысл использовать мелкий объект над более глубоким?
Когда я пишу код, я стараюсь использовать глубокий объект, чтобы его легко понять и классифицировать. Но мне интересно, делает ли этот обычай медленный код.
Я сделал тест, но я понятия не имею, правильно ли я делаю это.
//building necessary objects
var a = {};
var b;
b = a;
for (var i = 0; i < 100; i++) {
b["a"] = {};
b = b["a"];
}
var c = {};
//objects used
//a.a.a. ..(101 "a"s).. .a === {}
//c === {}
//1st test: shallow
var d;
var start = performance.now();
for (var i = 0; i < 1000000000; i++) {
d = c;
d = null;
}
var end = performance.now();
console.log('Shallow: ' + (end - start));
//2nd test: deeper
var e;
var start = performance.now();
for (var i = 0; i < 1000000000; i++) {
e = a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a;
e = null;
}
var end = performance.now();
console.log('Deeper: ' + (end - start));
Ответы
Ответ 1
- Вы используете нереалистичный код для проверки "реального кода", который является бессмыслицей.
- Вы используете Date.now(), который является приблизительным к отметке времени, и вы должны использовать функцию performance.now() для проверки скорости js. В настоящее время даже с хорошим тестовым кодом вы получаете неправильные результаты.
- Двигатели JS постоянно обновляются. Были времена, когда глубокие объекты были медленными, это не случай больше за последние х лет. Это такая старая проблема, что я даже не могу вспомнить годы или Google ничего ценного.
Ответ 2
Оптимизация в движке js позволяет напрямую обращаться к объектам и допускать обнуление объектов в переменной, которая занимает меньше времени. Таким образом, быстрее обращаться к ним без необходимости проходить через цепочку.
Например:
var a={a:{a:{}}}
var b=a.a.a
var c=b
// is faster than
var c=a.a.a
Для получения дополнительной информации прочтите следующее: Производительность JavaScript: переменные или один объект?