Это может показаться особенно неясным моментом, однако я пытаюсь улучшить свое обоснование на языке Javascript в целом (более конкретно, его лучшие и наиболее эффективные методы).
Во время тестирования теории в http://jsperf.com/ Я придумал некоторые нечетные результаты:
Предположим, что у нас есть два "идентичных" прототипа, которые определяются следующим образом:
Object1
var Object1 = function() {}
Object1.prototype.defaults = {
radius: 400,
up: 1
}
Object1.prototype.centerOffset = function() {
return this.defaults.radius*this.defaults.up;
}
Object2
var Object2 = function() {}
Object2.prototype = {
defaults: {
radius: 400,
up: 1
},
centerOffset: function() {
return this.defaults.radius*this.defaults.up;
}
}
Object1 имеет согласованное (если предельное: ~ 3%) преимущество перед Object2 при выполнении следующих простых операций:
var o = new Object1();
var offset = o.centerOffset();
&
var o = new Object2();
var offset = o.centerOffset();
Вы можете запустить тесты самостоятельно здесь. Я использую Chrome 25 на OSX 10.6.8.
Я хотел бы знать следующее:
- В чем причина этой разницы в производительности?
- Является ли это показателем эффективности какой-либо лучшей практики в javascript?
Спасибо заранее, ребята.
EDIT: Спасибо за ответы - как уже упоминалось, дальнейшее тестирование с моей стороны, похоже, предполагает, что эта проблема - браузер (или, скорее, Javascript-компилятор). Я тестировал дополнительно в Safari, IE 10 и Firefox. IE 10 и Firefox оба дали результаты настолько близко, чтобы не отличаться. Safari выполнил операции над Object2 несколько быстрее, чем операции над Object1 (в среднем около 2%). Я хотел бы знать, что такое outlier (Other), поскольку разница в производительности в этом случае кажется существенной.