A quoi sert Smart Content Dependency ManagementTM ?

[VÉRIFIÉ] Dernière mise à jour par Joe Schaefer sur mar., 13 mai 2025    source
 

Résumé

Gestion intelligente des dépendances de contenu™ concerne le cercle des idées liées à la fourniture de soutien et de facilitation pour les constructions incrémentielles*, tout en restant fidèle au principe de normalisation du contenu — que permaliens doit être la source unique de vérité, quelle que soit la façon dont leur contenu est organisé dans l’arborescence source et les artefacts de construction résultants.

Cet article présente le site Web https://sunstarsys.com/ sous la forme d’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 avez besoin de peser les dépenses liées à la réalisation de sites 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, relaxez et lisez ce qui suit en gardant à l’esprit 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 document ci-dessous concerne les graphiques de dépendance de contenu dispersés pour les sites comportant plus de pages 1K.

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 — en utilisant intelligemment la technologie traditionnelle SSI seule.

Par défaut, notre système de construction construira uniquement les fichiers que vous avez modifiés, sans se préoccuper 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é est dans la modèles/ ou lib/ répertoire, un build de site complet déclenchera à la place.

Tissage du Graphique de dépendance de votre site Web

Mathématiquement, une Topologie τ\tau est une spécification complète des sous-ensembles ouverts d’un espace XX, dont le but est d’indiquer les relations de proximité entre points xx de l’espace XX. Quand XX est un graphe, une topologie τ\tau pour XX indique les arêtes reliant les sommets du graphique (ici, les sommets sont considérés comme les points de XX, et les bords de connexion déterminent les quartiers de ces points en tant que ensembles ouverts de base pour la topologie). Une topologie de graphe dirigée est essentiellement la même chose, mais intègre une référence à une intégration topologique de (X,τ)(X,\tau) dans un plus grand espace topologique (Y,σ)(Y,\sigma) , où les connexions de bord de l’intégration sont représentées par des courbes directionnelles (Jordanie).

Ce dernier concept est ce que nous allons utiliser lors de la discussion de la topologie du graphe de dépendance. τ\tau associés à l’espace XX des fichiers source sous votre site contenu/ sous-répertoire (ici (Y,σ)(Y,\sigma) est Rn\mathbb{R}^n avec sa topologie métrique pour n{2,3}n \in \{2,3\}et les bords de XX sont des courbes Jordan dirigées sans intersection reliant un fichier xXx \in X à son ensemble de fichiers sur lesquels xx dépend : {xXxx}\set{x^\prime \in X | x \rightarrow x^\prime}).

Avoir une compréhension claire du graphique de dépendance de votre site Web vous permettra d’optimiser les performances de notre technologie de construction à grande échelle. Nous prenons les informations que vous nous fournissez %path : :dépendances pendant le chargement de votre site Web lib/path.pm fichier, construire une mappe inverse des fichiers dépendants, et utiliser cette mappe inverse pour déterminer le corpus complet de fichiers à construire pour un validation svn Vous faites à notre système.

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 lors du chargement de démarrage du système de build lib/path.pm à partir de votre arbre source, qui est la façon dont les vues intégrées contenues dans notre SunStarSys : :Affichage Le paquet Perl est destiné à fonctionner. Le walk_content_tree, archivéet seed_file_deps fonctions utilitaires importables à partir de SunStarSys : :Utilisation sont des aides utiles à la construction de %path : :dépendances hash, avec prise en charge intégrée de la gestion d’un cache de dépendances pour accélérer les builds incrémentiels à grande échelle.

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 mull ce code pour des idées sur la façon dont vous voulez que *votre site Web * fonctionne. Oui, il y a une certaine complexité raisonnable (impliquant à la fois les expressions régulières de Perl et le shell UNIX C de Perl) glob interfaces, de manière très précise) autour de la façon dont %path : :dépendances est construit dans ce fichier, mais au lieu de simplement le voir comme un travail d’optimisation, regardez-le plutôt comme fournissant les ingrédients de base nécessaires pour interpréter les principaux aspects de la topologie link de manière automatisée et dynamique.

Emplacement des entrées %path : :dépendances 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 Markdown), puis ils sont simplement codés en dur dans lib/path.pm lors du chargement.

Les graphiques de dépendance cyclique sont la norme

Notre site se compose actuellement de 240 fichiers source dans contenu/. Voici un 85 sommets x 465 arêtes, représentation graphique dirigée bidimensionnelle défilable d’un instantané récent des dépendances de page en anglais sur notre site (utilisation de GraphViz point):

Dépendances de la langue anglaise.

Assez complexe, même pour un petit site comme celui-ci ! Beaucoup d’intersections de bord lors de la prise n=2n=2 (évitable dans la dimension n=3n=3). Notons en particulier l’ensemble central des dépendances cycliques denses dans les fichiers non archivés de notre site. /résultats/ répertoire, vers le centre inférieur droit du graphique, à quoi devrait ressembler le graphique de dépendance d’un bon site de blogs. Ces dépendances sont définies dans courbes rouges dans l’image.

Notez également l’interconnexion interne, essentiellement isolée, des éléments dans /catégories/*/* et /archives/2022/11/*. Les seules dépendances externes impliquent du contenu non archivé dans /résultats/*. C’est par conception — les essais archivés ne devraient changer que adiabatiquement, peut-être uniquement pour des ajustements à leurs Catégorie en-têtes. Aucune de ces modifications n’affecte matériellement le contenu préexistant, nous ne le suivons donc pas dans %path : :dépendances.

Bien sûr, notre Wiki d’Orion Enterprise n’a jamais eu de problèmes avec les dépendances cycliques.

N’est-ce pas seulement des hyperliens ?

Non ! En fait, la topologie de lien de votre site Web est une matière entièrement distincte du graphique de dépendance de l’arborescence source*. Un moteur de recherche va naturellement extraire la topologie du lien, mais n’a aucun aperçu du graphique de dépendance.

Voici une Plus de 240 sommets x 3859 arêtes, graphique des yeux des oiseaux en cours du graphique anglais link topology pour notre site (utilisation de GraphViz twopi):

Pouvez-vous repérer bords rouges comme indiqué dans le graphique de dépendance ? Le graphique topologie de lien est qualitativement et quantitativement très différent du graphique dépendance (dramatiquement plus petit et moins interconnecté) représenté ci-dessus.

Comment la technologie SSI peut aider

Traditionnel Inclus côté serveur (SSI).

  • excellent pour élaguer le graphique de dépendance de votre site Web vers une taille gérable sans sacrifier la latence de livraison des pages
  • excellent pour réduire l’attrition boilerplate 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
  • mauvaise pour la recontextualisation de pages Web entières dans un emplacement différent dans la hiérarchie de la racine de document

API de modèle

balise ssi

Syntaxe :

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

  • chemins enracinés à contenu répertoire source
  • ignore la partie en-tête du fichier source à Ssi inclus
  • réécrit les URL relatives en URL absolues dans le contenu inclus du chemin cible
filtre ssi

Syntaxe :

{{ contenu|ssi }}

  • Évaluations 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 hashref d’argument d’entrée, qui peut avoir un impact sur les performances
  • abstraction de système de fichiers barebones qui est difficile à prendre en charge en toute sécurité dans un <virtualhost> contexte
  • les mêmes inconvénients que les traditionnels Ssi sur des pages web complètes
  • notre Wiki d’Orion Enterprise Le système ne les prend pas en charge

Outils de paramétrage pour les permaliens

Durée du document

Le système de construction d’Orion a intégré la prise en charge de ce que nous appelons Curation de 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 un 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 saisie.

Catégories
  • le nouveau contenu est construit à l’aide du modèle Ssi balises pointant vers l’emplacement du permalien, lors de la suppression de Archiver 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
  • supprimer toutes les catégories en une seule validation est un excellent moyen de les synchroniser avec les spécifications exactes dans les en-têtes de toutes les pages source, sans détruire le contenu de la catégorie préservée sur le site en direct
pages archivées

Sur notre site, nous archivons agressivement les essais obsolètes pour maintenir les temps de construction des nouveaux essais bas, tout en ne détruisant pas les permaliens vers les documents archivés. Le graphe dependency relatif à /archives/ répertoire (pour notre site) est raisonnablement autonome selon les règles suivantes :

  • contenu construit à l’aide du modèle Ssi balises pointant vers l’emplacement du permalien, lors de la suppression de Catégories et Archiver en-têtes de la page source construite
  • contenu dans /(essays|clients)/ sont toujours des permaliens, même après l’archivage
  • l’archivage supprime efficacement l’emplacement du permalien du graphique de dépendance, sans supprimer le permalien lui-même du site Web
Lede

Les commentaires HTML incorporés dans les limites de formulaire de prose Markdown du contenu lede. Nous utilisons {Nb de leads} à cette fin.

Le traitement des leds est effectué avec le conduit Filtre de modèle. Il est utile de combiner cela avec le Ssi filtre permettant d’indexer un fichier de catégorie contenant plusieurs pages de catégorie.

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 qui explore les structures de données et les problèmes associés entourant la topologie des liens1,2.

Les builds incrémentiels classiques pour les projets de développement de logiciels purs restent un sujet brûlant. La recherche abordée dans le document 3,4 a été publiée en octobre 2022, environ un mois avant que cet essai ne soit terminé. Le système de construction pluto5 a des fonctionnalités assez similaires aux nôtres (la construction elle-même peut régénérer et reconstruire dynamiquement les dépendances).

La bonne nouvelle est que nous vous avons couvert en tant que notre client. Nous vous tiendrons au courant des meilleures pratiques et de l’état de l’art dans cet espace, de sorte que vous bénéficierez de nos leçons apprises au cours de la dernière décennie et dans demain.

Nb de pieds de page

  1. Identification des clusters dans le graphique Web en fonction de la topologie des liens Septième Symposium international sur l’ingénierie et les applications des bases de données, 2003. Actes.

  2. 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 — structure dans les systèmes hypermédias. 1998.

  3. Sur les avantages et les limites des configurations logicielles de construction incrémentielles : une étude exploratoire ICSE ‘22 : Actes de la 44e Conférence internationale sur le génie logiciel, mai 2022

  4. Vers la création incrémentielle de configurations logicielles ICSE-NIER ‘22 : Actes de la 44e Conférence internationale de l’ACM/IEEE sur le génie logiciel : nouvelles idées et résultats émergents, mai 2022

  5. Un système de création incrémentielle sain et optimal avec des dépendances dynamiques OOPSLA 2015 : Actes de la Conférence internationale ACM SIGPLAN 2015 sur la programmation orientée objet, les systèmes, les langues et les applications Octobre 2015

Lien permanent  #architecture   #constructions   #dépendances   #génération   #graphique   #incrémentiel   #site Web   #smart   #topologie   #wiki  

 

   

Commentaires  


Pièces jointes  

Liens  


Index

étoile du soleil seulement


COVID-19 de mars 2020

  • Croissance exponentielle et COVID-19 — Prenez votre temps avec la section math — il est important d’être un consommateur éduqué de statistiques pertinentes pour la pandémie actuelle … jeu., 06 mars 2025

 


Heyoka



NonFunctional Tests


 

  • Listes de diffusion — Ces adresses temporaires sont anathèmes à ezmlm-idxles systèmes d’abonnement et de modération … ven., 03 mai 2024

 


 

  • La joie de DTrace — Mesurez deux fois, coupez une fois, avant de vous lancer dans un effort d’optimisation de code … mer., 17 avr. 2024

 


 

  • Sur le problème du spam… — Le meilleur plugin pour qpsmtpd, bien qu’il soit difficile de comprendre pourquoi … dim., 29 janv. 2023

Nid d'abeille hyperbolique


 

  • Fun avec htop — Fonctionnalités htop avancées sur les plates-formes Unix populaires … jeu., 19 janv. 2023

Architecture des informations

  • Architecture des informations — Toute la gamme de technologies pertinentes pour la conception, la présentation, les relations et les contraintes architecturales qui couvrent chaque URL que vous servez … lun., 11 mars 2024

goudronné et plumé


 

  • Le mouvement DevOps — La grande idée derrière le “mouvement” n’est pas simplement de donner aux développeurs plus de corde … ven., 26 avr. 2024

 

  • Performances des applications — De nombreux développeurs tombent dans le piège de penser que l’optimisation des performances consiste à rendre chaque ligne de code aussi efficace que possible. … ven., 26 avr. 2024