Что такое Smart Content Dependency ManagementTM?

[ПРОВЕРЕНО] Последнее обновление от Joe Schaefer на вт, 13 мая 2025    источник
 

Аннотация

Умное управление зависимостями контента™ относится к кругу идей, связанных с предоставлением поддержки и содействия для инкрементальных построек, оставаясь верным принципу нормализации контента ** — этот постоянные ссылки Он должен быть единственным источником истины, независимо от того, как его содержимое курируется по всему исходному дереву и в результате строит артефакты.

В этой статье веб-сайт https://sunstarsys.com/ представлен в качестве примера для демонстрации передового опыта и анализа соответствующих топологий графов.

оговорки

Это имеет значение только тогда, когда вам нужно взвесить расходы на выполнение полных сборок сайта каждый раз, когда вам нужно настроить контент на веб-странице. Если на вашем сайте содержится менее 1K исходных файлов, relax, и прочитайте следующее с прицелом на ваши будущие потребности. Вы решили использовать нашу платформу, которая предназначена для масштабирования с вами, а не против вас. Для большинства страниц этот материал ниже посвящен разделенным графам зависимости содержимого для сайтов с более чем 1K страницами.

Например, веб-сайт Apache https://www.OpenOffice.Org смог создать свои файлы 40K+, используя оригинальную версию Apache этой системы сборки, с полностью интегрированной поддержкой инкрементных сборок. — без какой-либо настраиваемой зависимости — умное использование только традиционных технологий SSI.

По умолчанию наша система сборки будет создавать только файлы, которые вы изменили, без заботы о внутрифайловых зависимостях (если вы не указали их в %path::зависимости — подробнее об этом ниже). Если измененный файл находится в шаблоны/ или либ/ каталог, полная сборка сайта будет запущена.

Сплетение График зависимости вашего сайта вместе

Математически, Топология τ\tau является полным описанием подмножеств open пространства XX, целью которого является указание ближайших отношений между точками xx Пространство XX. Когда XX является графом, топологией τ\tau для XX количества для задания ребер, соединяющих вершины диаграммы вместе (здесь вершины рассматриваются как точки XX, и соединительные края определяют окрестности этих точек как основные открытые наборы для топологии). Топология направленных графов по существу то же самое, но включает ссылку на топологическое встраивание (X,τ)(X,\tau) в более крупное топологическое пространство (Y,σ)(Y,\sigma) , где граничные соединения встраивания представлены направленными, не пересекающимися (Иордания) кривыми.

Последняя концепция – это то, что мы будем использовать при обсуждении топологии графа зависимости τ\tau связан с пространством XX исходных файлов под вашим сайтом контент/ подкаталог (здесь) (Y,σ)(Y,\sigma) равно Rn\mathbb{R}^n с его метрической топологией для n{2,3}n \in \{2,3\}, и края XX не пересекающиеся, направляемые кривые Иордании, соединяющие файл xXx \in X к его набору файлов, на которых xx зависит от: {xXxx}\set{x^\prime \in X | x \rightarrow x^\prime}).

Имеет четкое понимание графа зависимости вашего сайта гарантирует, что вы сможете максимально увеличить производительность нашей технологии сборки в масштабе. Мы принимаем информацию, которую вы предоставляете %path::зависимости во время загрузки сборки вашего сайта lib/path.pm файл, построить обратную карту зависимых файлов и использовать *что обратная карта *, чтобы определить полный корпус файлов для построения для любого заданного резервирование SVN Вы делаете это в нашей системе.

Важно отметить, что отношения зависимости между исходными файлами могут и должны быть полностью захвачены. %path::зависимости хеш при загрузке системы сборки lib/path.pm из вашего исходного дерева, как встроенные виды, содержащиеся в нашем SunStarSys::Просмотр Пакет Perl предназначен для работы. The walk_content_tree, архивировано, и seed_file_deps полезные функции, импортируемые из SunStarSys::Util полезные средства при построении %path::зависимости hash со встроенной поддержкой управления кэшем зависимостей для ускорения инкрементных сборок в масштабе.

Вот эта часть нашей жизни lib/path.pm:

our (%dependencies, @acl);

# entries computed below at build-time, or drawn from the .deps cache file

walk_content_tree {

  $File::Find::prune = 1, return if m#^/(images|css|editor\.md|js|fontawesome)\b#;

  return if -d "content/$_";

  seed_file_deps, seed_file_acl if /\.(?:md|ya?ml)[^\/]*$/;

  for my $lang (qw/en es de ru sv he zh-TW fr/) {

    if (/\.md\.$lang$/ or m!/index\.html\.$lang$! or m!/files/|/slides/|/bin/!) {
      push @{$dependencies{"/sitemap.html.$lang"}}, $_ if !archived;
    }

    if (s!/index\.html\.$lang$!!) {
      $dependencies{"$_/index.html.$lang"} = [
        grep s/^content// && !archived,
        glob("'content$_'/*.{md.$lang,pl,pm,pptx}"),
        glob("'content$_'/*/index.html.$lang")
      ];
      push @{$dependencies{"$_/index.html.$lang"}}, grep -f && s/^content// && !m!/index\.html\.$lang!,
        glob("'content$_'/*") if m!/files\b!;
    }
  }
}
  and do {

    while  (my ($k, $v) = each %{$facts->{dependencies}}) {
      push @{$dependencies{$k}}, grep $k ne $_, grep s/^content// && !archived, map glob("'content'$_"), ref $v ? @$v : split /[;,]?\s+/, $v;
    }

    open my $fh, "<:encoding(UTF-8)", "lib/acl.yml" or die "Can't open acl.yml: $!";
    push @acl, @{Load join "", <$fh>};
  };

Пожалуйста, обдумайте этот код для идей о том, как вы хотите *ваш веб-сайт * работать. Да, есть некоторая разумная сложность (включая как регулярные выражения Перла, так и оболочку UNIX C от Перла) глобус интерфейсы, очень точным образом) вокруг того, как %path::зависимости построена в этом файле, но вместо того, чтобы просто рассматривать это как работу по оптимизации, вместо этого взгляните на него как на основные ингредиенты, необходимые для интерпретации основных аспектов топологии ссылок в автоматизированном, динамически генерируемом виде.

Где находятся записи в %path::зависимости Происхождение? Если они не рождаются от призыва walk_content_tree { seed_file_deps ... }, (который в основном погружается в заголовки исходных файлов разметки и контент), затем они просто жестко закодированы в lib/path.pm во время загрузки.

Циклические графики зависимостей являются нормой

Наш сайт состоит из 240 исходных файлов дюйм контент/. Вот 85 вершин x 465 ребер, прокручиваемое, двухмерное направленное графическое представление недавнего снимка зависимостей страницы на английском языке на нашем сайте (использование GraphViz точка):

Зависимости от английского языка.

Довольно сложный, даже для небольшого сайта, такого как этот! Многие пересечения краев при приеме n=2n=2 (недоступно в измерении) n=3n=3). Особо следует отметить основной набор плотных, циклических зависимостей в неархивированных файлах нашего сайта. /очки/ директория, к нижнему центру справа от графа, что то, как должен выглядеть хороший график зависимости сайта блога. Эти зависимости вводятся в красные кривые в изображении.

Также обратите внимание на внутреннюю, по существу изолированную взаимосвязанность элементов в /категории/*/* и /archives/2022/11/*. Единственные внешние зависимости включают неархивированный контент в /очки/*. Это по дизайну — архивные эссе должны только изменяться адиабатически, возможно, исключительно для корректировки их Категория заголовки. Ни одно из этих изменений не влияет на существующий контент, поэтому мы не отслеживаем его в %path::зависимости.

Конечно, наша Орион Энтерпрайз Вики Никогда не было проблем с циклическими зависимостями.

Это не только гиперссылки?

Нет! На самом деле топология ссылок вашего сайта является совершенно отдельным вопросом от графа зависимости исходного дерева. Поисковая система, естественно, отбросит топологию link, но не имеет представления о графе зависимости.

Вот а 240+ вершин x 3859 ребер, текущий граф ‘птицы-глаза’ английского графа link topology для нашего сайта (использование GraphViz близнецы):

Вы можете заметить красные края как указано в графе зависимости? График link topology качественно и количественно очень отличается от (крайне меньшего и менее взаимосвязанного) *графа зависимостей, изображенного выше.

Как технология SSI может помочь

Традиционный Включает сервер (SSI).

  • отлично для обрезки графа зависимости вашего сайта до управляемого размера без ущерба для задержки доставки страницы
  • отлично для уменьшения оттока неизменяемых данных в больших сообщениях фиксации для лучшего просмотра и контроля за вашими встроенными наборами изменений
  • lousy для реконтекстуализации целых веб-страниц в другое место в иерархии корня вашего документа

API-интерфейсы шаблонов ####

тег ssi

Синтаксис:

{% ssi `/content_rooted/path/to/source_file` %}

  • тропы, укорененные в содержимое исходный каталог
  • пропускает часть заголовка исходного файла, который должен быть ssi включено
  • перезаписывает относительные URL-адреса в абсолютные URL-адреса в содержании целевого пути

Фильтр SSI ####

Синтаксис:

{{ контент|ssi }}

  • рекурсивные оценки ssi теги в значении для фильтрации
  • полезен для избежания использования большой величины (3+) quick_deps через @path::шаблоны hashref аргумента записи, который может повлиять на производительность
  • абстракция файловой системы barebones, которую трудно безопасно поддерживать в <virtualhost> контекст
  • такие же недостатки с традиционными ssi на полных страницах
  • наши Орион Энтерпрайз Вики система их не поддерживает

Инструменты сборки для постоянных ссылок

Обработка документа

Система сборки Orion имеет интегрированную поддержку того, что мы называем Document Curation, которая представляет собой процесс реконтекстуализации и реорганизации вашего контента на основе того, как вы устанавливаете Категории и Архив заголовки в исходных файлах Markdown. Эти функции отключены по умолчанию, но могут быть активированы путем установки category_root (для поддержки категории) или archive_root (для поддержки архивирования) в связанном аргументе hashref к желаемому @path::шаблоны Вход.

Категории
  • новый контент создается с использованием шаблона ssi теги, указывающие обратно на расположение Постоянной ссылки, при удалении Архив заголовок с созданной исходной страницы
  • категории являются строго аддитивными (т. е. удаление категории из заголовков исходной страницы не удалит ее из этой категории на действующем сайте),
  • генерируется по требованию
  • удаление всех категорий в одном коммите – отличный способ синхронизировать их с точными спецификациями во всех заголовках исходных страниц, не уничтожая сохраненный контент категории на реальном сайте
Архивированные страницы

На нашем сайте мы агрессивно архивируем устаревшие эссе, чтобы сохранить время сборки новых эссе низким, не разрушая постоянные ссылки на архивные документы. График зависимости относительно /архивы/ каталог (для нашего сайта) является достаточно самостоятельным по следующим правилам:

  • контент, созданный с использованием шаблона ssi теги, указывающие обратно на расположение Постоянной ссылки, при удалении Категории и Архив заголовки с созданной исходной страницы
  • содержание в /(essays|клиенты)/ всегда постоянные ссылки, даже после архивирования
  • архивирование эффективно удаляет расположение Постоянной ссылки из графа зависимостей, не удаляя саму Постоянную ссылку с сайта
Леде

HTML-комментарии, встроенные в границы формы прозы Markdown для содержимого lede. Мы используем {Число светодиодов} с этой целью.

Обработка светодиодов выполняется с помощью подошва Фильтр шаблонов. Полезно сочетать это с ssi фильтр для индексации файла категорий с несколькими страницами категорий в нем.

Выводы

Есть интересные структуры данных и отношения, которые еще предстоит раскрыть при работе с графом зависимостей веб-сайта с точки зрения производительности сборки, что является гораздо более новой областью интереса, чем исследовательская литература, исследующая структуры данных и связанные с ними проблемы, связанные с топологией ссылок1,2.

Обычные инкрементальные сборки для чистых проектов разработки программного обеспечения по-прежнему являются горячей темой. Исследование, охватываемое 3,4, было опубликовано в октябре 2022 года, примерно за месяц до завершения этого эссе. Система сборки pluto5 имеет функции, очень похожие на наши (сама сборка может динамически восстанавливать и перестраивать зависимости).

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

Сноски

  1. Идентификация кластеров на веб-графе на основе топологии ссылок Седьмой международный симпозиум по проектированию и применению баз данных, 2003 год. Материалы.

  2. Вывод веб-сообществ из топологии ссылок Материалы девятой конференции ACM по гипертексту и гипермедиа: ссылки, объекты, время и пространство — структура в гипермедиа системах: связи, объекты, время и пространство — Структура в гипермедийных системах. 1998.

  3. О преимуществах и ограничениях конфигураций ПО для поэтапной сборки: исследовательское исследование ICSE ‘22: Материалы 44-й Международной конференции по программной инженерии, май 2022 г.

  4. На пути к постепенному созданию конфигураций программного обеспечения ICSE-NIER ‘22: Материалы 44-й Международной конференции ACM/IEEE по разработке программного обеспечения: новые идеи и новые результаты, май 2022 г.

  5. Звуковая и оптимальная система инкрементной сборки с динамическими зависимостями OOPSLA 2015: Материалы Международной конференции ACM SIGPLAN 2015 года по объектно-ориентированному программированию, системам, языкам и приложениям, октябрь 2015 года