Skip to content

Instantly share code, notes, and snippets.

@raman-kananovich
Last active January 5, 2018 10:45
Show Gist options
  • Save raman-kananovich/e347bf5fcd0f946513686d1b75acc41e to your computer and use it in GitHub Desktop.
Save raman-kananovich/e347bf5fcd0f946513686d1b75acc41e to your computer and use it in GitHub Desktop.
Perf test
function createTest(prepareData, iteration) {
const testData = prepareData();
return (iterationsCount) => {
for (let i = 0; i < iterationsCount; i++) {
iteration(testData);
}
};
}
function executeTest(testName, test, iterationsCount) {
const startTime = Date.now();
test(iterationsCount);
console.log(`${testName}`, Date.now() - startTime);
}
function simplePropAccess(obj) {
return obj.name;
}
function simpleMethodAccess(obj) {
return obj.name();
}
function createPlainObj() {
return { name: 'Wolf'};
}
function createObjWithProps() {
return {
_name: 'wolf',
get name() {
return this._name;
}
}
}
class DataProps {
constructor() {
this._name = 'Wolf';
}
get name() {
return this._name;
}
}
function createClassPropsObj() {
return new DataProps();
}
function createObjWithMethods() {
return {
_name: 'Wolf',
name: function() {
return this._name;
}
}
}
class DataMethods {
constructor() {
this._name = 'Wolf';
}
name() {
return this._name;
}
}
function createClassMethodObj() {
return new DataMethods();
}
const dataPropTest = createTest(createPlainObj, simplePropAccess);
const accessorPropTest = createTest(createObjWithProps, simplePropAccess);
const classPropTest = createTest(createClassPropsObj, simplePropAccess);
const objMethodTest = createTest(createObjWithMethods, simpleMethodAccess);
const classMethodTest = createTest(createClassMethodObj, simpleMethodAccess);
const iterationsCounts = [1, 10, 100, 1000, 10000, 100000, 1000000, 10000000];
iterationsCounts.forEach(iterationsCount => {
console.log('--------', iterationsCount, '----------');
executeTest('Simple data properties access', dataPropTest, iterationsCount);
executeTest('Simple accessor properties access', accessorPropTest, iterationsCount);
executeTest('Simple class properties access', classPropTest, iterationsCount);
executeTest('Simple obj methods access', objMethodTest, iterationsCount);
executeTest('Simple class methods access', classMethodTest, iterationsCount);
console.log();
});
@raman-kananovich
Copy link
Author

~/dev/perf_test  cat main.js | stb node
Warning: Permanently added '10.6.147.11' (RSA) to the list of known hosts.
-------- 1 ----------
Simple data properties access 1
Simple accessor properties access 0
Simple class properties access 0
Simple obj methods access 0
Simple class methods access 0

-------- 10 ----------
Simple data properties access 0
Simple accessor properties access 0
Simple class properties access 0
Simple obj methods access 0
Simple class methods access 0

-------- 100 ----------
Simple data properties access 0
Simple accessor properties access 0
Simple class properties access 1
Simple obj methods access 0
Simple class methods access 0

-------- 1000 ----------
Simple data properties access 0
Simple accessor properties access 1
Simple class properties access 0
Simple obj methods access 1
Simple class methods access 1

-------- 10000 ----------
Simple data properties access 3
Simple accessor properties access 12
Simple class properties access 0
Simple obj methods access 3
Simple class methods access 2

-------- 100000 ----------
Simple data properties access 3
Simple accessor properties access 78
Simple class properties access 3
Simple obj methods access 6
Simple class methods access 4

-------- 1000000 ----------
Simple data properties access 30
Simple accessor properties access 791
Simple class properties access 29
Simple obj methods access 59
Simple class methods access 29

-------- 10000000 ----------
Simple data properties access 308
Simple accessor properties access 7905
Simple class properties access 284
Simple obj methods access 581
Simple class methods access 283

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment