Есть достаточно большой проект на node js. Statefull приложение. На старте загружаю данные из Монго и на их основе создаю свои классы. Все они унаследованы от "основного класса", в котором содержится большая часть используемых методов и логика сохранения в Монго. Многие классы наследуются еще и от других классов.
Наследование реализовано примерно так:
MyClass.prototype = _.extend(Object.create(CommonClass.prototype),SpecialClass.prototype,...);
Есть класс, у которого более чем 30 атрибутов - объекты созданные таким образом. Назовем его предмет.
Получается, что я как бы примешиваю необходимый функционал в прототип класса.
У меня есть несколько тысяч предметов, я раз в 100 мс запускаю их перебор, где для каждого из них произвожу простые действия - сравниваю значения атрибутов и вызываю прототипные методы, изменяющие какой-то атрибут.
Время перебора с модификацией 1 000 предметов занимает примерно 90 мс.
Я пробовал делать все тоже самое на объектах вида
var Ob = function(opts){
this.attr1 = opts.attr1;
.....
}
Ob.prototype.attr25 = 500;
Ob.prototype.method1 = function(){
//расчет расстояния между двумя точками, координаты заложены в атрибутах, некоторые лежат в прототипе (attr25)
var distance = Math.sqrt(...)
return distance < 1000;
}
Перебор 20 000 таких объектов занимает меньше времени!
Почему так?
Насколько я вообще правильно подошел к реализации?
Есть возможность все переделать, но я не знаю как лучше.