JS: For loop vs Array.indexOf (v188)

Revision 188 of this benchmark created by myedshdfh on


Description

Testing speed of a standard for loop vs. Array.indexOf.

Preparation HTML

<script>
var TLDs = "ac|ad|ae(?:^ro)|af|ag|ai|al|am|an|ao|aq|ar|com\\.ar|net\\.ar|org\\.ar|gov\\.ar|int\\.ar|mil\\.ar|as|at|au|com\\.au|net\\.au|org\\.au|asn\\.au|id\\.au|aw|az|ba|bb|bd|be|bf|bg|bh|bi(?:^z)|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|com\\.cn|net\\.cn|org\\.cn|co(?:^op|m)|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|com\\.es|nom\\.es|org\\.es|gob\\.es|edu\\.es|et|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|gov\\.hk|hm|hn|hr|ht|hu|id|ie|il|co\\.il|org\\.il|in(?:^fo|t)|io|iq|ir|is|it|jm|jo|jp|ne\\.jp|or\\.jp|ad\\.jp|co\\.jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu(?:^seum)|mv|mw|mx|my|com\\.my|net\\.my|mz|na(?:^me)|nc|ne(?:^t)|nf|ng|ni|nl|no|np|nr|nu|nz|co\\.nz|net\\.nz|org\\.nz|gen\\.nz|maori\\.nz|co\\.net\\.nz|om|pa|pe|pf|pg|ph|com\\.ph|net\\.ph|org\\.ph|pk|pl|com\\.pl|net\\.pl|org\\.pl|pm|pn|pr(?:^o)|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|com\\.sg|net\\.sg|org\\.sg|edu\\.sg|per\\.sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tr|tt|tv|tw|com\\.tw|net\\.tw|tz|ua|ug|uk|co\\.uk|net\\.uk|org\\.uk|me\\.uk|ltd\\.uk|plc\\.uk|sch\\.uk|ac\\.uk|gov\\.uk|nhs\\.uk|police\\.uk|mod\\.uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|co\\.za|ac\\.za|org\\.za|zm|zw|com|net|org|edu|gov|int|mil|eu|su|aero|biz|coop|info|museum|name|pro";
var TLDs2 = ["ac","ad","ae(?:^ro)","af","ag","ai","al","am","an","ao","aq","ar","com\\.ar","net\\.ar","org\\.ar","gov\\.ar","int\\.ar","mil\\.ar","as","at","au","com\\.au","net\\.au","org\\.au","asn\\.au","id\\.au","aw","az","ba","bb","bd","be","bf","bg","bh","bi(?:^z)","bj","bm","bn","bo","br","bs","bt","bv","bw","by","bz","ca","cc","cd","cf","cg","ch","ci","ck","cl","cm","cn","com\\.cn","net\\.cn","org\\.cn","co(?:^op","m)","cr","cu","cv","cx","cy","cz","de","dj","dk","dm","do","dz","ec","ee","eg","eh","er","es","com\\.es","nom\\.es","org\\.es","gob\\.es","edu\\.es","et","fi","fj","fk","fm","fo","fr","ga","gb","gd","ge","gf","gh","gi","gl","gm","gn","gp","gq","gr","gs","gt","gu","gw","gy","hk","gov\\.hk","hm","hn","hr","ht","hu","id","ie","il","co\\.il","org\\.il","in(?:^fo","t)","io","iq","ir","is","it","jm","jo","jp","ne\\.jp","or\\.jp","ad\\.jp","co\\.jp","ke","kg","kh","ki","km","kn","kp","kr","kw","ky","kz","la","lb","lc","li","lk","lr","ls","lt","lu","lv","ly","ma","mc","md","mg","mh","mk","ml","mm","mn","mo","mp","mq","mr","ms","mt","mu(?:^seum)","mv","mw","mx","my","com\\.my","net\\.my","mz","na(?:^me)","nc","ne(?:^t)","nf","ng","ni","nl","no","np","nr","nu","nz","co\\.nz","net\\.nz","org\\.nz","gen\\.nz","maori\\.nz","co\\.net\\.nz","om","pa","pe","pf","pg","ph","com\\.ph","net\\.ph","org\\.ph","pk","pl","com\\.pl","net\\.pl","org\\.pl","pm","pn","pr(?:^o)","ps","pt","pw","py","qa","re","ro","ru","rw","sa","sb","sc","sd","se","sg","com\\.sg","net\\.sg","org\\.sg","edu\\.sg","per\\.sg","sh","si","sj","sk","sl","sm","sn","so","sr","st","sv","sy","sz","tc","td","tf","tg","th","tj","tk","tl","tm","tn","to","tr","tt","tv","tw","com\\.tw","net\\.tw","tz","ua","ug","uk","co\\.uk","net\\.uk","org\\.uk","me\\.uk","ltd\\.uk","plc\\.uk","sch\\.uk","ac\\.uk","gov\\.uk","nhs\\.uk","police\\.uk","mod\\.uk","um","us","uy","uz","va","vc","ve","vg","vi","vn","vu","wf","ws","ye","yt","yu","za","co\\.za","ac\\.za","org\\.za","zm","zw","com","net","org","edu","gov","int","mil","eu","su","aero","biz","coop","info","museum","name","pro"];
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
For loop
var url = 'utc.pcgameshardware.com';    
var parts = url.split('.');
    if (parts[0] === 'www' && parts[1] !== 'com') parts.shift();        
    var ln = parts.length, i = ln, minLength = parts[parts.length-1].length, part;
    while(part = parts[--i]){
        // stop when we find a non-TLD part, 'asia.com' (last remaining must be the SLD), TLDs only span 2 levels, 'www.cn.com' (valid TLD as second-level domain),  officialy not a TLD
        if (i === 0 || i < ln-2 || part.length < minLength || TLDs.indexOf(part) < 0){
            return part;
        }
    }
ready
other for-loop
var url = 'utc.pcgameshardware.com';       
var parts = url.split('.');
    if (parts[0] === 'www' && parts[1] !== 'com') parts.shift();        
    var ln = parts.length, i = ln, minLength = parts[parts.length-1].length, part;
    while(part = parts[--i]){
        // stop when we find a non-TLD part, 'asia.com' (last remaining must be the SLD), TLDs only span 2 levels, 'www.cn.com' (valid TLD as second-level domain),  officialy not a TLD
        if (i === 0 || i < ln-2 || part.length < minLength || TLDs.indexOf(part) < 0){
            return part;
        } else
                for (var z = 0; z < TLDs2.length; z++) {
                        if (TLDs2[z].toString()==part){
                                break;
                                return part;
                        }
                }
    }
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.