Как изменить кэш браузера после обновления страницы DOM? - PullRequest
5 голосов
/ 08 марта 2011

Пока я знаю, что могу разделять статическое и динамическое содержимое с помощью AJAX, поэтому, если в сообщении блога есть обновление комментария, статью не нужно повторно загружать (это будет 304), только комментарии. Теперь я думаю о сохранении извлеченного динамического контента, чтобы в следующий раз запрашивать только новые комментарии. Есть ли способ сделать это, не полагаясь на Flash / Gears / HTML5Storage или другие плагины?

EDIT: Допустим, раздел комментариев к статье выглядит так:

<div class='comments' id='comments'>
 <a name='comments'></a>
 <h4>43 comments:</h4>
 <dl id='comments-block'></dl>
 <p class='comment-footer'>
  <a href='http://example.org/postcomment' onclick=''>Post a Comment</a>
 </p>
</div>

, при котором вызов AJAX для получения комментариев добавит их к <dl id='comments-block'>, который содержит следующий фрагмент:

<div class='comments-singleblock'>
  <dt class='comment-author' id='comment-5378479254070788764'>
    <a name='comment-5378479254070788764'></a>
      Anonymous coward
      <span class='comment-timestamp'>
        <a href='#comment-5378479254070788764' title='comment permalink'>
           5 February 2012 16:52
        </a>
      </span>
    </a>
  </dt>
  <dd class='comment-body'>
    <p>
      Your lorum is my ipsum, the dolor is sit amet us.
    </p>
  </dd>
  <dd class='comment-footer'>
    Which eternal lies, that is not death.
  </dd>
</div>

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

  1. Первый вызов комментариев AJAX без отметок времени: извлечение всех комментариев до текущей отметки времени A. Это кэшируется.
  2. Время проходит в новой отметке времени B, отправляет запрос на сервер для комментариев после отметки времени A. Этот вызов может кэшироваться, но бессмысленно, поскольку URL-адрес запроса никогда не используется повторно.
  3. Клиент теперь обновил комментарии до отметки времени B. Но кэшируется только содержимое до отметки времени A.
  4. Клиент обновляет статью, которая запрашивает первый запрос на комментарий без отметки времени, которая должна возвращать кэшированные комментарии до отметки времени A.

Таким образом, вопрос заключается в том, как изменить кэшированное содержимое, включив его между отметками времени A и B.

1 Ответ

1 голос
/ 14 августа 2012

создайте локальную переменную для хранения результата JSON вашего вызова ajax.

создать локальную переменную для хранения Max_Last_Modified_Date.

создайте помощник по javascript, который будет рисовать результат JSON.

создайте обработчик на стороне сервера, который сообщит вам MAX (LastModifiedDate) ваших комментариев.

создайте серверный обработчик, который будет возвращать комментарии в JSON для

  • Все результаты (первая выборка)
  • что-нибудь с измененной датой после Max_Last_Modified_Date.
...