Skip to content

Instantly share code, notes, and snippets.

@khursani8
Created September 17, 2019 16:00
Show Gist options
  • Select an option

  • Save khursani8/e00b1c258fb21f3db8915cdeedc894e3 to your computer and use it in GitHub Desktop.

Select an option

Save khursani8/e00b1c258fb21f3db8915cdeedc894e3 to your computer and use it in GitHub Desktop.
node performance test
let crypto = require('crypto');
const salt = 'lone-star',
iterations = 10000,
len = 16,
digest = 'sha512';
const REPEATS = 10;
const NUMBER_COUNT = 10000000;
const CRYPTO_COUNT = 1000;
const _add = function (n1, n2) {
return n1 + n2;
}
function _hash(text) {
crypto.pbkdf2Sync(text, salt, iterations, len, digest).toString('hex')
}
function one(text) {
return _hash(text)
}
function double(text) {
return one(text)
}
function triple(text) {
return double(text)
}
a = 4;
b = 5;
const alternatives = [
{
name: "No function call simple add loop "+NUMBER_COUNT,
action: function (){
let c;
for (let i = 0; i < NUMBER_COUNT; i++) {
c = a + i;
}
}
},
{
name: "Function call simple add loop "+NUMBER_COUNT,
action: function (){
let c;
let add = _add;
for (let i = 0; i < NUMBER_COUNT; i++) {
c = add(a,i);
}
}
},
{
name: "No function call sha512 constant param loop "+CRYPTO_COUNT,
action: function (){
let c;
for (let i = 0; i < CRYPTO_COUNT; i++) {
c = crypto.pbkdf2Sync("test", salt, iterations, len, digest).toString('hex');
}
}
},
{
name: "Function call sha512 constant param loop "+CRYPTO_COUNT,
action: function (){
let c;
let hash = _hash;
for (let i = 0; i < CRYPTO_COUNT; i++) {
c = hash("test");
}
}
},
{
name: "No function call sha512 random param loop "+CRYPTO_COUNT,
action: function (){
let c;
for (let i = 0; i < CRYPTO_COUNT; i++) {
c = crypto.pbkdf2Sync(i+"", salt, iterations, len, digest).toString('hex');
}
}
},
{
name: "Function call sha512 random param loop "+CRYPTO_COUNT,
action: function (){
let c;
let hash = _hash;
for (let i = 0; i < CRYPTO_COUNT; i++) {
c = hash(i+"");
}
}
},
{
name: "Nested Triple Function call sha512 random param loop "+CRYPTO_COUNT,
action: function (){
let c;
let hash = triple;
for (let i = 0; i < CRYPTO_COUNT; i++) {
c = hash(i+"");
}
}
}
];
alternatives.forEach(function(alternative){
let start = new Date();
var repeat = REPEATS;
for (var i=0; i< repeat;i++) {
alternative.action();
}
var end = new Date();
var totalMs = end.valueOf() - start.valueOf();
var averageMs = totalMs/repeat;
var result = alternative.name + " took average " + averageMs + "ms - (" + repeat + " times, total time: " + totalMs + "ms)";
if (typeof console !== "undefined") {
console.log(result);
}
if (typeof document !== "undefined"){
document.body.innerHTML += result + "<br>";
}
});
// No function call simple add loop 10000000 took average 5.2ms - (10 times, total time: 52ms)
// Function call simple add loop 10000000 took average 5.2ms - (10 times, total time: 52ms)
// No function call sha512 constant param loop 1000 took average 8622.5ms - (10 times, total time: 86225ms)
// Function call sha512 constant param loop 1000 took average 8716.3ms - (10 times, total time: 87163ms)
// No function call sha512 random param loop 1000 took average 8829.1ms - (10 times, total time: 88291ms)
// Function call sha512 random param loop 1000 took average 8903.6ms - (10 times, total time: 89036ms)
// Nested Triple Function call sha512 random param loop 1000 took average 8949.5ms - (10 times, total time: 89495ms)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment