Ajax.net - улучшить время загрузки страницы - PullRequest
3 голосов
/ 30 апреля 2011

вот моя проблема.Я занимаюсь разработкой веб-сайта, который позволит пользователям бронировать отели по всему миру, например, booking.com, expedia.com и т. Д.

Когда пользователь ищет отели в определенном городе, я подключаюсь черезВеб-службы с различными поставщиками, а затем показать результаты.Почти у каждого провайдера это означает:

1) Вызов метода в WS, который возвращает доступные отели в городе на выбранные даты.Для каждого из этих отелей:

  • 2) Чтение из очень больших файлов XML (обычно более 1) для получения статической информации, такой как адрес, телефон, факс, описание, услуги и т. Д.
  • 3) Вызовите второй метод в WS, чтобы получить информацию о доступных номерах.
  • 4) Показать результат

Проблема, с которой я столкнулся, связана со временем загрузки страницы,что является ключевым фактором на этих сайтах.

Первый звонок в WS (пункт 1), это что-то необходимое, в котором я мало что могу сделать, поэтому я должен принять это время.Другие два пункта также необходимы, но я намерен улучшить взаимодействие с пользователем, показав отелей при загрузке .

Допустим, вы ищете отели в Буэнос-Айресе.Вы вводите "Буэнос-Айрес" в качестве пункта назначения и нажимаете кнопку "Buscar".Как вы можете заметить, сообщение о загрузке отображается до тех пор, пока следующая страница не будет полностью загружена.Вместо того, чтобы ждать загрузки всех отелей, я хотел бы сделать следующее:

  1. Когда пользователь нажимает кнопку "Buscar", немедленно отправляйте пользователя на страницу HotelList
  2. Показать каждую гостиницу по мере того, как будет получена их информация, и наверху появится сообщение с надписью "Загрузка 1 из XXX отелей" ... "Загрузка 2 из XXX отелей" ...

Я искал примеры ajax, которые описывали бы, как этого добиться, но не нашел четких статей.Я был бы очень признателен, если бы кто-то указал мне правильное направление.

Спасибо!

---------------------------------------------------------------------------

Пробовал с использованием многопоточностино результаты не отображаются.Я показываю результаты, используя буквальный контроль.Вот фрагмент кода:

HotelList.aspx

<asp:Literal ID="HotelesResultadoBusqueda" runat="server"></asp:Literal>

HotelList.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{
    ...
    ...
    ThreadStart job = new ThreadStart(CargarHoteles);
    Thread thread = new Thread(job);
    thread.Start();
}

private void CargarHoteles()
{
    // Load Hotels
    ArrayList hotels = WebService......
    foreach(Hotel hotel in hotels)
    {.....}
    ....
    this.HotelesResultadoBusqueda.Text = "...";
}

Ответы [ 2 ]

1 голос
/ 30 апреля 2011

«По мере поступления» самая простая вещь - это создать (потокобезопасную) очередь ожидающих элементов в бэкэнде, т.е. Новые результаты помещаются в очередь - и каждые несколько секунд ваш опрос JSON запрашивает новые данные в очереди (для этого сеанса).

повторное исполнение; просто профилируйте это и атакуйте биты, которые показывает профиль, причиняет боль. Предварительная загрузка XML в некоторую индексированную структуру (возможно, даже базу данных) была бы моей главной догадкой ...

0 голосов
/ 01 мая 2011

Вот моя идея, цель состоит в том, чтобы кэшировать результаты вашей функции отелей CargarHoteles ().Поскольку вы кешируете его, вы можете сделать так, чтобы фоновый процесс выполнял работу, пока пользовательский интерфейс реагирует быстро.

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

На стороне сервера у вас есть рабочий процесс (или процессы) - это решение позволяет вам добавить больше машин / процессов для выполнения задачи, если есть хороший способ сделать это, например, задачу для каждого XML-файла.) Эти рабочие решают проблему и помещают результаты в кеш, когда они закончат, они помечают этот элемент кеша как завершенный.В следующий раз, когда клиент запрашивает больше информации, он узнает, что у него есть все результаты.

Обратите внимание, что этот проект совместим с предложением Марка, то есть очередь, о которой он говорит, это результаты, которые создаются как запись вкеш.

Одной из приятных особенностей этого решения является то, что если в одном месте есть большой интерес (все собираются на Олимпиаду!), Ваш сайт становится быстрее.

Надеюсь, это понятно,Если это не так, напишите вопросы, и я постараюсь объяснить больше.

...