Prototipo de Javascript vs Funciones generales - Rendimiento / legibilidad

Así que escribí estas pruebas para ver cuánto más rápido usarían los prototipos ...

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");
​

Mis resultados:

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

Escribí las dos primeras pruebas y cuando vi los resultados, pensé por qué los estaba viendo ... Creo que la razón es que el objeto que retorna es lento debido al hecho de que se crean dos nuevas instancias de propiedades de métodos cada vez el objeto se crea una instancia mientras que el método de prototipo es más rápido porque solo crea la función una vez. La proximidad del rendimiento entre las llamadas de función general y los prototipos me hace pensar que tengo razón en mi suposición.

Así que mi primera pregunta es, ¿tengo razón acerca de mi suposición?

Mi segunda pregunta es, ¿cómo puedo hacer que la escritura con prototipos sea más legible pero manteniendo el alto rendimiento? ¿Hay una manera de codificar prototipos de manera que parezca que están en una "clase" (si eso tiene sentido)

* EDITAR - Olvidé hacer una prueba con Object.create (), solo hice una y publicé los resultados. JSFiddle:http://jsfiddle.net/k2xl/SLVLx/).

Ahora me pongo:

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 

Parece que esta podría ser la solución?

Respuestas a la pregunta(2)

Su respuesta a la pregunta