Was versteht man unter Smart Content Dependency ManagementTM?

[VERIFIZIERT] Zuletzt aktualisiert von Joe Schaefer auf Di., 13 Mai 2025    Quelle
 

Abstrakt

Smart Content Dependency Management™ Es geht um den Kreis von Ideen, die mit der Unterstützung und Erleichterung von inkrementellen Builds verbunden sind, während sie dem Inhaltsnormalisierungsprinzip treu bleiben — das Permalinks sollte die Single Source of Truth sein, unabhängig davon, wie ihr Inhalt im gesamten Quellbaum und den daraus resultierenden Build-Artefakten kuratiert wird.

Dieser Artikel präsentiert die https://sunstarsys.com/-Website als Fallstudie, um Best Practices zu demonstrieren und die zugehörigen Diagrammtopologien zu analysieren.

Vorbehalte

Dies ist nur wichtig, wenn Sie die Kosten für die Durchführung vollständiger Website-Builds jedes Mal abwägen müssen, wenn Sie die Inhalte auf einer Webseite optimieren müssen. Wenn Ihre Website weniger als 1K-Quelldateien enthält, entspannen, und lesen Sie Folgendes mit Blick auf Ihre zukünftigen Anforderungen. Sie haben sich für die Nutzung unserer Plattform entschieden, die so konzipiert ist, dass sie mit Ihnen skaliert werden kann, nicht gegen Sie. Bei den meisten Seiten handelt es sich im folgenden Material um Diagramme mit dünner Inhaltsabhängigkeit für Websites mit mehr als 1K Seiten.

Beispielsweise konnte die Apache https://www.OpenOffice.Org-Website ihre 40K+-Dateien mit der ursprünglichen Apache-Version dieses Build-Systems erstellen, mit vollständig integrierter Unterstützung für inkrementelle Builds. — ohne konfigurierte Abhängigkeiten — durch die intelligente Nutzung der traditionellen SSI-Technologie allein.

Standardmäßig erstellt unser Build-System nur die Dateien, die Sie geändert haben, ohne die Intra-File-Abhängigkeiten zu berücksichtigen (es sei denn, Sie geben sie in %path::Abhängigkeiten — mehr dazu unten). Wenn die geänderte Datei in Vorlagen/ oder lib/ Stattdessen wird ein vollständiger Site-Build ausgelöst.

Das Abhängigkeitsdiagramm Ihrer Website zusammen weben

Mathematik, eine Topologie τ\tau ist eine vollständige Spezifikation der open Teilmengen eines Raumes XX, deren Zweck darin besteht, die Näherungsbeziehungen zwischen Punkten anzugeben xx des Raumes XX. Wann XX ist ein Graph, eine Topologie τ\tau für XX entspricht der Angabe der Kanten, die Scheitelpunkte des Diagramms miteinander verbinden (hier werden Scheitelpunkte als Punkte von XX, und die Verbindungskanten bestimmen die Nachbarschaft dieser Punkte als basis offene Sätze für die Topologie). Eine gerichtete Diagrammtopologie ist im Wesentlichen dasselbe, enthält aber einen Verweis auf eine topologische Einbettung von (X,τ)(X,\tau) in einen größeren topologischen Raum (Y,σ)(Y,\sigma) , wobei die Kantenverbindungen der Einbettung durch gerichtete, nicht schneidende (Jordanische) Kurven dargestellt werden.

Das letztere Konzept wird verwendet, wenn wir die Topologie des Abhängigkeitsdiagramms diskutieren τ\tau mit dem Bereich verknüpft XX der Quelldateien unter Ihrer Site Inhalt/ Unterverzeichnis (hier) (Y,σ)(Y,\sigma) ist Rn\mathbb{R}^n mit seiner Metriktopologie für n{2,3}n \in \{2,3\}und die Kanten der XX sind nicht schneidende, gerichtete Jordan-Kurven, die eine Datei verbinden xXx \in X zu seinen Dateien, auf denen xx hängt von: {xXxx}\set{x^\prime \in X | x \rightarrow x^\prime}).

Haben Ein klares Verständnis der Abhängigkeitsgrafik Ihrer Website stellt sicher, dass Sie die Leistung unserer Build-Technologie im großen Maßstab maximieren können. Wir nehmen die von Ihnen angegebenen Informationen an %path::Abhängigkeiten während des Builds Ihrer Website lib/path.pm Datei erstellen, eine umgekehrte Zuordnung von abhängigen Dateien erstellen und diese umgekehrte Zuordnung verwenden, um den vollständigen Korpus von Dateien zu bestimmen, die für eine bestimmte Datei erstellt werden sollen svn Commit Sie machen zu unserem System.

Es ist wichtig zu beachten, dass die Abhängigkeitsbeziehungen zwischen Quelldateien vollständig von der %path::Abhängigkeiten Hash beim Hochfahren des Build-Systems von lib/path.pm aus Ihrem Quellbaum, so sind die in unserem SunStarSys::Anzeigen Perl-Paket soll funktionieren. Die walk_content_tree, archiviertund seed_file_deps Importierbare Utility-Funktionen aus SunStarSys::Bis sind nützliche Hilfsmittel beim Aufbau der %path::Abhängigkeiten Hash, mit integrierter Unterstützung für die Verwaltung eines Abhängigkeitscache, um inkrementelle Builds in großem Maßstab zu beschleunigen.

Hier ist der Teil unseres Lebens 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>};
  };

Bitte überarbeiten Sie diesen Code für Ideen, wie Sie Ihre Website funktionieren möchten. Ja, es gibt eine gewisse Komplexität (die sowohl die regulären Ausdrücke von Perl als auch die UNIX C-Shell von Perl umfasst) Globus auf eine sehr genaue Art und Weise) wie %path::Abhängigkeiten wird in dieser Datei erstellt, aber anstatt dies nur als Optimierungsarbeit zu betrachten, betrachten Sie es stattdessen als Bereitstellung der grundlegenden Zutaten, die für die automatisierte, dynamisch generierte Erstellung wichtiger Aspekte der Link-Topologie erforderlich sind.

Wo finden Einträge in %path::Abhängigkeiten Ursprung? Wenn sie nicht aus einem Aufruf von walk_content_tree { seed_file_deps ... }, (die im Grunde in die Header und den Inhalt Ihrer Markdown-Quelldateien eintaucht), dann sind sie nur hartcodiert in lib/path.pm zur Ladezeit.

Zyklische Abhängigkeitsdiagramme sind die Norm

Unsere Website besteht derzeit aus 240 Quelldateien in Inhalt/. Hier ist ein 85 Scheitelpunkte x 465 Kanten, scrollbare, zweidimensionale gerichtete Diagrammdarstellung eines aktuellen Snapshots der englischsprachigen Seitenabhängigkeiten auf unserer Site (Verwenden von GraphViz Punkt):

Englisch Sprachabhängigkeiten.

Ganz komplex, auch für eine kleine Website wie diese! Viele Kantenschnittstellen beim Nehmen n=2n=2 (vermeidbar in Dimension) n=3n=3). Besonders hervorzuheben ist der Kernsatz von dichten, zyklischen Abhängigkeiten in den nicht archivierten Dateien unserer Website. /Veranstaltungen/ Verzeichnis, in Richtung der unteren Mitte-rechts des Diagramms, was das Abhängigkeitsdiagramm einer guten Blogging-Site aussehen sollte. Diese Abhängigkeiten werden in rote Kurven im Bild.

Beachten Sie auch die innere, im Wesentlichen isolierte Verbindung der Elemente in /Kategorien/*/* und /archives/2022/11/*. Die einzigen externen Abhängigkeiten beinhalten nicht archivierte Inhalte in /Veranstaltungen/*. Dies ist durch Design — die archivierten Essays sollten sich nur adiabatisch ändern, vielleicht nur für Anpassungen ihrer Kategorie Kopfzeilen. Keine dieser Änderungen wirkt sich wesentlich auf die bereits vorhandenen Inhalte aus, daher verfolgen wir sie nicht in %path::Abhängigkeiten.

Natürlich unsere Orion Enterprise Wiki Es gab nie Probleme mit zyklischen Abhängigkeiten.

Nein! In der Tat ist die Link-Topologie Ihrer Website eine völlig separate Angelegenheit vom Abhängigkeitsdiagramm des Quellbaums. Eine Suchmaschine wird natürlich die Link-Topologie austauschen, hat aber keinen Einblick in das Abhängigkeitsdiagramm.

Hier ist ein 240+ Scheitelpunkte x 3859 Kanten, aktuelle Vogelperspektive-Grafik der englischen Link-Topologie-Grafik für unser Standort (Verwenden von GraphViz Twopi):

Können Sie die rote Kanten wie im Abhängigkeitsdiagramm angegeben? Das Link-Topologie-Diagramm ist qualitativ und quantitativ sehr unterschiedlich von dem oben abgebildeten (dramatisch kleineren und weniger miteinander verbundenen) Abhängigkeitsdiagramm.

Wie SSI-Technologie helfen kann

Traditionell Serverseitige Inklusive (SSI).

  • Toll, um das Abhängigkeitsdiagramm Ihrer Website auf eine überschaubare Größe zu reduzieren, ohne die Latenz der Seitenzustellung zu beeinträchtigen
  • ** großartig** zur Verringerung der Abwanderung von Boilerplate in großen Commit-Nachrichten für eine bessere Peer-Überprüfung und Überwachung Ihrer erstellten Änderungssets
  • lousy zur Retexualisierung ganzer Webseiten an einen anderen Ort in der Hierarchie Ihres Dokumentstamms

Vorlagen-APIs

ssi-Tag

Syntax:

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

  • Wege verwurzelt in Inhalt Quellverzeichnis
  • Überspringt den Headerteil der Quelldatei ssi inklusive
  • schreibt relative URLs in absolute URLs im enthaltenen Inhalt des Zielpfads um
ssi-Filter

Syntax:

{{ Inhalt|ssi }}

  • rekursiv bewertet ssi Tags im zu filternden Wert
  • nützlich, um die Verwendung eines großen Wertes (3+) von quick_deps in a @path::Muster Eintragsargument hashref, das sich auf die Leistung auswirken kann
  • Barebones-Dateisystemabstraktion, die in einer <virtualhost> Kontext
  • gleiche Nachteile mit traditionellen ssi auf vollständigen Webseiten
  • unsere Orion Enterprise Wiki System unterstützt sie nicht
Dokumentkuratierung

Das Build-System von Orion hat eine integrierte Unterstützung für das, was wir Document Curation nennen, was der Prozess der Neustrukturierung und Reorganisation Ihrer Inhalte ist, basierend auf der Art und Weise, wie Sie die Kategorien und Archiv Header in Ihren Markdown-Quelldateien. Diese Features sind standardmäßig deaktiviert, können jedoch durch Festlegen eines category_root (für Kategorieunterstützung) oder archive_root (zur Archivierung) im zugehörigen Hash-Argument zum gewünschten @path::Muster Eintrag.

Kategorien
  • Neuer Inhalt wird mit Vorlage erstellt ssi Tags, die auf den Permalink-Speicherort verweisen, während die Archiv Header von der Seite mit der erstellten Quelle
  • Kategorien sind rein additiv (d. h. das Entfernen einer Kategorie aus den Kopfzeilen einer Quellseite entfernt sie nicht aus dieser Kategorie auf der Live-Website),
  • bei Bedarf generiert
  • Löschen aller Kategorien in einem einzigen Commit ist eine großartige Möglichkeit, sie mit den genauen Spezifikationen in den Kopfzeilen aller Quellseiten zu synchronisieren, ohne den beibehaltenen Kategorieinhalt auf der Live-Site zu zerstören
Archivierte Seiten

Auf unserer Website archivieren wir aggressiv veraltete Aufsätze, um die Erstellungszeiten für neue Aufsätze niedrig zu halten, ohne Permalinks zu archivierten Dokumenten zu zerstören. Das Abhängigkeitsdiagramm relativ zum /Archive/ Das Verzeichnis (für unsere Website) ist gemäß den folgenden Regeln einigermaßen eigenständig:

  • Inhalt erstellt mit Vorlage ssi Tags, die auf den Permalink-Speicherort verweisen, während die Kategorien und Archiv Header von der Seite mit der erstellten Quelle
  • Inhalt in /(Leistungen|Kunden)/ sind immer Permalinks, auch nach der Archivierung
  • Archivierung entfernt effektiv den Permalink-Standort aus dem Abhängigkeitsdiagramm, ohne den Permalink selbst von der Website zu entfernen
Lede

HTML-Kommentare, die in die Markdown-Prosa-Formgrenzen des Lede-Inhalts eingebettet sind. Wir verwenden {Anz. Ausschreibungen} zu diesem Zweck.

Die Verarbeitung erfolgt mit dem Lede Vorlagenfilter. Es ist nützlich, dies mit dem ssi Filter für die Indexierung einer Kategoriedatei mit mehr als einer Kategorieseite darin.

Schlussfolgerungen

Es gibt interessante Datenstrukturen und -beziehungen, die noch aufgedeckt werden müssen, wenn es um den Abhängigkeitsdiagramm einer Website aus einer Build-Performance-Perspektive geht, was ein viel neuerer Bereich von Interesse ist als die Forschungsliteratur, die sich mit den Datenstrukturen und zugehörigen Problemen rund um die Link-Topologie1,2 befasst.

Herkömmliche inkrementelle Builds für reine Softwareentwicklungsprojekte sind nach wie vor ein heißes Thema. Die in 3,4 behandelte Studie wurde im Oktober 2022 veröffentlicht, etwa einen Monat, bevor dieser Aufsatz voraussichtlich abgeschlossen sein wird. Das pluto5-Build-System verfügt über Funktionen, die unseren sehr ähnlich sind (der Build selbst kann Abhängigkeiten dynamisch neu generieren und neu erstellen).

Die gute Nachricht ist, dass wir Sie als unseren Kunden abgedeckt haben. Wir halten Sie über die Best Practices und den Stand der Technik in diesem Bereich auf dem Laufenden, so dass Sie von unseren Erfahrungen in den letzten zehn Jahren und bis in die Zukunft profitieren.

Fußnoten

  1. Identifizierung von Clustern im Webdiagramm auf Basis der Linktopologie Seventh International Database Engineering and Applications Symposium, 2003. Verfahren

  2. Webcommunitys aus Linktopologie inferenzieren Proceedings der neunten ACM-Konferenz zu Hypertext und Hypermedia: Links, Objekte, Zeit und Raum — Struktur in Hypermediasystemen: Links, Objekte, Zeit und Raum — Struktur in Hypermediasystemen. 1998.

  3. Zu den Vorteilen und Grenzen inkrementeller Build-Softwarekonfigurationen: eine explorative Studie ICSE ‘22: Proceedings of the 44th International Conference on Software Engineering, Mai 2022

  4. Zur inkrementellen Erstellung von Softwarekonfigurationen ICSE-NIER ‘22: Proceedings of the ACM/IEEE 44th International Conference on Software Engineering: Neue Ideen und neue Ergebnisse, Mai 2022

  5. Ein solides und optimales inkrementelles Build-System mit dynamischen Abhängigkeiten OOPSLA 2015: Proceedings der ACM SIGPLAN International Conference 2015 über objektorientierte Programmierung, Systeme, Sprachen und Anwendungen Oktober 2015

Permalink  #Abhängigkeiten   #Architektur   #Builds   #Generation   #Grafik   #inkrementell   #Smart   #Topologie   #Website   #Wiki  

 

   

Kommentare  


Anhänge  

Links  


Index

Sonnenstaronly


COVID-19 März 2020

  • Exponentielles Wachstum und COVID-19 — Nehmen Sie sich Zeit für den Abschnitt The Mathe — Es ist wichtig, ein gebildeter Verbraucher von Statistiken zu sein, die für die aktuelle Pandemie relevant sind … Do., 06 März 2025

 


Heyoka



NonFunctional Tests


 

  • Verteilerlisten — Diese temporären Adressen sind ein Anathema für ezmlm-idx‘s Abo- und Moderationssysteme … Sa., 27 Apr. 2024

 

  • Informationssicherheits-Primer — Alle Daten, die aus einem UNIX Systemaufruf zur Laufzeit stammen, müssen als erhalten behandelt werden … Sa., 27 Apr. 2024

 

  • Die Freude der DTrace — Messen Sie zweimal, schneiden Sie einmal, bevor Sie mit einer Codeoptimierung beginnen … Mi., 17 Apr. 2024

 


 

  • Über das Spam-Problem… — Das beste Plugin für qpsmtpdObwohl es schwierig ist zu verstehen, warum … So., 29 Jan. 2023

Hyperbolische Wabe


 

  • Spaß mit htop — Erweiterte htop-Funktionen auf beliebten Unix-Plattformen … Do., 19 Jan. 2023

Informationsarchitektur

  • Informationsarchitektur — Die gesamte Bandbreite an Technologien, die für das Design, die Präsentation, die Beziehungen und die architektonischen Einschränkungen relevant sind, die jede von Ihnen bereitgestellte URL abdecken … Mo., 11 März 2024

geteert und gefiedert


 

  • Die Bewegung DevOps — Die große Idee hinter der “Bewegung” ist nicht nur, den Entwicklern mehr Seil zu geben … Fr., 26 Apr. 2024

 

  • Anwendungsperformance — Viele Entwickler fallen in die Falle des Denkens, dass es bei der Leistungsoptimierung darum geht, jede Codezeile so effizient wie möglich zu machen. … Fr., 26 Apr. 2024