Javascript Prototype против общих функций - производительность / удобочитаемость

Поэтому я написал эти тесты, чтобы увидеть, насколько быстрее будет использовать прототипы ...

function User() {
    return {
        name: "Dave",
        setName: function(n) {
            this.name = n;
        },
        getName: function() {
            return this.name;
        }
    };
}

function UserPrototype() {
    if (!(this instanceof UserPrototype)) return new UserPrototype();
    this.name = "Dave";
}
UserPrototype.prototype.getName = function() {
    return this.name;
};
UserPrototype.prototype.setName = function(n) {
    this.name = n;
};

function setName(obj,name)
{
    obj.name = name;
}
function getName(obj)
{
    return obj.name;
}

//Test 1
var c = 10000000;
var tstart = 0;
var tend = 0;
tstart = new Date().getTime();
for (var j = 0; j < c; j++) {
    var newUser = User();
    newUser.setName("michael");
    newUser.getName();
}
tend = new Date().getTime() - tstart;
console.log("Returning object with methods: " + tend / 1000.0 + " seconds");
//Test 2
tstart = new Date().getTime();
for (var j = 0; j < c; j++) {
    var newUser = new UserPrototype();
    newUser.setName("michael");
    newUser.getName();
}
tend = new Date().getTime() - tstart;
console.log("Using prototypes: " + tend / 1000.0 + " seconds");
//Test 3
tstart = new Date().getTime();
for (var j = 0; j < c; j++) {
    var newUser = {name:"dave"};
    setName(newUser,"michael");
    getName(newUser);
}
tend = new Date().getTime() - tstart;
console.log("Using general functions: " + tend / 1000.0 + " seconds");
​

Мои результаты:

Returning object with methods: 9.075 seconds
Using prototypes: 0.149 seconds 
Using general functions: 0.099 seconds 

Я написал первые два теста, и когда я увидел результаты, я подумал о том, почему я их вижу ... Я думаю, причина в том, что возвращение объекта происходит медленно из-за того, что каждый раз создаются два новых экземпляра свойства метода объект создается, в то время как метод-прототип работает быстрее, поскольку он просто создает функцию один раз. Близость производительности между вызовами общих функций и прототипами заставляет меня думать, что я прав в своем предположении.

Итак, мой первый вопрос: я прав насчет своего предположения?

Мой второй вопрос: как я могу сделать написание прототипов более читабельным, но с сохранением высокой производительности? Есть ли способ кодировать прототипы так, чтобы они выглядели так, как будто они находятся в «классе»? (если это имеет смысл)

* РЕДАКТИРОВАТЬ - Я забыл сделать тест с Object.create (), просто сделал один и опубликовал результаты. JSFiddle: (http://jsfiddle.net/k2xl/SLVLx/).

Я получаю сейчас:

Returning object with methods: 0.135 seconds fiddle.jshell.net:63
Using prototypes: 0.003 seconds fiddle.jshell.net:72
Using general functions: 0.002 seconds fiddle.jshell.net:81
Returning object.create version: 0.024 seconds 

Похоже, это может быть решением?

Ответы на вопрос(2)

Ваш ответ на вопрос