Skip to content

Instantly share code, notes, and snippets.

@1f0
Created July 6, 2018 09:23
Show Gist options
  • Save 1f0/0ee98b9152a77dad657e1df4afeff4ea to your computer and use it in GitHub Desktop.
Save 1f0/0ee98b9152a77dad657e1df4afeff4ea to your computer and use it in GitHub Desktop.
After experiment, we find out that array access is even a little more efficient than reference access.
'use strict';
var dict = [];
var dict2 = {};
var i, j, t0, t1;
var ICNT = 1000;
var JCNT = 1000;
t0 = performance.now();
for (i = 0; i <= ICNT; i += 2) {
dict[i] = [];
for (j = 0; j <= JCNT; j += 2) {
dict[i][j] = Math.random();
}
}
for (i = ICNT; i > 0; i -= 8) {
for (j = ICNT; j > 0; j -= 8) {
dict[i][j] = Math.random();
}
}
t1 = performance.now();
console.log("Write to 2D array " + (t1 - t0) + " ms.");
t0 = performance.now();
for (i = 0; i <= ICNT; i += 2) {
for (var j = 0; j <= JCNT; j += 2) {
dict2[i + ',' + j] = Math.random();
}
}
for (i = ICNT; i > 0; i -= 8) {
for (j = JCNT; j > 0; j -= 8) {
dict2[i + ',' + j] = Math.random();
}
}
t1 = performance.now();
console.log("Write to sringMap " + (t1 - t0) + " ms.");
var ICNT = 100000;
var i;
var t0, t1;
function Data(nx) {
this.next = nx;
this.str = "hhh";
this.num = 3;
}
var array = [];
var refs = [];
var randomIndex = [];
for (i = 0; i < ICNT; i++) {
randomIndex.push(Math.floor(Math.random() * ICNT));
}
for (i = 0; i < ICNT; i++) {
array.push(new Data(randomIndex[i]));
}
for (i = 0; i < ICNT; i++) {
refs.push(new Data());
}
for (i = 0; i < ICNT; i++) {
refs[i].next = refs[randomIndex[i]];
}
function roughSizeOfObject(object) {
var objectList = [];
var stack = [object];
var bytes = 0;
while (stack.length) {
var value = stack.pop();
if (typeof value === 'boolean') {
bytes += 4;
}
else if (typeof value === 'string') {
bytes += value.length * 2;
}
else if (typeof value === 'number') {
bytes += 8;
}
else if
(
typeof value === 'object'
&& objectList.indexOf(value) === -1
) {
objectList.push(value);
for (var i in value) {
stack.push(value[i]);
}
}
}
return bytes;
}
function itArray() {
var sum = 0;
for (var i = 0; i < array.length; i++) {
sum += array[array[i].next].num;
}
return sum;
}
function itRefs() {
var sum = 0;
for (var i = 0; i < refs.length; i++) {
sum += refs[i].next.num;
}
return sum;
}
t0 = performance.now();
console.log(itArray());
t1 = performance.now();
console.log("Call to itArray " + (t1 - t0) + " milliseconds.");
console.log("size:" + roughSizeOfObject(array));
t0 = performance.now();
console.log(itRefs());
t1 = performance.now();
console.log("Call to itRefs " + (t1 - t0) + " milliseconds.");
console.log("size:" + roughSizeOfObject(refs));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment