Conditional get. Кусается! » комментарииhttps://softwaremaniacs.org/blog/2007/08/18/conditional-get-bites/2012-08-25T23:31:23.140633-07:00Иван Сагалаев о программировании и веб-разработкеhttp://softwaremaniacs.org/media/sm_org/style/photo.jpgSerg на "Conditional get. Кусается!"
2012-08-25T23:31:23.140633-07:00Serghttps://softwaremaniacs.org/blog/2007/08/18/conditional-get-bites/#comment-168944Можно кешировать уже собранную статику. Если страница не изменилась — отдавать данные из кеша. Иначе, пересобирать ее снова.
<p>Можно кешировать уже собранную статику. Если страница не изменилась — отдавать данные из кеша. Иначе, пересобирать ее снова.Кеширование динамических изображений на "Conditional get. Кусается!"
2008-12-10T03:24:37-08:00Кеширование динамических изображенийhttp://softwaremaniacs.org/forum/django/7358/https://softwaremaniacs.org/blog/2007/08/18/conditional-get-bites/#comment-31552[...] Я как-то расписывал это подробно: http://softwaremaniacs.org/blog/2007/08/18/conditional-get-bites/ [...]
<p>[...] Я как-то расписывал это подробно: <a href="http://softwaremaniacs.org/blog/2007/08/18/conditional-get-bites/">http://softwaremaniacs.org/blog/2007/08/18/conditional-get-bites/</a> [...]bw на "Conditional get. Кусается!"
2007-09-10T22:02:22-07:00bwhttps://softwaremaniacs.org/blog/2007/08/18/conditional-get-bites/#comment-18304Есть еще такой прикол. Вроде о нем не говорили, а то я давно этот топик читал, забыл :-). Сам только что столкнулся, долго не мог понять в чем дело. Помимо контента на странице еще изменяется дизайн (если грубо то шаблоны страниц) или визуальная модель (в общем понятно о чем я)....
<p>Есть еще такой прикол. Вроде о нем не говорили, а то я давно этот топик читал, забыл :-).</p>
<p>Сам только что столкнулся, долго не мог понять в чем дело. Помимо контента на странице еще изменяется дизайн (если грубо то шаблоны страниц) или визуальная модель (в общем понятно о чем я). Это тоже нужно учитывать при кешировании. Все становится сложнее, если страница у тебя состоит из нескольких фрагментов и "главный код страницы" не может знать изменились ли эти фрагменты. У фрагментов может быть не только свой шаблон и свой контент.</p>
<p>Вообщем задача это жутко сложная и при её решении можно легко наломать дров.</p>
<p>..bwИван Сагалаев на "Conditional get. Кусается!"
2007-08-26T12:18:23-07:00Иван Сагалаевhttps://softwaremaniacs.org/blog/2007/08/18/conditional-get-bites/#comment-17382Мнэ-э... Это подколка на мой аналогичный вопрос на РИТе? :-) Если все же нет, то это декоратор — функция, принимающая другую функцию, обвешивающая ее каким-нибудь обслуживающим кодом. У Максима Деркачева есть подробнее.
<p>Мнэ-э... Это подколка на мой аналогичный вопрос на РИТе? :-)</p>
<p>Если все же нет, то это декоратор — функция, принимающая другую функцию, обвешивающая ее каким-нибудь обслуживающим кодом. У Максима Деркачева <a href="http://www.ragbag.ru/2006/11/07/python_decorators/">есть подробнее</a>.Макс Лапшин на "Conditional get. Кусается!"
2007-08-26T12:11:28-07:00Макс Лапшинhttps://softwaremaniacs.org/blog/2007/08/18/conditional-get-bites/#comment-17381А что такое @ перед названием метода?
<p>А что такое @ перед названием метода?koct9i на "Conditional get. Кусается!"
2007-08-19T00:16:14-07:00koct9ihttps://softwaremaniacs.org/blog/2007/08/18/conditional-get-bites/#comment-16910Внимательный читатель спросит, а зачем тогда вообще нужен, например, If-Modified-Since, если ETag работает точно так же, и в него вообще можно передать ту же самую строчку времени? всё просто — If-Modified-Since это из HTTP/1.0, а ETag появился в 1.1 Време'нные метки это плохо, квантование времени и предположение наличия глобальных часов...
<blockquote>
<p>Внимательный читатель спросит, а зачем тогда вообще нужен, например, If-Modified-Since, если ETag работает точно так же, и в него вообще можно передать ту же самую строчку времени?</p>
</blockquote>
<p>всё просто — If-Modified-Since это из HTTP/1.0, а ETag появился в 1.1</p>
<p>Време'нные метки это плохо, квантование времени и предположение наличия глобальных часов порождает кучу проблем и потенциальных ошибок, во всех распределённых системах пытаются от них избавится.<br>
Видимо авторы HTTP тоже осознали это =)</p>
<p>Виртуальное время считающее события тут будет надёжнее. А т.к. кэш должен быть консервативным и ошибаться только в одну сторону то логично в memcached хранить хэш таблицу изменяемых обьектов с максимальным виртуальным временем изменения объектов попавших в эту ячейку. Пользователю в ETag уходит время и номера ячеек в которые попали использованные для генерации объекты. При обновлении каждый объект (например статья) выставляет текущее время на хэш ячейку в которую она попала.</p>
<p>В реальности игра ИМХО не стоит свеч. Генерация страницы без пересылки не так дорого и обходится. В случае если генерация сложная то стоит кэшировать сложно-вычислимые данные или элементы страницы.Иван Сагалаев на "Conditional get. Кусается!"
2007-08-18T12:05:31-07:00Иван Сагалаевhttps://softwaremaniacs.org/blog/2007/08/18/conditional-get-bites/#comment-16882Если не ошибаюсь, в заголовке If-None-Match етаги полагается заключать в кавычки. И там ещё есть всякие тонкости со строгими и нестрогими етагами (”…” и W/”…”): Про нестрогость, признаюсь, не дочитал, очень дурацким языком спецификация написана :-). Кроме того непонятно, как их обрабатывать. И про кавычки, да, наверное поправить надо. А...
<blockquote>
<p>Если не ошибаюсь, в заголовке If-None-Match етаги полагается заключать в кавычки. И там ещё есть всякие тонкости со строгими и нестрогими етагами (”…” и W/”…”):</p>
</blockquote>
<p>Про нестрогость, признаюсь, не дочитал, очень дурацким языком спецификация написана :-). Кроме того непонятно, как их обрабатывать. И про кавычки, да, наверное поправить надо.</p>
<blockquote>
<p>А разве нет в джанге какой-нибудь сигнальной системы, чтобы не дёргать каждый раз всё руками, а просто навесить перехватчик на нужное событие?</p>
</blockquote>
<p>Система есть конечно. Сигналов только нет нужных. Откуда Джанго знает, что мне понадобится сигнал в середине логики одной из моих же view? Другими словами, сигналами или нет — это вторичный вопрос. Первичный в том, что я не знаю, как не привязывать инвалидацию кеша к специфике приложения.Давид Мзареулян на "Conditional get. Кусается!"
2007-08-18T11:46:49-07:00Давид Мзареулянhttps://softwaremaniacs.org/blog/2007/08/18/conditional-get-bites/#comment-16879Если не ошибаюсь, в заголовке If-None-Match етаги полагается заключать в кавычки. И там ещё есть всякие тонкости со строгими и нестрогими етагами ("..." и W/"..."): http://xpoint.ru/know-how/VebAlgoritmyi/ConditionalGet?comments И эти функции приходится вручную звать везде из view, где эти данные меняются. Корявенько, конечно. А разве нет в джанге какой-нибудь сигнальной системы, чтобы...
<p>Если не ошибаюсь, в заголовке If-None-Match етаги полагается заключать в кавычки. И там ещё есть всякие тонкости со строгими и нестрогими етагами ("..." и W/"..."): <a href="http://xpoint.ru/know-how/VebAlgoritmyi/ConditionalGet?comments">http://xpoint.ru/know-how/VebAlgoritmyi/ConditionalGet?comments</a></p>
<blockquote>
<p>И эти функции приходится вручную звать везде из view, где эти данные меняются.</p>
</blockquote>
<p>Корявенько, конечно. А разве нет в джанге какой-нибудь сигнальной системы, чтобы не дёргать каждый раз всё руками, а просто навесить перехватчик на нужное событие? У меня было ощущение, что я про что-то такое читал...Сло на "Conditional get. Кусается!"
2007-08-18T11:42:34-07:00Слоhttps://softwaremaniacs.org/blog/2007/08/18/conditional-get-bites/#comment-16878мне тут подумалось, что форматирование вида "только что"/"минуту назад" можно делать javascript'ом, а из сервера отдавать размеченный специальными span'ами текст, например. с этим еще можно сделать что нибудь вкусное вроде динамического пересчета, когда через минуту "только что" меняется на "минуту назад", без перезагрузки страницы =)
<p>мне тут подумалось, что форматирование вида "только что"/"минуту назад" можно делать javascript'ом, а из сервера отдавать размеченный специальными span'ами текст, например.</p>
<p>с этим еще можно сделать что нибудь вкусное вроде динамического пересчета, когда через минуту "только что" меняется на "минуту назад", без перезагрузки страницы =)Sergej 'ZaZa' Kurakin на "Conditional get. Кусается!"
2007-08-18T09:41:37-07:00Sergej 'ZaZa' Kurakinhttps://softwaremaniacs.org/blog/2007/08/18/conditional-get-bites/#comment-16867Я тоже регулярно задаюсь вопросом "странно, что такую простую очевидную вещь никто не делает". Причём этому внимание не уделают дажы "туповатые" CMS, у которых почти 80% можно отдавать статикой с использованием кеширования на стороне сервера. Из личного опыта общения: если копать глубже, не все WEB-программисты изучают стандарты HTTP и обращают...
<p>Я тоже регулярно задаюсь вопросом "странно, что такую простую очевидную вещь никто не делает".<br>
Причём этому внимание не уделают дажы "туповатые" CMS, у которых почти 80% можно отдавать статикой с использованием кеширования на стороне сервера.</p>
<p>Из личного опыта общения: если копать глубже, не все WEB-программисты изучают стандарты HTTP и обращают внимание на возможности протокола HTTP.Иван Сагалаев на "Conditional get. Кусается!"
2007-08-18T09:36:28-07:00Иван Сагалаевhttps://softwaremaniacs.org/blog/2007/08/18/conditional-get-bites/#comment-168666-я. 7-ю не смотрел.
<p>6-я. 7-ю не смотрел.Виктор на "Conditional get. Кусается!"
2007-08-18T09:24:25-07:00Викторhttps://softwaremaniacs.org/blog/2007/08/18/conditional-get-bites/#comment-16864Вопрос: про какую версию IE идёт речь? (UnVary).
<p>Вопрос: про какую версию IE идёт речь? (UnVary).