LINUX.ORG.RU

Возвращать только изменившийся кусочек html'я

 ,


0

1

Предположим, есть некоторая html-страничка, на которой если что-то и меняется, то всего лишь одно число и/или пара слов.

Если это число или данные меняются редко и не так важна их точность, то можно генерить страничку и кэшировать на час/сутки.

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

Для любителей конкретики: есть простенький интернет магазин, единственное, что меняется на страничке - это кол-во товаров в корзине.

★★

304 Not Modified, но вот тут не 1, а 2

Not Modified это Not Modified. А у тебя Modified. Ну, ты понял. В общем нельзя. Хотя ты можешь перенести шаблон оформления на клиент, тогда передавать меньше надо будет. Но зачем всё это?

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

Но зачем всё это?

Оптимизация же. И правильный ответ (ajax) уже сказали.

anonymous
()

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

val-amart ★★★★★
()

Вообще, кстати, было бы интересно использовать диффы на уровне протокола http.

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

кеш на уровне шаблонов

Что за зверь?

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

Да, спасибо. Я тоже ничего другого пока не придумал...

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

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

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

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

Сервер видит, что у него есть более новая копия, вычисляет дифф

Для этого все равно нужно сгененировать новую страницу. ОП ведь не трафик экономит

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

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

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

Сервер видит, что у него есть более новая копия, вычисляет дифф

Т.е. ты ещё и все предыдущие значения хранить будешь. Ну, вперёд, чо :3

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

Зачем все. Можно поставить лимит. Хранить, допустим, последние 10 копий. Или иное число копий, определённое параметром конфигурации веб-сервера. Если такой копии на веб-сервере нет, которая закеширована клиентом, то дифф не давать, а давать полную страницу.

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

«Минимальная динамика» таким образом делается через аякс. Но судя по твоему посту, сразу напрашивается именно идея о диффе, а не о аяксе.

Wizard_ ★★★★★
()

скрипт на js, который раз в N секунд запрашивает сервер, получает в ответ данные в json и меняет на странце нужный кусочек.

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

раз в N секунд запрашивает сервер

Не надо так, тогда уж ajax + long polling.

Wizard_ ★★★★★
()

Для любителей конкретики: есть простенький интернет магазин, единственное, что меняется на страничке - это кол-во товаров в корзине.

А что мешает хранить информацию о товарах в WebStorage?

xpahos ★★★★★
()

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

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

экономия трафика, вебсокеты, поллинг, а надо-то всего одно число менять, ну че

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

Чтобы построить дифф, нужно две копии - начальная и новая.если у тебя 500 клиентов, то у тебя 1000 копий, 500 старых и 500 новых. Плюс загрузка проца на 500 диффов и 500 вычислений новых страниц.

Оптимизаторы такие оптимизаторы...

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