читаю книгу
Node.js Разработка серверных веб-приложений на JavaScript
и в книги встретил функцию поиск в массиве, которая выглядит так
var checkRegexp = function () {
for(var i = 0; i < tObj.length; i++) {
var container = tObj[i];
var hostMatches = host.toLowerCase().match(container.host);
var pathMatches = path.match(container.path);
if(hostMatches !== null && pathMatches !== null) {
return {
container: container,
host: hostMatches,
path: pathMatches
}
}
}
return undefined;
}
сразу видно что поиск довольно медленный.
стало интересно на сколько оптимальней через indexOf, сделал тест
var tObj = [],
leng,
host = "test",
path = 'test.com';
for(var i = 0; i < 20;i++) {
tObj.push({
host: Math.random(),
path: Math.random()
})
}
tObj.push({
host: host,
path: path
})
leng = tObj.length;
var test = function (fnc, count) {
var d = new Date;
for(var i = 0; i < count; i++)
fnc();
return new Date - d;
}
var checkRegexp = function () {
for(var i = 0; i < tObj.length; i++) {
var container = tObj[i];
var hostMatches = host.toLowerCase().match(container.host);
var pathMatches = path.match(container.path);
if(hostMatches !== null && pathMatches !== null) {
return {
container: container,
host: hostMatches,
path: pathMatches
}
}
}
return undefined;
}
var checkIndex = function () {
for(var i = 0; i < leng; i++) {
var container = tObj[i],
hostMatches = ~host.toLowerCase().indexOf(container.host),
pathMatches = ~path.indexOf(container.path);
if(hostMatches && pathMatches ) {
return {
container: container,
host: container.host,
path: container.path
}
}
}
}
console.log(test(checkIndex, 1000)); // 6
console.log(test(checkRegexp, 1000)); // 680
разница в общем очень большая, либо я чего то не понимаю, или почему тогда автор использует такую медленную функцию (причем на сервере) ?