- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Есть проект по недвижимости.
Пользователь задаёт параметры поиска объекта недвижимости, все эти параметры скидываются через AJAX скрипту. И на месте вывода результата крутится колёсико. Поиск может занимать достаточно продолжительное время от 2 до 7 секунд.
Хотелось бы, чтобы вместо колёсика отображался процент готовности обработки запроса.
Как такое учудить, подскажите?
Каким образом осуществляется поиск, что он так много времени занимает?
Надо оптимизировать запросы и поиск, а не маяться дурью. :)
Алексей Барыкин, не, ну всякое бывает )
Может у товарища скрипт опрашивает сотню баз разных агентств недвижимости.
Но с вами я тоже согласен )
Ну ищет предприниматель себе коровник, например. Вот и извращается. У коровника между прочим более 30 всяких параметров :), а таких предпринимателей куча и объектов почти 5000.
Когда параметров мало - быстренько, а когда много, там еще и расчёты всякие нужно вести. Сумма затрат на содержание, в зависимости от еще 5 параметров.
Плюс там еще идет расчёт налоговой ставки, в зависимости от региона, различные коэф. понижения, повышения и т.д.
Пока есть возможность только кэш использовать. Запросы, как могли оптимизировали. Теперь ждём, пока московские программисты базу в нормальный вид приведут. А ждём уже с 12 января
Вы так и не ответили на мой вопрос.
Придется проявлять телепатические способности.
Если поиск осуществляется по одной базе данных, и объектов в ней всего 5000, то даже если поиск осуществляется по 30 критериями, он никак не должен занимать столько времени.
Если конечно по "расчетами" не подразумевается решение систем дифференциальных уравнений NN-го порядка :D
Т.е. нужно включать мозг, приводить в порядок базу и запросы.
Далее по существу.
Если поиск осуществляется оним запросом, то вашу задачу вы не решите. (Вы сможете отображать или 0% или 100%)
Если поиск осуществляется двумя запросами, то вы можете отображать 0% или 50% или 100%
И т.д.
Если ну очень надо в процентах, то можно вместо колесика показывать анимированный gif длительностью 7 секунд: 5%-8.5%-12.65% -и т.д до 99%. После ответа показать gif 100%.
Ну, скорее уж просто сделать колесико, мол "запрос обрабатывается, подождите пожалуйста несколько секунд". А % пытаться приделать - не выйдет, т.к. Вы не знаете сколько конкретно времени необходимо на данный запрос.
Теоретически с помощью одного xmlhttprequest-запроса это невозможно, так как он отдает только четыре состояния.
Запрос xmlhttp регулярно отчитывается о своем состоянии через вызов функции xmlhttp.onreadystatechange. Состояние под номером 4 означает конец выполнения, поэтому функция-обработчик при каждом вызове проверяет - не настало ли это состояние.
Вообще, список состояний readyState такой:
0 - Unitialized
1 - Loading
2 - Loaded
3 - Interactive
4 - Complete
Состояния 0-2 вообще не используются.
Вызов функции с состоянием Interactive в теории должен происходить каждый раз при получении очередной порции данных от сервера. Это могло бы быть удобным для обработки ответа по частям, но Internet Explorer не дает доступа к уже полученной части ответа.
Firefox дает такой доступ, но для обработки запроса по частям состояние Interactive все равно неудобно из-за сложностей обнаружения ошибок соединения. Поэтому Interactive тоже не используется.
После того, как javascript-функция запущена, можно просто вешать гифку и ждать, пока состояние станет 4.
Либо можно пойти более серьезным способом и все-таки сделать то, что вы хотите. Но здесь придется изобрести велосипед. При посылке запроса можно параллельно запустит другую функцию с setInterval, в котором запускать, например, каждые полсекунды другой аджакс-запрос. На сервере же сделать еще один файл, в который во время работы основного файла будет записываться количество процентов на данный момент (тоже каждые полсекунды, например), и, пока идет запрос, кушать много раз в сетИнтервале этот файл. Как только первая функция получает искомый ответ, просто выключаете интервал и убираете в display:none счетчик.