Tengo este proyecto, llamado Memcached.Js, que es un puerto del servidor de Memcached para Node.js.Buffer vs String speed: ¿Por qué String es más rápido?
He estado jugando arround con cadenas y buffers, comparando la memoria de la huella y el rendimiento. Para la memoria, no hay dudas de que el buffer es la elección correcta.
Pero para mi sorpresa lo mismo no es cierto para el rendimiento. Realizar la manipulación de cadenas es más rápido que usar el buffer. Esto es lo que he intentado:
// Option 1: data.toString() - amazing, but it's the best one
var commandDataStr = mdata.data.toString().substr(startPos, bytes);
var commandData = new Buffer(commandDataStr);
// Option 2: data.slice().toString() - the same as above... What?
var commandDataStr = mdata.data.slice(startPos, startPos + bytes).toString();
var commandData = new Buffer(commandDataStr);
// Option 3: data.slice() - bad
var commandData = mdata.data.slice(startPos, startPos + bytes);
// Option 4: data.copy() - bad as well
var commandData = new Buffer(bytes);
mdata.data.copy(commandData, 0, startPos, startPos + bytes);
El código completo está aquí: https://github.com/dalssoft/memcached.js/blob/master/lib/memcached.ascii.commands.js#L72
Prueba el código: ruby test/from_clients/perf_test.rb
Las pruebas mostraron que las cadenas son más rápidos que búfer. Dado que no es lo que esperaba, creo que probablemente estoy haciendo algo mal, pero no puedo encontrar exactamente lo que es.
¿Alguien me puede ayudar aquí?
¡Tks!
¿Puede reproducir el comportamiento de la velocidad con un pequeño caso de prueba? Si es así, envía un informe de error. – btilly
Estoy revisando el rendimiento con este script: https://github.com/dalssoft/memcached.js/blob/master/test/from_clients/perf_test.rb –