feat: speed up compile by map by wwwzbwcom · Pull Request #713 · gpujs/gpu.js
Checking the first element by indexOf is also slower:
const mathFunctionsMap = {
abs: true,
acos: true,
acosh: true,
asin: true,
asinh: true,
atan: true,
atan2: true,
atanh: true,
cbrt: true,
ceil: true,
clz32: true,
cos: true,
cosh: true,
expm1: true,
exp: true,
floor: true,
fround: true,
imul: true,
log: true,
log2: true,
log10: true,
log1p: true,
max: true,
min: true,
pow: true,
random: true,
round: true,
sign: true,
sin: true,
sinh: true,
sqrt: true,
tan: true,
tanh: true,
trunc: true,
};
function isAstMathFunctionMap(ast) {
return !!mathFunctionsMap[ast];
}
const mathFunctions = [
"abs",
"acos",
"acosh",
"asin",
"asinh",
"atan",
"atan2",
"atanh",
"cbrt",
"ceil",
"clz32",
"cos",
"cosh",
"expm1",
"exp",
"floor",
"fround",
"imul",
"log",
"log2",
"log10",
"log1p",
"max",
"min",
"pow",
"random",
"round",
"sign",
"sin",
"sinh",
"sqrt",
"tan",
"tanh",
"trunc",
];
function isAstMathFunctionList(ast) {
return mathFunctions.indexOf(ast) > -1;
}
console.time("isAstMathFunctionMap");
// console.log(isAstMathFunctionSet(""));
// console.log(isAstMathFunctionSet("trunc"));
for (let i = 0; i < 1e8; i++) {
isAstMathFunctionMap("abs")
}
console.timeEnd("isAstMathFunctionMap");
console.time("isAstMathFunctionList");
for (let i = 0; i < 1e8; i++) {
isAstMathFunctionList("abs");
}
console.timeEnd("isAstMathFunctionList");
/*
const mathFunctionsMap = {
abs: true,
acos: true,
acosh: true,
asin: true,
asinh: true,
atan: true,
atan2: true,
atanh: true,
cbrt: true,
ceil: true,
clz32: true,
cos: true,
cosh: true,
expm1: true,
exp: true,
floor: true,
fround: true,
imul: true,
log: true,
log2: true,
log10: true,
log1p: true,
max: true,
min: true,
pow: true,
random: true,
round: true,
sign: true,
sin: true,
sinh: true,
sqrt: true,
tan: true,
tanh: true,
trunc: true,
};
function isAstMathFunctionMap(ast) {
return !!mathFunctionsMap[ast];
}
const mathFunctions = [
"abs",
"acos",
"acosh",
"asin",
"asinh",
"atan",
"atan2",
"atanh",
"cbrt",
"ceil",
"clz32",
"cos",
"cosh",
"expm1",
"exp",
"floor",
"fround",
"imul",
"log",
"log2",
"log10",
"log1p",
"max",
"min",
"pow",
"random",
"round",
"sign",
"sin",
"sinh",
"sqrt",
"tan",
"tanh",
"trunc",
];
function isAstMathFunctionList(ast) {
return mathFunctions.indexOf(ast) > -1;
}
console.time("isAstMathFunctionMap");
// console.log(isAstMathFunctionSet(""));
// console.log(isAstMathFunctionSet("trunc"));
for (let i = 0; i < 1e8; i++) {
isAstMathFunctionMap("abs")
}
console.timeEnd("isAstMathFunctionMap");
console.time("isAstMathFunctionList");
for (let i = 0; i < 1e8; i++) {
isAstMathFunctionList("abs");
}
console.timeEnd("isAstMathFunctionList");
/*
isAstMathFunctionMap: 74.071ms
isAstMathFunctionList: 375.602ms
*/