Xpoint
   [напомнить пароль]

Когда формировать контент

Метки: [без меток]
2007-05-07 16:15:12 [обр] kuglik[досье]

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

А как в той же wiki или тут на этом форуме проверяются ссылки на предмет существует/не существует? Опять та же проблема: при кешировании надо отслеживать изменения ссылок в документе, при динамической проверке — тормоза.

спустя 1 час 20 минут [обр] Алексей Шоков(0/9)[досье]

А чем, все таки, не подходит кеширование? Т.е. хранить в базе данные, а при их изменение (или изменении шаблонов) обновлять кеш. Можно, так же, кешировать не документ частями. Т.е. шалон кешируется отдельно, данные - отдельно.

И какие именно ссылки вас интересуют? Внутренние, как я понимаю? Можно, как вариант, создать отдельную внутреннюю "карту-сайта" и проверять при каждом выводе, есть ли данная ссылка в этой карте или нет. При этом, как я сказал выше, можно кешировать шаблон и динамически выдавать только содержание.

спустя 40 минут [обр] kuglik[досье]

Алексей Шоков[досье]

А чем, все таки, не подходит кеширование?

Мне всё подходит. Хочется узнать кто как делает.

Имеются в виду не шаблоны всей страницы, а пользовательские шаблоны-функции и разметка текста. Например, в wiki используем в тексте шаблон-функцию [[Шаблон:Город|Москва|Страна=Россия|...]] который в свою очередь использует ещё десяток шаблонов-функций, которые в свою очередь... Т.о. при кешировании необходимо отслеживать все используемые шаблоны-функции и пересоздавать все документы их использующие. С разметкой текста чуть проще, т.к. обычно пользовательские тэги заменяются нормальными тэгами HTML и внешний вид определяется только или в основном в CSS. Исключением может быть только сложная разметка, например, подсветка синтаксиса в блоках кода. Если обнаружена и исправлена ошибка в парсере, то необходимо перелопатить все документы с соответствующим кодом.

Ссылки конечно же внутренние.

проверять при каждом выводе, есть ли данная ссылка в этой карте или нет

Для этого необходимо иметь список ссылок используемых в документе. Т.е. либо хранить их где-то отдельно, либо каждый раз парсить документ. А это + поиск в БД — тормоза.

Вопрос не как можно, а как лучше.

спустя 17 часов [обр] Алексей Шоков(0/9)[досье]
Для этого необходимо иметь список ссылок используемых в документе. Т.е. либо хранить их где-то отдельно, либо каждый раз парсить документ. А это + поиск в БД — тормоза.

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

Имеются в виду не шаблоны всей страницы, а пользовательские шаблоны-функции и разметка текста. Например, в wiki используем в тексте шаблон-функцию [[Шаблон:Город|Москва|Страна=Россия|...]] который в свою очередь использует ещё десяток шаблонов-функций, которые в свою очередь... Т.о. при кешировании необходимо отслеживать все используемые шаблоны-функции и пересоздавать все документы их использующие. С разметкой текста чуть проще, т.к. обычно пользовательские тэги заменяются нормальными тэгами HTML и внешний вид определяется только или в основном в CSS. Исключением может быть только сложная разметка, например, подсветка синтаксиса в блоках кода. Если обнаружена и исправлена ошибка в парсере, то необходимо перелопатить все документы с соответствующим кодом.

Может быть, хранить зависимости? Т.е. чтобы узнать, изменился ли элемент, нужно будет узнать, изменились ли элементы, от которых он зависит. Хотя, что же все таки делают ваши шаблоны-функции, я так и не понял :).

спустя 5 часов [обр] kuglik[досье]

Т.е. всё-таки кеширование и механизм отслеживания изменений.

Хотя, что же все таки делают ваши шаблоны-функции, я так и не понял :).

Это не мои функции, это пример синтаксиса оформления статьи в wiki. Пользоваться HTML-тэгами обычно нельзя, поэтому повсеместно вводят упрощённое форматирование, как например здесь: цитата начинается с <<< и закрывается >>>. В wiki пошли дальше и предоставили возможность пользователям самим разрабатывать шаблоны-функции. У них есть имя и им можно передавать параметры. Внутри самого шаблона уже можно использовать HTML-кодирование и вызывать другие шаблоны.

спустя 1 день 18 часов [обр] Алексей Шоков(0/9)[досье]
kuglik[досье], теперь понятно. Просто не приходилось пользоваться этим раньше.
спустя 10 минут [обр] Алексей Севрюков(2/1280)[досье]
kuglik[досье] off: это не цитата, это оформление кода. Цитата начинается с <[ и заканчивается зеркально ]>.
спустя 1 час 52 минуты [обр] Владимир Палант(0/4445)[досье]
Могу сказать, что делает База Знаний на Xpoint. При редактировании документа создается "наполовину" отформатированная версия, которая сохраняется вместе с исходной. Это уже HTML-код, но динамическая информация (к примеру, ссылки на темы в форуме) заменена метками. Метка содержит имя функции, которая отвечает за отображение, и ее параметры. Когда документ нужно отобразить, метки заменяются. Это сравнительно быстрая операция, поскольку парсинг разметки прошел заранее, и нужно уже только найти метки.
спустя 7 часов [обр] kuglik[досье]

Алексей Севрюков[досье]

это не цитата, это оформление кода

Да, спасибо, но для примера это не важно.

Владимир Палант[досье]
Т.е. заменяются явные подстановки такие как blockquote, code и т.п.? А почему сразу ссылки не заменяются? Их потом скрипт проверяет на доступность? Это именно метки или встроенные вызовы функций?

Не в тему: зачем вы храните исходное сообщение, если на форуме нет режима редактирования?

спустя 38 минут [обр] Алексей Севрюков(2/1280)[досье]

kuglik[досье]

Не в тему: зачем вы храните исходное сообщение, если на форуме нет режима редактирования?

Модераторы могут редактировать сообщения.

спустя 25 минут [обр] Владимир Палант(0/4445)[досье]

kuglik[досье]
Ссылки не заменяются, поскольку к примеру может меняться заголовок тем — это динамическая информация. И да, это именно метки, которые преобразуются в вызовы функций.

Речь не о форуме (на форуме этот механизм пока не задействован), а о базе знаний. Там любой может редактировать.

спустя 18 часов [обр] kuglik[досье]
Алексей Шоков[досье], Владимир Палант[досье] Спасибо за участие. Вывод сделан: кешировать, кешировать и кешировать!
спустя 8 часов [обр] Алексей Севрюков(2/1280)[досье]

Владимир Палант[досье]

на форуме этот механизм пока не задействован

а как же ссылки на темы? В частности удаленная тема показывается как перечеркнутый адрес, а не название темы.

спустя 3 минуты [обр] Владимир Палант(0/4445)[досье]
Алексей Севрюков[досье]
Имелось в виду — не задействовано кеширование отформатированного текста. Форум всегда парсит и форматирует сообщения заново, когда нужно показать тему.
Powered by POEM™ Engine Copyright © 2002-2005