const template = { "Classes": { "_string": "Unit Organic ConquestCritical Human CitizenSoldier" }, "VisibleClasses": { "_string": "Citizen Worker Soldier Infantry Ranged Archer" }, "Rank": "Basic" }; const iterations = 200; function GetIdentityClasses1(template) { var classList = []; if (template.Classes && template.Classes._string) classList = classList.concat(template.Classes._string.split(/\s+/)); if (template.VisibleClasses && template.VisibleClasses._string) classList = classList.concat(template.VisibleClasses._string.split(/\s+/)); if (template.Rank) classList = classList.concat(template.Rank); return classList; }; function GetIdentityClasses2(template) { var classList = []; if (template.Classes && template.Classes._string) classList = classList.concat(template.Classes._string.split(/\s+/)); if (template.VisibleClasses && template.VisibleClasses._string) classList = classList.concat(template.VisibleClasses._string.split(/\s+/)); if (template.Rank) classList = classList.push(template.Rank); return classList; }; function GetIdentityClasses3(template) { let classString = ""; if (template.Classes && template.Classes._string) classString += template.Classes._string; if (template.VisibleClasses && template.VisibleClasses._string) classString += " " + template.VisibleClasses._string; if (template.Rank) classString += " " + template.Rank; return classString.length ? classString.split(/\s+/) : []; }; function GetIdentityClasses4(template) { let classString = ""; if (template.Classes && template.Classes._string) classString += template.Classes._string; if (template.VisibleClasses && template.VisibleClasses._string) classString += " " + template.VisibleClasses._string; if (template.Rank) classString += " " + template.Rank; return classString.length ? classString.split(" ") : []; }; function GetIdentityClasses5(template) { var classList = []; if (template.Classes && template.Classes._string) for (var entClass of template.Classes._string.split(/\s+/)) classList.push(entClass); if (template.VisibleClasses && template.VisibleClasses._string) for (var entClass of template.VisibleClasses._string.split(/\s+/)) classList.push(entClass); if (template.Rank) classList = classList.push(template.Rank); return classList; }; function GetIdentityClasses6(template) { var classList = []; if (template.Classes && template.Classes._string) Array.prototype.push.apply(classList, template.Classes._string.split(/\s+/)); if (template.VisibleClasses && template.VisibleClasses._string) Array.prototype.push.apply(classList, template.VisibleClasses._string.split(/\s+/)); if (template.Rank) classList = classList.push(template.Rank); return classList; }; function GetIdentityClasses7(template) { var classList = []; if (template.Classes && template.Classes._string) { let classes = template.Classes._string.split(/\s+/); for (let i = 0; i < classes.length; ++i) classList.push(classes[i]); } if (template.VisibleClasses && template.VisibleClasses._string) { let classes = template.VisibleClasses._string.split(/\s+/); for (let i = 0; i < classes.length; ++i) classList.push(classes[i]); } if (template.Rank) classList = classList.push(template.Rank); return classList; }; function GetIdentityClasses8(template) { var classList = []; if (template.Classes && template.Classes._string) { let classes = template.Classes._string.split(/\s+/); let i = 0; while (i < classes.length) { classList.push(classes[i]); ++i; } } if (template.VisibleClasses && template.VisibleClasses._string) { let classes = template.VisibleClasses._string.split(/\s+/); let i = 0; while (i < classes.length) { classList.push(classes[i]); ++i; } } if (template.Rank) classList = classList.push(template.Rank); return classList; }; function Profile(func, template) { let start = process.hrtime()[0] + (process.hrtime()[1] * 0.000000001); for(let a = 0; a < iterations; ++a) func(template); let duration = process.hrtime()[0] + (process.hrtime()[1] * 0.000000001) - start; console.log((duration / iterations * 1000) + " ms."); }; console.log("Original"); Profile(GetIdentityClasses1, template); console.log("Push for rank"); Profile(GetIdentityClasses2, template); console.log("String"); Profile(GetIdentityClasses3, template); console.log("String no regex"); Profile(GetIdentityClasses4, template); console.log("Only push + For Loops"); Profile(GetIdentityClasses5, template); console.log("Array.prototype.push.apply"); Profile(GetIdentityClasses6, template); console.log("Poor man's for"); Profile(GetIdentityClasses7, template); console.log("Poor man's while"); Profile(GetIdentityClasses8, template);