Вывести "searching..." пока идет поиск

  • Автор темы Автор темы Tn
  • Дата начала Дата начала

Tn

Guest
Вывести "searching..." пока идет поиск

Задача: вывести страницу "подождите пока запущен процес поиска". Как поиск по БД будет завершен, выдать результаты.
Т.е. нужен алгоритм как на этом форуме при поиске, но я его не понимаю :(

Что тут происходит? Видимо, запускается скрипт поиска как паралельный процес (fork?), и идет выдача страницы с сообщением "ждите..", которая, обновляясь каждую секунду, проверяет завершился ли поиск. Процесс поиска, видимо, пишет во временную таблицу БД свои результаты и, в конце концов, информацию, что поиск завершен. Когда ежесекундно запускаемый скрипт "ждите.." видит, что всё готово, выдаёт пользователю результаты.

Даже не знаю, насколько правильно я всё понимаю?
Как потом удаляется эта временная таблица? Через какой-то установленный промежуток времени или по каким-то другим критериям?
 
Нет никакого алгоритма
Эта страница показывается всегда константное кол-во времени.
При этом запрос на поиск записывается в таблицу, а при редиректе считывается и выполняется
 
подход 1 - использовать Буферизацию php.net/ob_start


подход 2 - использовать Redirect. т.е. Header('Location: xxxx')
выводится первая страница "Запущен поиск"
и запускается страница "Вывод результатов поиска"
пока отрабатывает второй скрипт, Юзверь видит первую страницу.
 
Profic
но тем не менее, описанный вариант так же осуществим.
Как и некоторые другие, хотя там уже отличается в деталях - например, перегружается не вся странитса, а ифрейм
 
Фанат
Все возможно, но однако непонятно зачем вообще оно нужно.
Чтобы проявить заботу о пользователе - достаточно константной задержки.
Все равно поиск, какой бы он не был ИМХО должен выполняться в пределах стандартных задержек инета.
 
Зачем вообще эта задержка? Если поиск выполняется ТАК долго, то не разумнее ли заняться оптимизацией запросов?
 
Автор оригинала: SiMM
Зачем вообще эта задержка? Если поиск выполняется ТАК долго, то не разумнее ли заняться оптимизацией запросов?
Поиск идет по двум таблицам с очень большим числом записей и большим количеством полей (по каждому полю).
Возможно, разумнее занятся оптимизацией и если вы подскажете что-то полезное, буду признателен.
Запрос стандартный: SELECT * FROM .... WHERE (field1 like '%$search%') or (field2 like '%$search%') or ...
В целях оптимизации, в голову приходит добавить в таблицу поле blob, куда дублировать через пробел все поля в записи (дальше придется искать только по этому - одному полю). Проверял, это работает в 2-3 раза быстрее, но и размер таблицы естественно растёт. Из двух зол выбираю меньшее, но не могу определиться, что это меньшее..

-~{}~ 19.01.05 16:22:

Объясните, пожалуйста, какой смысл в этой промежуточной странице "Ждите, идет поиск", на этом сайте? Задержать выдачу информации на 1 секунду?

-~{}~ 19.01.05 16:54:

Всё ясно, вопрос закрыт.
 
Еще один метод: можно выдать браузеру некоторую шапку с надписью "Ждите" (но не заканчивать вывод страницы, чтобы держать браузер) и дальше производить поиск этим же скриптом, складывая результаты во временное хранилище. Когда поиск закончился, кидаем вдогонку браузеру код жабаскрипа, который его редиректит на результат.

+ время ожидания точно соответствует времени поиска
+ меньше редиректов
- использование js
- при очень долгом поиске браузер может отвалиться
 
Не факт, что эта шапка отобразится пока не закончился вывод страницы.
 
ну да, точной гарантии дать нельзя... но поспособствовать этому немного можно :)
сделать шапку > 256bytes, flush(), ob_flush()...
 
2 Wicked:
> - при очень долгом поиске браузер может отвалиться
ЛОЛ! :+) "браузер может отвалиться" - я пЛакаЛ.. .))))
 
Подобный алгоритм вообще удобен при длительных операциях, принцип представляю таким:
некий демон, получает команды от скрипта, выполняет полезную работу.
В это время скрипт отображает "ждите" и указан meta refresh, (условно, скажем) который рефрешит страницу каждые 10 сек. В период запроса проверяет факт готовности результата демона: если результат есть = выводим, если нет, продолжает выводить "ждите" (с meta refresh).
 
Сверху