Влияет ли на производительность количество методов у наследуемого класса?
Добрый день!
Пытался провести тесты, но результаты неоднозначны.
Есть 100тыс объектов
Вариант 1.
Каждый объект экземпляр класса у которого 100 методов (имею ввиду prototype)
Вариант 2.
Каждый объект является просто экземпляром Object.
Вопрос, будет ли разница в скорости создании этих объектов, и будет ли разница в потреблении памяти. Если есть разница, то какая.
Может быть будет тут тот кто, так глубоко нырял :)
Разница будет такая же как между объектом без методов и объектом с каким-то количеством методов. Разве что прибавится поиск метода по дереву наследования.
Результаты неоднозначные потому что целевая разница сильно меньше погрешности ваших вычислений, то есть попросту эта разница настолько мала, что вы как пользователь движка никогда не сможете её вычислить
Антон В., с точки зрения потребления памяти разницы между {} и экземпляром класса нет, т.к. ссылки на Object и класс-конструктор весят одинаково. Значит разница только в организации исходного класса, то есть объекта с методами
class Small {
data = {}
consturtor(data){
this.data = data
}
method1(x){
return x*x
}
}
class Big {
data = {}
consturtor(data){
this.data = data
}
method1(x){
return x*x
}
method2(x,y){
return x%y*y
}
# тут идет обьявление еще 100 методов.
method101(x){
return this.method1(x)
}
}
let obj_small = new Small();
let obj_big = new Big();
В данном упрощенном примере, если создать 100тыс obj_small и 100тыс obj_big
разницы в скорости создания и использования памяти не будет?
Антон В., вопрос какой то странный... Вы пишете столько методов, сколько нужно, это зависит от задачи. Какой смысл думать об их количестве, если вы не сможете выполнить задачу, не написав достаточно кода?
Разница в занимаемой памяти будет - чем больше кода, тем больше памяти от занимает, очевидно (но, как сказано выше - это одноразово, то есть само количество созданных объектов роли не играет). В скорости исполнения - за все движки не скажу, а в v8 разницы не будет точно.
Денис Инешин, Спасибо большое, минус одно сомнение!) Теперь можно смелее использовать наследование, не беспокоясь хотя бы в этом вопросе за память и скорость!