Worum geht es in Smart Content Dependency ManagementTM?
Auszug
Smart Content Dependency Management™ geht es um den Kreis von Ideen, die sich auf die Unterstützung und Erleichterung von inkrementellen Builds beziehen, während sie dem Inhaltsnormalisierungsprinzip folgen. — diese Permalinks.
In diesem Artikel wird die Website https://sunstarsys.com/ als Fallstudie für eine Demonstration der Best Practices und die Analyse der zugehörigen Diagrammtopologien vorgestellt.
Höhlen
Dies ist nur wichtig, wenn Sie die Kosten für die Durchführung von vollständigen Website-Builds jedes Mal abwägen müssen, wenn Sie den Inhalt 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 unsere Plattform entschieden, die so konzipiert ist, dass sie mit Ihnen skaliert wird, nicht gegen Sie. Für die meisten Seiten handelt es sich bei diesem Material unten um dünne Abhängigkeitsdiagramme für Inhalte für Websites mit mehr als 1K-Seiten.
Beispiel: Die Apache https://www.OpenOffice.Org-Website konnte 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 —
Standardmäßig erstellt unser Build-System nur die Dateien, die Sie geändert haben, ohne Bedenken hinsichtlich der Abhängigkeiten zwischen Dateien (es sei denn, Sie geben sie in %path::Abhängigkeiten
— mehr dazu unten). Wenn sich die geänderte Datei in der Vorlagen/
oder Bibliothek/
Weben der Abhängigkeitsgrafik Ihrer Website zusammen
Mathematisch eine Topologie ist eine vollständige Spezifikation der offen Teilmengen eines Raumes
, deren Zweck darin besteht, die Näherungsbeziehungen zwischen Punkten anzugeben
des Raumes
. Wann
ist ein Diagramm, eine Topologie
für
gibt die Kanten an, die Scheitelpunkte des Diagramms miteinander verbinden (hier werden Scheitelpunkte als Punkte von
, und die Verbindungsränder bestimmen die Nachbarschaft dieser Punkte als Basis offene Sätze für die Topologie). Eine gerichtete Diagrammtopologie ist im Wesentlichen dasselbe, enthält jedoch einen Hinweis auf eine topologische Einbettung von
in einen größeren topologischen Raum
Letzteres Konzept wird verwendet, wenn wir die Abhängigkeitsgrafik-Topologie diskutieren. mit dem Arbeitsplatz verknüpft
der Quelldateien unter der Website
Inhalt/
Unterverzeichnis (hier) ist
mit seiner metrischen Topologie für
und die Kanten der
sind nicht schneidende, gerichtete Jordan-Kurven, die eine Datei verbinden
zu den Dateien, auf denen
abhängig:
Haben Ein klares Verständnis des Abhängigkeitsdiagramms Ihrer Website wird sicherstellen, dass Sie die Leistung unserer Build-Technologie in großem Maßstab maximieren können. Wir nehmen die von Ihnen bereitgestellten Informationen %path::Abhängigkeiten
während des Builds der Website Bibliothek/path.pm
Datei erstellen, eine umgekehrte Zuordnung abhängiger Dateien erstellen und diese umgekehrte Zuordnung verwenden, um den vollständigen Korpus der zu erstellenden Dateien für eine bestimmte Datei zu bestimmen svn Commit
Es ist wichtig zu beachten, dass die Abhängigkeitsbeziehungen zwischen Quelldateien vollständig von der %path::Abhängigkeiten
Hash während der Startlast des Build-Systems Bibliothek/path.pm
von Ihrem Quellbaum, wie die integrierten Ansichten in unserem SunStarSys::Ansicht
Perl-Paket soll funktionieren. Die walk_content_tree
, archiviert
und seed_file_deps
Utilityfunktionen, aus denen importiert werden kann SunStarSys::Util
sind nützliche Hilfsmittel beim Aufbau der %path::Abhängigkeiten
Hier ist dieser Teil unseres Lebens Bibliothek/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 mullen Sie diesen Code für Ideen, wie Sie *Ihre Website * arbeiten möchten. Ja, es gibt eine gewisse Komplexität (die sowohl Perls reguläre Ausdrücke als auch Perls UNIX C-Shell umfasst) Globus
Schnittstellen auf sehr präzise Weise) um wie %path::Abhängigkeiten
Wo sind Einträge in %path::Abhängigkeiten
Herkunft? Wenn sie nicht aus einem Aufruf von walk_content_tree { seed_file_deps ... }
, (die im Wesentlichen in die Header und den Inhalt Ihrer Markdown-Quelldateien eintaucht), dann sind sie nur hartcodiert in Bibliothek/path.pm
Zyklische Abhängigkeitsdiagramme sind die Norm
Unsere Website besteht derzeit aus 240 Quelldateien
in Inhalt/
. Hier ist ein 85 Scheitel x 465 Kanten
, scrollbare, zweidimensionale gerichtete Diagrammdarstellung eines aktuellen Snapshots der Seitenabhängigkeiten in englischer Sprache auf unserer Website (mit GraphViz’s Punkt
.
.
Ganz komplex, auch für eine kleine Website wie diese! Viele Kantenschnittstellen bei der Einnahme (in der Dimension vermeidbar)
). Besonders hervorzuheben ist die Kernmenge der dichten, zyklischen Abhängigkeiten in den nicht archivierten Dateien in den
/Veranstaltungen/
Verzeichnis, in Richtung der unteren Mitte-rechts des Diagramms, wie das Abhängigkeitsdiagramm einer guten Blogging-Site aussehen sollte. Diese Abhängigkeiten werden in Rote Kurven
Beachten Sie auch die interne, im Wesentlichen isolierte Vernetzung der Elemente in /Kategorien/*/*
und /archives/2022/11/*
. Die einzigen externen Abhängigkeiten umfassen nicht archivierten Inhalt in /Essays/*
. Dies ist von Design — Die archivierten Essays sollten sich nur adiabatisch ändern, vielleicht nur für Anpassungen ihrer Kategorie
Kopfzeilen. Keine dieser Änderungen wirkt sich wesentlich auf den bereits vorhandenen Inhalt aus, daher verfolgen wir ihn nicht in %path::Abhängigkeiten
Natürlich, unsere Orion Enterprise Wiki.
Geht es nicht nur um Hyperlinks?
Nein! Tatsächlich ist die Link-Topologie Ihrer Website eine völlig andere Angelegenheit als das Abhängigkeitsdiagramm des Quellbaums. Eine Suchmaschine wird natürlich die Link-Topologie entfernen, hat aber keinen Einblick in das Abhängigkeitsdiagramm.
Hier ist ein Über 240 Scheitelpunkte x 3859 Kanten
, aktuelles Bird-Eye-Diagramm der englischen Link-Topologie für unsere Website (mit GraphViz’s Twopi
.
.
Können Sie die rote Kanten
Wie SSI-Technologie helfen kann
Traditional Serverseitig enthalten.
- großartig für das Beschneiden des Abhängigkeitsdiagramms Ihrer Website auf überschaubare Größe, ohne die Latenz der Seitenbereitstellung zu beeinträchtigen
- großartig zur Reduzierung der Abwanderung von Boilerplate in großen Commit-Nachrichten für eine bessere Peer Review und Überwachung Ihrer erstellten Änderungssets
Vorlagen-APIs
Ssi-Tag
Syntax:
{% ssi
`/content_rooted/path/to/source_file` %}
- Pfade, die auf
Inhalt
Quellverzeichnis - überspringt den Headerteil der Quelldatei, die
ssi
eingeschlossen
ssi-Filter
Syntax:
{{ Inhalt|ssi }}
- rekursiv bewertet
ssi
Tags im zu filternden Wert - nützlich, um zu vermeiden, dass ein großer Wert (3+)
quick_deps
in a@path::Muster
Warum nicht SymLinks?
- Barebones-Dateisystemabstraktion, die schwer sicher in einer
<virtualhost>
Kontext - die gleichen Nachteile wie traditionelle
ssi
auf vollständigen Webseiten - unsere Orion Enterprise Wiki.
Build-Tools für Permalinks
Dokumentpflege
Das Build-System von Orion bietet integrierte Unterstützung für das, was wir als Document Curation bezeichnen. Dabei handelt es sich um den Prozess der Retextualisierung und Neuorganisation Ihrer Inhalte, je nachdem, 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
(zur Kategorieunterstützung) oder archive_root
(für Archivierungsunterstützung) im zugehörigen Hashhref-Argument an die gewünschte @path::Muster
Kategorien
- Neuer Inhalt mit Vorlage erstellt
ssi
Tags, die auf den Permalink-Speicherort verweisen, beim Entfernen derArchiv
Header aus der Seite “Konstruierte Quelle” - Kategorien sind streng 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
Archivierte Seiten
Auf unserer Website archivieren wir aggressiv veraltete Essays, um die Erstellungszeiten für neue Essays niedrig zu halten, ohne Permalinks für archivierte Dokumente zu zerstören. Das Abhängigkeitsdiagramm relativ zum /Archive/
- Inhalt mit Vorlage erstellt
ssi
Tags, die auf den Permalink-Speicherort verweisen, beim Entfernen derKategorien
undArchiv
Header von der erstellten Quellseite - Inhalt in
/(essays|clients)/
sind immer Permalinks, auch nach der Archivierung
Lede
HTML-Kommentare, die in die Markdown-Prosa-Formulargrenzen des Lede-Inhalts eingebettet sind. Wir verwenden **{Anzahl}
Die Verarbeitung von Leder erfolgt mit dem Lede
Vorlagenfilter. Es ist sinnvoll, dies mit dem ssi
Schlussfolgerungen
Es gibt interessante Datenstrukturen und -beziehungen, die beim Umgang mit dem Abhängigkeitsdiagramm einer Website aus einer Build-Performance-Perspektive noch aufgedeckt werden müssen, was ein viel neueres Interessensgebiet ist als die Forschungsliteratur, die sich mit den Datenstrukturen und den zugehörigen Themen rund um die Link-Topologie1,2 beschäftigt.
Herkömmliche inkrementelle Builds für reine Softwareentwicklungsprojekte sind nach wie vor ein heißes Thema. Die Studie, die unter 3,4 behandelt wurde, wurde im Oktober 2022 veröffentlicht, etwa einen Monat, bevor dieser Aufsatz abgeschlossen sein wird. Das pluto5-Build-System verfügt über ähnliche Funktionen wie unsere (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 auf dem Laufenden über die Best Practices und den Stand der Technik in diesem Bereich, so dass Sie von unseren Erfahrungen in den letzten zehn Jahren und in die Zukunft profitieren werden.
Fußnoten
Identifizierung von Clustern im Webdiagramm auf Basis der Linktopologie.
Webcommunitys aus Linktopologie inferenzieren Verfahren der neunten ACM-Konferenz zu Hypertext und Hypermedia: Links, Objekte, Zeit und Raum — Struktur in Hypermediasystemen: Links, Objekte, Zeit und Raum —
Über die Vorteile und Grenzen inkrementeller Build-Softwarekonfigurationen: eine explorative Studie.
Auf dem Weg zur inkrementellen Erstellung von Softwarekonfigurationen.
Ein klares und optimales inkrementelles Build-System mit dynamischen Abhängigkeiten.