Visitados recientemente
Visitados recientemente

¿De qué se trata Smart Content Dependency Management™?

[DOCUMENTOTÉCNICO] Última actualización por Joe Schaefer en vie., 12 jun. 2026    origen
 

árbol

Tabla de contenido


Resumen

Gestión de dependencias de contenido inteligente™ trata sobre el círculo de ideas relacionadas con la prestación de apoyo y facilitación para construcciones incrementales, al tiempo que se mantiene fiel al Principio de normalización de contenido — que permalinks debe ser la única fuente de datos, sin importar cómo se cure su contenido en todo el árbol de origen y los artefactos de compilación resultantes.

Este artículo presenta la https://iconoclasts.blog/ sitio web como un estudio de caso para una demostración de las mejores prácticas y análisis de las topologías de gráficos asociadas.


Caveats

Esto solo importa cuando necesitas sopesar el costo de realizar compilaciones completas de sitios cada vez que necesitas ajustar el contenido en una página web. Si su sitio web tiene menos de 1K archivos de origen, relaje y lea lo siguiente con vistas a sus necesidades futuras. Usted eligió usar nuestra plataforma, que está diseñada para escalar con usted, no en su contra. Para la mayoría de las páginas, este material a continuación trata sobre gráficos de dependencia de contenido dispersos para sitios con más de 1K páginas.

Por ejemplo, el Apache https://www.OpenOffice.Org sitio web fue capaz de construir sus archivos 40K+ utilizando la versión original de Apache de este sistema de compilación, con soporte totalmente integrado para las compilaciones incrementales — sin ninguna dependencia configurada — Haciendo un uso inteligente de la tecnología tradicional SSI solo.

Por defecto, nuestro sistema de compilación solo creará los archivos que ha cambiado, sin preocuparse por las dependencias entre archivos (a menos que los especifique en %path::dependencies — más abajo). Si el archivo que ha cambiado está en la templates/ o lib/ directorio, se disparará una compilación de sitio completa en su lugar.


Tejiendo el gráfico de dependencia de su sitio web

Matemáticamente, una Topología τ\tau es una especificación completa de los subconjuntos abiertos de un espacio XX, cuyo objetivo es indicar las relaciones de proximidad entre puntos xx del espacio XX. Cuándo XX es un gráfico, una topología τ\tau para XX equivale a especificar los bordes que conectan los vértices del gráfico juntos (aquí los vértices se ven como los puntos de XX, y los bordes de conexión determinan los barrios de esos puntos como conjuntos abiertos básicos para la topología). Una topología de gráficos dirigida es esencialmente lo mismo, pero incorpora una referencia a una incrustación topológica de (X,τ)(X,\tau) en un espacio topológico más amplio (Y,σ)(Y,\sigma) , donde las conexiones de borde de la incrustación están representadas por curvas direccionales, sin intersección (Jordania).

Este último concepto es lo que utilizaremos al discutir la topología del gráfico de dependencia τ\tau asociado al espacio XX de archivos fuente debajo del sitio content/ subdirectorio (aquí (Y,σ)(Y,\sigma) es Rn\mathbb{R}^n con su topología métrica para n{2,3}n \in \{2,3\}y los bordes de XX No son intersecciones, curvas dirigidas Jordan que conectan un archivo xXx \in X a su conjunto de ficheros sobre los que xx depende de: {xXxx}\set{x^\prime \in X | x \rightarrow x^\prime}).

Que tiene una comprensión clara del gráfico de dependencia de su sitio web garantizará que pueda maximizar el rendimiento de nuestra tecnología de creación a escala. Tomamos la información que usted proporciona a %path::dependencies durante la carga de creación de su sitio web lib/path.pm archivo, construir un mapa inverso de archivos dependientes y utilizar ese mapa inverso para determinar el corpus completo de archivos que se van a crear para cualquier svn commit a nuestro sistema.

Es importante tener en cuenta que las relaciones de dependencia entre los archivos de origen pueden y deben ser capturadas por completo por la %path::dependencies hash durante la carga de inicio del sistema de compilación de lib/path.pm de su árbol de origen, que es cómo las vistas incorporadas contenidas en nuestro SunStarSys::View El paquete Perl está destinado a funcionar. El walk_content_tree, archivedy seed_file_deps funciones de utilidad importables de SunStarSys::Util son útiles para construir el %path::dependencies hash, con soporte integrado para gestionar una caché de dependencias para acelerar las compilaciones incrementales a escala.

Esta es la parte de nuestra vida 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{$_}++;
    }
  };

Por favor, revisa ese código para obtener ideas sobre cómo quieres que funcione tu sitio web. Sí, hay cierta complejidad razonable (que involucra tanto las expresiones regulares de Perl como la cáscara UNIX de Perl) glob interfaces, de forma muy precisa) sobre cómo %path::dependencies se construye en ese archivo, pero en lugar de simplemente ver esto como un trabajo de optimización, en su lugar, mirarlo como proporcionar los ingredientes básicos necesarios para construir los principales aspectos de la topología *link *de una manera automatizada y generada dinámicamente.

Dónde están las entradas en %path::dependencies ¿Origen? Si no nace de una invocación de walk_content_tree { seed_file_deps ... }, (que básicamente se sumerge en los encabezados y el contenido de los archivos de origen de Markdown), entonces solo están codificados en lib/facts.yml en tiempo de carga.

Los gráficos de dependencias cíclicas son la norma

Nuestro sitio actualmente consiste en 2417 source files en content/. Este es un 100+ vertices x 600+ edges, representación de gráfico dirigida bidimensional desplazable de una instantánea reciente de las dependencias de la página en inglés en este sitio (uso de GraphViz dot):

Dependencias del idioma inglés

Muy complejo, incluso para un sitio web pequeño como este! Muchas intersecciones de borde al tomar n=2n=2 (evitable en dimensión n=3n=3). De particular importancia es el conjunto principal de dependencias cíclicas densas en los archivos no archivados en nuestro sitio. /essays/ directorio, hacia la parte inferior-centro-derecha del gráfico, que es lo que debe ser el gráfico de dependencia de un buen sitio de blogs. Estas dependencias se trazan en red curves en la imagen.

Observe también la interconexión interna, esencialmente aislada de los elementos en /categories/*/* y /archives/2026/05/*. Las únicas dependencias externas implican contenido no archivado en /joe/*. Esto es por diseño — los ensayos archivados solo deben cambiar adiabéticamente, tal vez solo para ajustes en sus Category encabezados. Ninguno de esos cambios afecta materialmente el contenido preexistente, por lo que no lo rastreamos. %path::dependencies.

Por supuesto, nuestro Orion Enterprise Wiki Nunca ha tenido problemas para lidiar con las dependencias cíclicas.

¿No se trata sólo de hipervínculos?

¡No! De hecho, la topología de enlace de su sitio web es un asunto completamente separado del gráfico de dependencia del árbol de origen. Un motor de búsqueda buscará naturalmente la topología link, pero no tiene información sobre el gráfico dependent.

Esta es una 16k+ vertices x 90k+ edges, actual bird-eye grqaph del gráfico en inglés link topology para nuestro sitio (uso de GraphViz twopi):

¿Puedes detectar red edges como se especifica en el gráfico de dependencia? El gráfico de topología de enlace es cualitativa y cuantitativamente muy diferente del gráfico de dependencia (dramáticamente más pequeño y menos interconectado) que se muestra anteriormente.

Cómo puede ayudar la tecnología SSI

Tradicional Incluye el lado del servidor (SSI)

  • Excelente para depurar el gráfico de dependencia de su sitio web hasta un tamaño manejable sin sacrificar la latencia de entrega de la página
  • Excelente para reducir la rotación de texto fijo en grandes mensajes de confirmación para una mejor revisión por pares y supervisión de los juegos de cambios creados
  • lusura para recontexualizar páginas web completas en una ubicación diferente en la jerarquía de la raíz de documentos

API de plantilla

etiqueta ssi

Syntax:

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

  • rutas enraizadas en content directorio de origen
    : omite la parte de cabecera del archivo de origen que se va a ssi incluido
  • reescribe las URL relativas a las URL absolutas en el contenido incluido de la ruta de destino
filtro ssi

Syntax:

{{ contenido|ssi }}

  • evaluaciones recursivas ssi etiquetas en el valor que se va a filtrar
  • útil para evitar el uso de un gran valor (3+) de quick_deps en un @path::patterns hashref de argumento de entrada, que puede afectar al rendimiento
  • Abstracción del sistema de archivos barebones que es difícil de soportar de forma segura en un <VirtualHost> contexto
  • las mismas desventajas con las tradicionales ssi en páginas web completas
  • nuestro Orion Enterprise Wiki sistema no los apoya

Herramientas de creación para enlaces permanentes

Curación de documentos

El sistema de compilación de Orion tiene soporte integrado para lo que llamamos Curación de documentos, que es el proceso de recontextualización y reorganización de su contenido en función de cómo establezca el Categories y Status encabezados en los archivos de origen de Markdown. Estas funciones están desactivadas por defecto, pero se pueden activar mediante la configuración de una category_root (para soporte de categoría) o archive_root (para el soporte de archivado) en el argumento hashref asociado al @path::patterns entrada.

Categorías
  • el nuevo contenido se crea con la plantilla ssi etiquetas que apuntan a la ubicación de enlace permanente,
  • las categorías son estrictamente aditivas (es decir, eliminar una categoría de los encabezados de una página de origen no la eliminará de esa categoría en el sitio activo),
  • generados bajo demanda,
  • eliminar todas las categorías en una sola confirmación es una gran manera de sincronizarlas con las especificaciones exactas en todos los encabezados de las páginas de origen, sin destruir el contenido de la categoría conservado en el sitio en vivo.
Páginas archivadas

En nuestro sitio, archivamos agresivamente ensayos anticuados para mantener bajos los tiempos de construcción de nuevos ensayos, sin destruir los enlaces permanentes a los documentos archivados. El gráfico de dependencia con respecto al /archives/ directorio (para nuestro sitio) es razonablemente autónomo según las siguientes reglas:

  • contenido construido usando Plantilla ssi etiquetas que apuntan hacia la ubicación de enlace permanente, mientras se quita el Categories encabezado de la página de origen construida
  • contenido en /(essays|clients)/ siempre son enlaces permanentes, incluso después de archivar
  • el archivado elimina eficazmente la ubicación de enlace permanente del gráfico de dependencia*, sin eliminar el enlace permanente en sí mismo del sitio web
Lede

Comentarios HTML incrustados en los límites del formulario de prosa de Markdown del contenido de la hoja. Utilizamos {Nº de permiso} para este fin.

El procesamiento de las hojas se realiza con la lede Filtro de plantilla. Es útil combinar esto con la ssi filtro para indexar un archivo de categoría con más de una página de categoría dentro de él.


Conclusiones

Hay estructuras y relaciones de datos interesantes que aún no se han descubierto al tratar con el gráfico de dependencia de un sitio web desde una perspectiva de rendimiento de construcción, que es un área de interés mucho más nueva que la literatura de investigación que profundiza en las estructuras de datos y las emisiones asociadas que rodean la *topología de enlace *1,2.

Las compilaciones incrementales convencionales para proyectos de desarrollo de software puro siguen siendo un tema candente. La investigación cubierta en 3,4 publicado en octubre de 2022, aproximadamente un mes antes de que se espere que este ensayo se complete. El pluto5 El sistema de construcción tiene características bastante similares a las nuestras (la construcción en sí puede regenerar y reconstruir dinámicamente dependencias).

La buena noticia es que lo tenemos cubierto como nuestro cliente. Le mantendremos informado de las mejores prácticas y el estado del arte en este espacio, por lo que se beneficiará de nuestras lecciones aprendidas durante la última década y hasta mañana.


Notas al pie

  1. Identificación de clusters en el gráfico web basado en la topología de enlaces Séptimo Simposio Internacional de Ingeniería y Aplicaciones de Bases de Datos, 2003. Procedimientos.

  2. Inferencia de Comunidades Web desde Topología de Enlace Actas de la novena conferencia ACM sobre hipertexto e hipermedia: enlaces, objetos, tiempo y espacio — estructura en los sistemas hipermedia: enlaces, objetos, tiempo y espacio — estructura en los sistemas hipermedia. 1998.

  3. Sobre los beneficios y límites de las configuraciones incrementales de software de compilación: un estudio exploratorio ICSE ‘22: Actas de la 44ª Conferencia Internacional sobre Ingeniería de Software, mayo de 2022

  4. Hacia la creación incremental de configuraciones de software ICSE-NIER ‘22: Actas de la 44ª Conferencia Internacional ACM/IEEE sobre Ingeniería de Software: Nuevas ideas y resultados emergentes, mayo de 2022

  5. Un sistema de creación incremental sólido y óptimo con dependencias dinámicas OOPSLA 2015: Actas de la Conferencia Internacional ACM SIGPLAN 2015 sobre Programación, Sistemas, Idiomas y Aplicaciones Orientadas a Objetos Octubre 2015