正規表現をliteralではなく変数で表現する場合、幾つか方法がありますが、果たして速度にどれほどの差があるのでしょうか。RegExp
を筆頭にeval
、Function
で検証してみます。
for(let a=4,n=1e4,v0="(?:)",v1="/(?:)/g",v2="return/(?:)/g";a--;){
console.time`Reg`;
for(let a=n;a--;)RegExp(v0,"g");
console.timeEnd`Reg`
console.time`eval`;
for(let a=n;a--;)eval(v1);
console.timeEnd`eval`;
console.time`fn`;
for(let a=n;a--;)Function(v2)();
console.timeEnd`fn`;
}
Function
は全く使い物にならない程度に圧倒的な低速っぷり。これは想定内です。eval
はFunction
を遥かに凌駕しない程度の速度を誇ります。RegExp
はそんなeval
より数十倍高速です。eval
にはもっと期待していたので残念と言う他ありません。なぜならcode golfにeval
は欠かせないのだ!