Rails: борьба с долгим временем отклика http с помощью ajax. Это хорошая идея? Пожалуйста, помогите с деталями реализации - PullRequest
1 голос
/ 31 марта 2010

Я прогуглил некоторые учебники, просмотрел некоторые ответы SO и не смог найти рецепт для моей проблемы.

Я пишу веб-сайт, который должен отображать график акций почти в реальном времени. Данные хранятся в постоянно обновляемой базе данных MySQL, я написал код запроса find_by_sql, который выбирает все данные, которые мне нужны для построения моего графика. Все в порядке, кроме производительности - для разных запросов требуется от одной секунды до одной минуты, чтобы получить все данные из базы данных, на этот раз необходимо выполнить необходимые (My) вычисления на стороне SQL-сервера. Это просто недопустимо.

У меня возникла следующая идея: если данные запрашиваются с сервера MySQL по одному пункту за раз вместо всего набора данных, для получения отдельной точки требуется всего около 1-100 мс.

Я полагаю, что процесс извлечения данных может управляться браузером. После того, как пользователь нажимает кнопку, чтобы нарисовать график, контроллер делает один запрос к базе данных и отображает, скажем, индикатор выполнения, скажем, на 1% готов. Когда браузер получает ответ, он немедленно делает запрос (ajax), и сервер выбирает следующий фрагмент данных и отображает «2%».

И так до тех пор, пока все данные не будут готовы и сервер не отобразит запрошенный график. Может ли это быть реализовано в rails + js, есть ли учебник для решения аналогичной проблемы в сети? Я полагаю, если это вообще возможно, кто-то должен был сделать это раньше.

Я прочитал несколько статей о AJAX, полагаю, что я понимаю общие принципы, но никогда сам не занимался нетривиальным AJA-программированием.

.

Спасибо за ваше время!

1 Ответ

1 голос
/ 01 апреля 2010

Вы можете загрузить страницу с div, который отображает анимированный GIF (с указанием «работает»). Затем используйте body onload для запуска вашего ajax-запроса и замените содержимое этого div.

<body onload="some function call to Ajax.Updater('chart')">
<div id="chart">
  <img src="working.gif">
</div>
...