кэшировать или не кэшировать - PullRequest
3 голосов
/ 16 июля 2009

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

Ответы [ 5 ]

3 голосов
/ 17 июля 2009

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

0 голосов
/ 17 июля 2009

Что говорит среда выполнения ...

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

0 голосов
/ 16 июля 2009

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

Если вы используете запрос HEAD, вы можете просто проверить последний измененный заголовок.

0 голосов
/ 16 июля 2009

Вы сказали, что время обновления ИСПРАВЛЕНО? Поэтому, когда пользователь посещает вашу страницу ЗАКРЫТИЕ до наступления времени обновления, вы можете установить для своей страницы переменную javascript, указывающую, сколько минут, например, до следующего обновления, и запустить таймер на стороне клиента, например:

таймер = { run: function () { if (now + minuteToUpdate> updateTime - startVisitTime) {

        // make ajax request here to update XML file
    }
},
interval: //you can determine this since this will run in client-side

}

Не звоните ли вы в этом положении, потому что это бесполезно и вы каждый раз звоните на сервер.

Вы можете установить некоторую переменную SESSION, чтобы помочь этому запускаться лучше и точнее

Justin

0 голосов
/ 16 июля 2009

Если загрузка данных не очень велика ... Включите данные в основной документ как островок XML. Либо сформируйте его при генерации документа (aspx, php и т. Д.), Либо заполните (через вызовы ajax) зарезервированный узел документа после загрузки. Таким образом, у вашего пользователя всегда самые последние данные, вам не нужно беспокоиться о кешировании, а жизнь намного проще.

Если он большой, заполните этот узел по необходимости с помощью вызовов ajax.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...