В чем суть Smart Content Dependency Management™?
Содержание
Аннотация
Управление зависимостями интеллектуального контента™ это круг идей, связанных с предоставлением поддержки и содействия инкрементальным построениям, оставаясь верным Принципу нормализации контента — тот постоянные ссылки должен быть единым источником достоверных данных, независимо от того, как их содержание курируется в дереве источников и в результате артефактов сборки.
Эта статья представляет https://iconoclasts.blog/ веб-сайт в качестве тематического исследования для демонстрации лучших практик и анализа связанных топологий графов.
Квесты
Это важно только тогда, когда вам нужно взвесить расходы на выполнение полной сборки сайта каждый раз, когда вам нужно настроить контент на веб-странице. Если на вашем веб-сайте меньше 1K исходных файлов, успокойтесь, и прочитайте следующее с учетом ваших будущих потребностей. Вы решили использовать нашу платформу, которая предназначена для масштабирования с вами, а не против вас. Для большинства страниц этот материал ниже посвящен диаграммам sparse contentependency graphs для сайтов с более чем страницами 1K.
Например, Апачи https://www.OpenOffice.Org веб-сайт смог создать свои файлы 40K+, используя оригинальную версию этой системы сборки Apache, с полностью интегрированной поддержкой инкрементных сборок — без настроенных зависимостей — используя только традиционные технологии SSI.
По умолчанию наша система сборки будет создавать только файлы, которые вы изменили, без учета зависимостей внутри файла (если вы не указали их в %path::dependencies — Больше об этом ниже). Если измененный файл находится в templates/ или lib/ каталог, вместо этого будет запущена полная сборка сайта.
Сплетение График зависимостей вашего сайта вместе
Математически, топология полная спецификация подмножеств open пространства , целью которого является указание отношений близости между точками из космоса . Когда является графиком, топологией для величины, указывающие края, соединяющие вершины диаграммы вместе (здесь вершины рассматриваются как точки диаграммы) , и соединительные края определяют окрестности этих точек как основные открытые наборы для топологии). направленная топология графа по существу одно и то же, но включает в себя ссылку на топологическое встраивание в более крупное топологическое пространство , где граничные соединения встраивания представлены направленными, непересекающимися (Иордания) кривыми.
Последняя концепция – это то, что мы будем использовать при обсуждении топологии графа зависимости связан с пространством исходных файлов под вашим сайтом content/ подкаталог (здесь) является с его метрической топологией для , и края не пересекающиеся, направленные кривые Иордании, соединяющие файл к своему набору файлов, на которых зависит от: ).
Наличие четкое понимание графа зависимости вашего сайта обеспечит вам максимальную производительность нашей технологии сборки в масштабе. Мы берем информацию, которую вы предоставляете %path::dependencies во время загрузки сборки вашего сайта lib/path.pm файл, создать обратную карту зависимых файлов и использовать что обратная карта для определения полного состава файлов для построения для любого заданного svn commit Вы делаете для нашей системы.
Важно отметить, что зависимости между исходными файлами могут и должны быть полностью захвачены %path::dependencies хэш при загрузке системы сборки lib/path.pm из вашего исходного дерева, как встроенные виды, содержащиеся в нашем SunStarSys::View Пакет Perl предназначен для работы. The walk_content_tree, archived, и seed_file_deps служебные функции, импортируемые из SunStarSys::Util являются полезными помощниками в строительстве %path::dependencies hash, со встроенной поддержкой управления кэшем зависимостей для ускорения инкрементных сборок в требуемом масштабе.
Вот эта часть нашей жизни lib/path.pm:
walk_content_tree {
$File::Find::prune = 1, return if m#^/(images|css|js)\b#;
return if -d "content/$_";
my $path = $_;
utf8::is_utf8 $path or utf8::decode $path;
state $count = 0;
for my $lang (qw/en es de fr ru sv he zh-TW ar ko ja pt-BR/) {
delete $dependencies{"/sitemap.html.$lang"} if ++$count <= 12;
next if m!\.page/!;
if (/\.md\.$lang$/ or m!/index\.html\.$lang$!) {
push @{$dependencies{"/sitemap.html.$lang"}}, $path if !archived;
}
if (/^(.*)\.tex\.$lang$/ and -f "content$1.bib.lang") {
push @{$dependencies{$path}}, "$1.bib.$lang";
}
if ($path =~ s!/index\.html\.$lang$!!) {
$dependencies{"$path/index.html.$lang"} = [
grep {utf8::decode $_; s/^content//}
glob("'content$path'/*.md.$lang"),
glob("'content$path'/*/index.html.$lang")
];
}
}
}
and do {
while (my ($k, $v) = each %{$facts->{dependencies}}) {
$dependencies{$k} = [grep $k ne $_, grep s/^content// && !archived, map glob("'content'$_"), ref $v ? @$v : split /[;,]?\s+/, $v];
}
open my $fh, "<:raw", "lib/acl.yml" or die "Can't open acl.yml: $!";
unshift @acl, @{Load join "", <$fh>};
my %cache;
@acl = grep !$cache{$_->{path}}++, @acl;
for (glob("content/*/index.md.*")) {
next if /archives|categories/;
s!/index\.md\.[^/]+$!!;
push @acl, { path => $_, rules => {
'@bloggers' => 'rw',
'@svnadmin' => 'rw',
'*' => 'r',
}} unless $cache{$_}++;
}
};
Пожалуйста, обдумайте этот код для идей о том, как вы хотите, чтобы ваш сайт работал. Да, есть некоторая разумная сложность (включающая как регулярные выражения Перла, так и C-оболочку Перла UNIX) glob интерфейсы, очень точным образом) вокруг того, как %path::dependencies построено в этом файле, но вместо того, чтобы просто рассматривать это как работу по оптимизации, вместо этого рассмотрите его как предоставление основных ингредиентов, необходимых для толкования основных аспектов топологии link в автоматизированном, динамически генерируемом виде.
Где находятся записи %path::dependencies Происхождение? Если они не родились от призыва walk_content_tree { seed_file_deps ... }, (которые в основном погружаются в заголовки и контент исходных файлов разметки), тогда они просто жестко закодированы в lib/facts.yml во время загрузки.
Циклические диаграммы зависимостей являются нормой
Наш сайт в настоящее время состоит из 2417 source files в content/. Вот это 100+ vertices x 600+ edges, прокручиваемое двумерное направленное графическое представление последнего снимка зависимостей страницы английского языка на этом сайте (использование GraphViz dot):
Довольно сложно, даже для небольшого сайта, такого как этот! Многие пересечения края при приеме (избежно в измерении) ). Примечательно, что основной набор плотных, циклических зависимостей в неархивированных файлах нашего сайта /essays/ каталог, в направлении нижнего центра справа от графика, так должен выглядеть хороший график зависимости сайта блога. Эти зависимости втягиваются в red curves в изображении.
Также обратите внимание на внутреннюю, по существу изолированную взаимосвязанность элементов в /categories/*/* и /archives/2026/05/*. Единственные внешние зависимости включают неархивированный контент в /joe/*. Это по дизайну — архивные эссе должны изменяться только адиабатически, возможно, исключительно для корректировки их Category заголовков. Ни одно из этих изменений не оказывает существенного влияния на существующий контент, поэтому мы не отслеживаем его в %path::dependencies.
Конечно, наши Орион Энтерпрайз Вики Никогда не было проблем с циклическими зависимостями.
Это не только о гиперссылках?
Нет! На самом деле топология ссылки вашего веб-сайта является совершенно отдельным вопросом от графика зависимости исходного дерева. Поисковая система, естественно, извлечет топологию link, но не имеет представления о графике зависимости.
Вот это 16k+ vertices x 90k+ edges, текущий птицы-глаза grqaph английского link топологии графа для нашего сайта (использование GraphViz twopi):
Можете ли вы определить red edges как указано в графе зависимости? График link topology качественно и количественно очень отличается от (резко меньшего и менее взаимосвязанного) зависимого графа, изображенного выше.
Чем может помочь технология SSI
Традиционный Включает сервер (SSI)
- отлично для сокращения графа зависимости вашего сайта до управляемого размера без ущерба для задержки доставки страницы
- отлично для уменьшения оттока неизменяемых шаблонов в больших сообщениях фиксации для лучшего коллегиального обзора и надзора за созданными наборами изменений
- lousy для реконтексуализации всех веб-страниц в другом месте в иерархии корня документа
API шаблонов
тег ssi
Syntax:
{% ssi `/content_rooted/path/to/source_file` %}
- пути, укорененные в
contentисходный каталог - пропускает часть заголовка исходного файла
ssiвключено - перезаписывает относительные URL-адреса в абсолютные URL-адреса в включенном контенте целевого пути
фильтр ssi
Syntax:
{{ содержимое|ssi }}
- рекурсивные оценки
ssiтеги в значении для фильтрации - полезно для избежания использования большого значения (3+)
quick_depsв@path::patternsхэшреф аргумента записи, который может повлиять на производительность
Почему бы не SymLinks?
- абстракция файловой системы barebones, которую трудно безопасно поддерживать в
<VirtualHost>контекст - те же недостатки с традиционными
ssiна всех веб-страницах - наш Орион Энтерпрайз Вики система их не поддерживает
Инструменты сборки для постоянных ссылок
Курация документа
Система сборки Orion имеет интегрированную поддержку того, что мы называем Document Curation, которая является процессом реконтекстуализации и реорганизации вашего контента в зависимости от того, как вы установили Categories и Status заголовки в исходных файлах Markdown. Эти функции по умолчанию отключены, но могут быть активированы путем установки category_root (для поддержки категории) или archive_root (для поддержки архивирования) в соответствующем аргументе хешрефа @path::patterns вход.
Категории
- новый контент создается с использованием шаблона
ssiтеги, указывающие на местоположение постоянной ссылки, - категории являются строго аддитивными (т.е. удаление категории из заголовков исходной страницы не приведет к ее удалению из этой категории на сайте);
- генерируется по требованию,
- удаление всех категорий в одном коммите – отличный способ синхронизировать их с точными спецификациями во всех заголовках исходных страниц, не уничтожая сохраненный контент категории на реальном сайте.
Архивированные страницы
На нашем сайте мы агрессивно архивируем устаревшие эссе, чтобы сократить время создания новых эссе, не уничтожая постоянные ссылки на архивные документы. Диаграмма зависимости относительно /archives/ каталог (для нашего сайта) является достаточно автономным в соответствии со следующими правилами:
- контент, построенный с использованием шаблона
ssiтеги, указывающие на местоположение постоянной ссылки, при удаленииCategoriesзаголовок с построенной исходной страницы - содержание в
/(essays|clients)/всегда постоянные ссылки, даже после архивирования - архивирование эффективно удаляет местоположение постоянной ссылки из графа зависимости, не удаляя саму постоянную ссылку с веб-сайта
Леде
Комментарии HTML, встроенные в границы прозы Markdown для контента светодиодов. Мы используем {Число ведущих №} Для этой цели.
Обработка светодиодов осуществляется с lede Фильтр шаблонов. Полезно сочетать это с ssi фильтр для индексации файла категорий с несколькими страницами категорий в нем.
Выводы
Существуют интересные структуры данных и отношения, которые еще предстоит раскрыть при работе с графиком зависимости веб-сайта с точки зрения производительности сборки, что является гораздо более новой областью интереса, чем исследовательская литература, погружающаяся в структуры данных и связанные выпуски, окружающие топологию ссылок1,2.
Обычные инкрементные сборки для чистых проектов разработки программного обеспечения по-прежнему являются горячей темой. Исследование, охватываемое 3,4 был опубликован в октябре 2022 года, примерно за месяц до того, как это эссе, как ожидается, будет завершено. Плутон5 система build имеет функции, очень похожие на наши (сама сборка может динамически восстанавливать и перестраивать зависимости).
Хорошей новостью является то, что мы рассмотрели вас как нашего клиента. Мы будем держать вас в курсе лучших практик и современного искусства в этом пространстве, так что вы извлечете выгоду из наших уроков, извлеченных за последнее десятилетие и в завтра.
Сноски
Идентификация кластеров на веб-графе на основе топологии ссылок Седьмой международный симпозиум по проектированию и применению баз данных, 2003 год. Материалы.
Вывод веб-сообществ из топологии ссылок Материалы девятой конференции ACM по гипертексту и гипермедиа: ссылки, объекты, время и пространство — структура в гипермедийных системах: ссылки, объекты, время и пространство — структура в гипермедийных системах. 1998.
О преимуществах и ограничениях конфигураций ПО для инкрементальной сборки: исследование ICSE ‘22: Материалы 44-й Международной конференции по разработке программного обеспечения, май 2022 г.
Поэтапное построение конфигураций программного обеспечения ICSE-NIER ‘22: Материалы 44-й Международной конференции по программной инженерии ACM/IEEE: новые идеи и новые результаты, май 2022 г.
Звуковая и оптимальная система инкрементной сборки с динамическими зависимостями OOPSLA 2015: Материалы Международной конференции ACM SIGPLAN 2015 по объектно-ориентированному программированию, системам, языкам и приложениям Октябрь 2015