Also, in JavaScript, muss ich überprüfen, haben eine einfache, schnelle Möglichkeit zu überprüfen, ob eine Zeichenfolge der Länge 1 gehört zu einer Reihe von Zeichen, wie ist es ein String-Zeichen für eine Javascript-ID?Ist die Regex-Suche effizienter als die Suche nach einem Schlüssel in einem Objekt als Set?
Ich schrieb den folgenden Test:
//performance test for matching
var re = /[a-zA-Z$_]/;
console.time("regex");
for(var i=0;i<100000;i++) re.test("_");
console.timeEnd("regex");
var objs = {"_":true, 0:true, 1:true, 2:true, 3:true, 4:true, 5:true, 6:true, 7:true, 8:true, 9:true, a:true, b:true, c:true, d:true, e:true, f:true, g:true, h:true, "i":true, j:true, k:true,
l:true, m:true, n:true, o:true, p:true, q:true, r:true, t:true, $:true
};
console.time("objcheck");
for(var i=0;i<100000;i++) "_" in objs;
console.timeEnd("objcheck");
/*
regex: 10ms
objcheck: 1ms
*/
Etwas Seltsames ist hier, auf einer einheitlichen Grundlage, die Überprüfung für einen Schlüssel in einem Objekt, das ist als eine Menge definiert schien ein Zeichen weit schneller zu sein, als zu tun Regex-Übereinstimmung Warum ist das der Fall? Sollte die Regex hier nicht schneller sein?
Was lässt Sie denken, dass es sollte? – Bergi
Ihre Microbenchmark ist ziemlich fehlerhaft, traue ihr nicht. Vergleichen Sie Ihre reale Anwendung mit zwei verschiedenen Ansätzen. – Bergi
Haben Sie überlegt, ein 'Set' zu verwenden? – Bergi