Qu'est-ce que Smart Content Dependency ManagementTM ?
Résumé
Gestion intelligente des dépendances de contenu™ concerne le cercle d’idées liées au soutien et à la facilitation des créations incrémentielles, tout en restant fidèle au principe de normalisation du contenu — que permalinks.
Cet article présente le site Web https://sunstarsys.com/ comme une étude de cas pour une démonstration des meilleures pratiques et une analyse des topologies de graphes associées.
Grottes
Cela n’a d’importance que lorsque vous devez peser les dépenses liées à la réalisation de builds de site complets chaque fois que vous avez besoin de modifier le contenu d’une page Web. Si votre site Web contient moins de fichiers source 1K, ** détendez-vous** et lisez ce qui suit en tenant compte de vos besoins futurs. Vous avez choisi d’utiliser notre plateforme, conçue pour évoluer avec vous, pas contre vous. Pour la plupart des pages, ce matériel ci-dessous concerne les graphiques de dépendance de contenu dispersé pour les sites de plus de 1K pages.
Par exemple, le site Web Apache https://www.OpenOffice.Org a pu créer ses fichiers 40K+ à l’aide de la version Apache d’origine de ce système de build, avec une prise en charge entièrement intégrée des builds incrémentiels — sans aucune dépendance configurée —
Par défaut, notre système de compilation ne construira que les fichiers que vous avez modifiés, sans se soucier des dépendances intra-fichiers (sauf si vous les spécifiez dans %path : :dépendances
— plus à ce sujet ci-dessous). Si le fichier que vous avez modifié se trouve dans modèles/
ou lib/
Tisser le graphique de dépendance de votre site Web ensemble
Mathématiquement, une Topologie est une spécification complète des sous-ensembles open d’un espace
, dont le but est d’indiquer les relations de proximité entre points
de l’espace
. Quand
est un graphique, une topologie
pour
revient à spécifier les arêtes reliant les sommets du graphe ensemble (ici les sommets sont considérés comme les points de
, et les bords de connexion déterminent les quartiers de ces points en tant que jeux ouverts de base pour la topologie). Une topologie graphique dirigée est essentiellement la même chose, mais incorpore une référence à une intégration topologique de
dans un espace topologique plus vaste
Ce dernier concept est ce que nous utiliserons lors de la discussion de la topologie du graphique de dépendance associé à l’espace
des fichiers source sous votre site
contenu/
sous-répertoire (ici est
avec sa topologie métrique pour
et les bords de
sont des courbes de Jordan dirigées sans intersection reliant un fichier
à son ensemble de fichiers sur lesquels
dépend de :
Avoir une compréhension claire du graphique de dépendance de votre site Web vous permettra de maximiser les performances de notre technologie de construction à grande échelle. Nous prenons les informations que vous fournissez à %path : :dépendances
pendant le chargement de votre site Web lib/path.pm
fichier, construire une mappe inverse de fichiers dépendants, et utiliser celle mappe inverse pour déterminer le corpus complet de fichiers à construire pour n’importe quel validation svn
Il est important de noter que les relations de dépendance entre les fichiers source peuvent et doivent être entièrement capturées par le %path : :dépendances
hachage pendant la charge de démarrage du système de build lib/path.pm
de votre arbre source, qui est la façon dont les vues intégrées contenues dans notre SunStarSys : :Afficher
Le paquet Perl est destiné à fonctionner. Le walk_content_tree
, archivé
, et seed_file_deps
fonctions utilitaires importables depuis SunStarSys : :Util
sont des aides utiles à la construction de %path : :dépendances
Voici cette partie de notre vie 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>};
};
S’il vous plaît faire ce code pour des idées sur la façon dont vous voulez *votre site web * pour fonctionner. Oui, il y a une certaine complexité raisonnable (impliquant à la fois les expressions régulières de Perl et la coque UNIX C de Perl) globulaire
d’une manière très précise) autour de la %path : :dépendances
Où les entrées dans %path : :dépendances
D’origine ? S’ils ne sont pas nés d’une invocation de walk_content_tree { seed_file_deps ... }
, (qui plonge essentiellement dans les en-têtes et le contenu de vos fichiers source de démarque), puis ils sont simplement codés en dur dans lib/path.pm
Les graphiques de dépendance cyclique sont la norme
Notre site est actuellement composé de 240 fichiers source
dans contenu/
. Voici un 85 sommets x 465 arêtes
, représentation graphique dirigée bidimensionnelle et défilable d’un instantané récent des dépendances de page en langue anglaise sur notre site (utilisation de GraphViz point
.
.
Assez complexe, même pour un petit site comme celui-ci ! Nombreux croisements d’arêtes lors de la prise (évitable dans la dimension
). Notons en particulier l’ensemble de base des dépendances cycliques denses dans les fichiers non archivés de notre site.
/essais/
répertoire, vers le bas-centre-droite du graphique, qui est ce à quoi devrait ressembler un bon site de blogging graphique de dépendance. Ces dépendances sont tracées dans courbes rouges
Notons également l’interconnexion interne essentiellement isolée des éléments dans /catégories/*/*
et /archives/2022/11/*
. Les seules dépendances externes impliquent un contenu non archivé dans /essais/*
. C’est par conception — les essais archivés ne devraient changer que adiabatiquement, peut-être uniquement pour des ajustements à leur Catégorie
en-têtes. Aucune de ces modifications n’affecte matériellement le contenu préexistant, nous ne le suivons donc pas. %path : :dépendances
Bien sûr, notre Wiki d’Orion.
Ne s’agit-il pas uniquement de liens hypertexte ?
Non ! En fait, la topologie de lien de votre site Web est une question entièrement distincte du graphique de dépendance de l’arborescence source. Un moteur de recherche sortira naturellement de la topologie link, mais n’aura aucun aperçu du graphique de dépendance.
Voici un Plus de 240 sommets x 3859 arêtes
, graphique actuel des yeux d’oiseaux du graphique anglais link topology pour notre site (utilisation de GraphViz twopi
.
.
Pouvez-vous repérer le bords rouges
Comment la technologie SSI peut vous aider
Traditional Inclut côté serveur.
- excellent pour réduire la taille du graphique de dépendance de votre site Web à une taille gérable sans sacrifier la latence de livraison des pages
- excellent pour réduire l’attrition standard dans les messages de validation volumineux afin d’améliorer la révision par les pairs et la surveillance de vos ensembles de modifications créés
API de modèles
balise ssi
Syntaxe :
{% ssi
`/content_rooted/path/to/source_file` %}
- chemins enracinés à
contenu
répertoire source - ignore la partie d’en-tête du fichier source à être
ssi
inclus
filtre ssi
Syntaxe :
{{ contenu|ssi }}
- Evaluations récursives
ssi
balises dans la valeur à filtrer - utile pour éviter d’utiliser une grande valeur (3+) de
quick_deps
dans un@path : :modèles
Pourquoi pas SymLinks ?
- abstraction du système de fichiers barebones difficile à prendre en charge en toute sécurité dans un
<virtualhost>
contexte - mêmes inconvénients avec le traditionnel
ssi
sur les pages web complètes - notre Wiki d’Orion.
Outils de paramétrage pour les liens permanents
Curation de document
Le système de construction d’Orion a intégré la prise en charge de ce que nous appelons la “curation des documents”, qui est le processus de recontextualisation et de réorganisation de votre contenu en fonction de la façon dont vous définissez le Catégories
et Archiver
en-têtes dans vos fichiers source Markdown. Ces fonctionnalités sont désactivées par défaut, mais peuvent être activées en définissant une category_root
(pour le support de catégorie) ou un archive_root
(pour la prise en charge de l’archivage) dans l’argument hashref associé au @path : :modèles
Catégories
- le nouveau contenu est construit à l’aide du modèle
ssi
balises pointant vers l’emplacement du permalien, lors de la suppression duArchiver
en-tête de la page source construite - les catégories sont strictement additives (c’est-à-dire que la suppression d’une catégorie des en-têtes d’une page source ne la supprimera pas de cette catégorie sur le site en direct),
- généré à la demande
pages archivées
Sur notre site, nous archivons agressivement des essais obsolètes pour maintenir les temps de construction des nouveaux essais à un niveau bas, tout en ne détruisant pas les permaliens vers les documents archivés. Graphique de dépendance par rapport à /archives/
- contenu construit à l’aide du modèle
ssi
balises pointant vers l’emplacement du permalien, lors de la suppression duCatégories
etArchiver
en-têtes de la page source construite - contenu dans
/(essais|clients)/
sont toujours permaliens, même après l’archivage
Lede
Commentaires HTML incorporés dans les limites de forme de prose Markdown du contenu de la lede. Nous utilisons **{N° de lie}
Le traitement des ledes se fait avec le lede
Filtre de modèle. Il est utile de combiner cela avec le ssi
Nb de conclusions
Il existe des structures et des relations de données intéressantes à découvrir lorsque vous traitez le graphique de dépendance d’un site Web du point de vue des performances de construction, ce qui est un domaine d’intérêt beaucoup plus récent que la documentation de recherche explorant les structures de données et les problèmes associés entourant la topologie de lien1,2.
Les builds incrémentiels classiques pour les projets de développement de logiciels purs restent un sujet brûlant. Les recherches abordées dans 3,4 ont été publiées en octobre 2022, environ un mois avant la fin de cet essai. Le système de build pluto5 possède des fonctionnalités assez similaires aux nôtres (le build lui-même peut régénérer et reconstruire dynamiquement les dépendances).
La bonne nouvelle, c’est que nous vous avons couvert en tant que client. Nous vous tiendrons au courant des meilleures pratiques et de l’état de l’art dans ce domaine, de sorte que vous profiterez de nos leçons apprises au cours de la dernière décennie et dans demain.
Notes de bas de page
Identification des clusters dans le graphique Web en fonction de la topologie des liens.
Inférer des communautés Web à partir de la topologie de lien Compte rendu de la neuvième conférence de l’ACM sur l’hypertexte et l’hypermédia : liens, objets, temps et espace — structure dans les systèmes hypermédias : liens, objets, temps et espace —
Vers la création incrémentielle de configurations logicielles.
Un système de construction incrémentielle sain et optimal avec des dépendances dynamiques.