Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как ускорить работу в распарсивании и поиске в XML
 
 автор: White_Owl   (10.10.2008 в 18:48)   письмо автору
 
 

В общем задачка такова. Нужно сделать сонник. Точнее сонники , всего 35 шт. Соответсвенно и 35 файликов XML.
По запросу пользователя, введённого слова производится поиск по файликам вот кусок кода.



function search($key_index, $dream_books, $search_word='')
{
    $current_dream_book = array();
    $request_results = array();
    //загружаем сонники
    foreach ($dream_books as $dream_book_name=>$dream_html_name)
    {
        //создаём объект simple xml
        $dream_books_xml = simplexml_load_file(DREAM_BOOKS.$dream_book_name.'.xml');
        //определяем выбираем блоки по индексу
        $current_dream_book[$dream_book_name] = $dream_books_xml->letter[$key_index];
        unset($dream_book_name);                
    }    
    //Ищем совпадение введённого пользоваетелем слова со словами в сонниках
    foreach ($current_dream_book as $key=>$dream_book)
    {
        $k=0;
        foreach ($dream_book as $search_words)
        {//конвертируем слово в кодировку KOI8-R
         $current_word = mb_convert_encoding((string)$search_words->head, 'KOI8-R', 'UTF-8');
         //условие совпадения введённого слова (так вроде бы быстрее работает)
        if (!eregi($search_word, $current_word))
        {
            continue;
        }
        else
        //if (eregi($search_word, $current_word))
            {
                $k++;
                $request_results[$key][$k]['head'] = mb_convert_encoding((string)$search_words->head, 'KOI8-R','UTF-8');
                for ($i=0; $i<count($search_words->block->line); $i++)                
                {
                    $request_results[$key][$k]['line'][]= mb_convert_encoding((string)$search_words->block->line[$i], 'KOI8-R','UTF-8');
                }
                unset($search_words);
            }
        }
    }
//echo "<pre>";
//print_r($request_results); 
return $request_results;
}



Всё работает, но ... уж очень долго. Максимальное время поиска на локальной машине составляет 11 сек. Страшно подумать что будет если около 100 пользователей сразу запросят что-то.
В общем вопрос таков. Как эту штуку можно ускорить ?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования