Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.08.2013, 18:10
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

функция поиска
читаю книгу 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



разница в общем очень большая, либо я чего то не понимаю, или почему тогда автор использует такую медленную функцию (причем на сервере) ?
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #2 (permalink)  
Старый 09.08.2013, 19:15
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

up
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #3 (permalink)  
Старый 10.08.2013, 17:41
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Сообщение от Дзен-трансгуманист
Почему гоняем один и тот же host.toLowerCase() в цикле?
зачем вообще lowerCase, если можно использовать регистронезависимый поиск
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #4 (permalink)  
Старый 10.08.2013, 17:50
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от cyber
разница в общем очень большая, либо я чего то не понимаю, или почему тогда автор использует такую медленную функцию (причем на сервере) ?
автор был не в себе (или пьян) А вообще, Дзен-трансгуманист, уже ответил
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция поиска на JS [PC]Contra Общие вопросы Javascript 2 24.10.2012 21:00
Криво работает скрипт jQuery поиска в таблице dim565 jQuery 0 17.12.2011 21:23
функция не успевает Sadist_dead Элементы интерфейса 22 02.10.2011 19:00
Скрипт поиска по всем страницам сайта Mike1983 Firefox/Mozilla 2 13.05.2011 19:09
Где вызывается функция? cradis Общие вопросы Javascript 5 23.04.2011 13:47