LINUX.ORG.RU

Не могу вкурить Etag


0

1

Вот пример Grails кода с одногой статьи

class BookController {
  def show = {
     withCacheHeaders {
         def book = Book.get(params.id)
         etag {
            "${book.ident()}:${book.version}"             
         }
         lastModified {
            book.dateCreated ?: book.dateUpdated
         }
         generate {
            render(view:"bookDisplay", model:[item:book])
         }
     }
  }
}

Оно генерит etag. Но как это что-то ускорит? Потом клиент присылает запрос, и даже если там есть if-none-match, то сервер все равно ведь выполнит запрос и полезет в базу. Как он узнает что сущность не поменялась или поменялась?

Если дело лишь в том чтобы просто не отправлять по сети потенциально большой обьект, то так и скажите.

Можно ли как-то использовать Etag для того, чтобы запрос оставался на фронтэнде? Пока метода не вижу.

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

★★★★★

Последнее исправление: vertexua (всего исправлений: 1)

Etag не особо хорошо подходит для динамики: как можно сказать поменялся или не поменялся ресурс, если какие-то его данные лежат в бд? Правильно. Достать все из бд, собрать этот ресурс и опять посчитать Etag.

использовать Etag для того, чтобы запрос оставался на фронтэнде

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

Существует ли технология...

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

Ну и опять таки, если у тебя веб-приложение кто будет следить за тем, что ресурсы изменились и сбрасывать кеши на фронтенде? Демон специальный?

BigAlex ★★★
()
Ответ на: комментарий от BigAlex

Ну и опять таки, если у тебя веб-приложение кто будет следить за тем, что ресурсы изменились и сбрасывать кеши на фронтенде? Демон специальный?

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

Так существует ли реально такое? Препятствий не вижу

vertexua ★★★★★
() автор топика

> Существует ли технология, которая уведомит фронтэнд,

не применительно к Grails (которого я знаю :) а вообще - можно на уровне драйвера (или другого глобального моста, ORMа, например) перехватывать все запросы на изменение БД. Если ни одного изменяющего запроса к сущности не было, значит сущность не изменилась.

stevejobs ★★★★☆
()
Ответ на: комментарий от vertexua

>Ну я спрашивал как потом фронтэнд уведомить. Для nginx уже скинули

Так смотря какой у тебя фронтэнд.

anonymous
()
Ответ на: комментарий от anonymous

Скорее всего если буду юзать, то nginx, но и думал может есть стандартный протокол/технология. У меня ынтерпрайз головного мозга?

vertexua ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.