Vad handlar Smart Content Dependency ManagementTM om?
Sammandrag
- Hantering av beroenden för smart innehåll™* handlar om cirkeln av idéer relaterade till att ge stöd och underlättande för inkrementella byggen, samtidigt som man håller sig till Innehållsnormaliseringsprincipen — det där permalänkar.
I den här artikeln presenteras webbplatsen för https://sunstarsys.com/ som en fallstudie för en demonstration av praxis och analyser av associerade diagramtopologier.
Antal förbehåll
Det här är bara viktigt när du behöver väga kostnaden för att utföra fullständiga webbplatsbyggen varje gång du behöver justera innehållet på en webbsida. Om din webbplats innehåller mindre än 1K-källfiler avslappnar och läs följande med ett öga på dina framtida behov. Du valde att använda vår plattform, som är utformad för att skala med dig, inte mot dig. För de flesta sidor handlar det här materialet nedan om glesa innehållsberoendediagram för webbplatser med mer än 1K-sidor.
Webbplatsen Apache https://www.OpenOffice.Org kunde till exempel bygga sina 40K+-filer med den ursprungliga Apache-versionen av det här byggsystemet, med fullt integrerat stöd för inkrementella byggen. — utan konfigurerade beroenden —
Som standard bygger vårt byggsystem endast de filer som du har ändrat, utan problem för beroenden inom filen (om du inte anger dem i %path::beroenden
— mer om detta nedan). Om filen du ändrade finns i mallar/
eller lib/
Weaving Your Website’s *Dependency Graph * Tillsammans
Matematiskt en Topologi är en fullständig specifikation av de öppna delmängderna i ett utrymme
, vars syfte är att ange närhetsrelationerna mellan punkter
från rymden
. När
är ett diagram, en topologi
för
uppgår till att ange kanterna som förbinder diagrammets brytpunkter tillsammans (här ses brytpunkter som punkter för
, och de anslutande kanterna bestämmer områdena för dessa punkter som grundläggande öppna uppsättningar för topologin). En riktad graftopologi är i huvudsak samma sak, men innehåller en hänvisning till en topologisk inbäddning av
till ett större topologiskt rum
Det senare konceptet är vad vi kommer att använda när vi diskuterar *beroende diagrammets * topologi associerad med arbetsytan
av källfiler under platsens
innehåll/
underkatalog (här är
med sin metriska topologi för
och kanterna av
är riktade jordanska kurvor som inte korsar varandra och som ansluter en fil
till sin uppsättning filer som
beror på:
Har en tydlig förståelse av din webbplats beroende graf kommer att se till att du kan maximera prestandan hos vår byggteknik i stor skala. Vi tar den information du tillhandahåller %path::beroenden
under byggets laddning av webbplatsens lib/path.pm
fil, konstruera en omvänd mappning av beroende filer och använd som omvänd mappning för att fastställa den fullständiga korpus av filer som ska skapas för varje given svn bekräftelse
Det är viktigt att notera att beroenderelationerna mellan källfiler kan och bör fångas helt av %path::beroenden
hash under byggsystemets startbelastning av lib/path.pm
från ditt källträd, vilket är hur de inbyggda vyerna finns i våra SunStarSys::Visa
Perl-paketet är tänkt att fungera. Den walk_content_tree
, arkiverad
och seed_file_deps
nyttofunktioner som kan överföras från SunStarSys::Till
är användbara hjälpmedel för att konstruera %path::beroenden
Här är den delen av vårt liv 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>};
};
Gör mull den koden över för idéer om hur du vill * din webbplats * att fungera. Ja det finns en viss rimlig komplexitet (som omfattar både Perls reguljära uttryck och Perls UNIX C-skal) glob
gränssnitt, på ett mycket exakt sätt) kring hur %path::beroenden
Var finns posterna i %path::beroenden
ursprung? Om de inte är födda av en walk_content_tree { seed_file_deps ... }
, (som i princip dyker in i dina markdown-källfilers rubriker och innehåll), då är de bara hårdkodade i lib/path.pm
Cykliska beroendediagram är normen
Vår webbplats består för närvarande av 240 källfiler
om innehåll/
. Här är en 85 hörn x 465 kanter
, rullningsbar, tvådimensionell riktad grafrepresentation av en aktuell ögonblicksbild av beroenden på den engelska språksidan på vår webbplats (använda GraphViz punkt
.
.
Ganska komplex, även för en liten webbplats som den här! Många kantskärningar när du tar (undvikbar i dimension
). Av särskild vikt är kärnuppsättningen av täta, cykliska beroenden i de icke-arkiverade filerna på vår webbplats.
/lektioner/
katalog, mot nedre mitten till höger i diagrammet, vilket är hur en bra bloggwebbplatsens beroendediagram ska se ut. Dessa beroenden dras in i röda kurvor
Observera också den interna, väsentligen isolerade sammankopplingen av elementen i /kategorier/*/*
och /archives/2022/11/*
. De enda externa beroendena omfattar icke-arkiverat innehåll i /dagar/*
. Detta är genom design — De arkiverade uppsatserna bör endast ändras adiabatiskt, kanske enbart för justeringar av deras Kategori
rubriker Ingen av dessa ändringar påverkar det befintliga innehållet väsentligt, så vi spårar det inte i %path::beroenden
Självklart, vår Wiki för Orion Enterprise.
Handlar det inte bara om hyperlänkar?
Nej! I själva verket är link-topologin på din webbplats en helt separat fråga från källträdets beroende diagram. En sökmotor kommer naturligtvis att iller ut link topologi, men har ingen inblick i beroende graf.
Här är en 240+ hörn x 3859 kanter
, aktuella fågel-öga diagram över den engelska länka topologi graf för ** vår webbplats** (använda GraphViz twopi
.
.
Kan du upptäcka röda kanter
Hur SSI-tekniken kan hjälpa till
Traditional Serversidan innehåller.
- ** Stor** för beskärning av webbplatsens beroende diagram ner till hanterbar storlek utan att offra sidleveransfördröjning
- ** Stor** för att minska bortfall av mallobjekt i stora bekräftelsemeddelanden för bättre peer review och övervakning av dina byggda ändringsuppsättningar
API:er för mallar
ssi-tagg
Syntax:
{% ssi
`/content_rooted/path/to/source_file` %}
- sökvägar rotade i
nöjd
källkatalog - hoppar över huvuddelen av källfilen som ska
ssi
ingår
ssi-filter
Syntax:
{{ innehåll|ssi }}
- rekursivt utvärderar
ssi
taggar i värdet som ska filtreras - användbart för att undvika att använda ett stort värde (3+) av
quick_deps
i en@path::mönster
Varför inte SymLinks?
- barebones filsystem abstraktion som är svårt att säkert stödja i en
<virtualhost>
sammanhang kontext - samma nackdelar med traditionella
ssi
på fullständiga webbsidor - vår Wiki för Orion Enterprise.
Byggverktyg för permalänkar
Dokumentvaraktighet
Orions byggsystem har integrerat stöd för vad vi kallar Document Curation, vilket är processen att retextualisera och omorganisera ditt innehåll baserat på hur du ställer in Kategorier
och Arkivera
rubriker i källfilerna för Markdown. Dessa funktioner är avaktiverade som standard, men kan aktiveras genom att ställa in en category_root
(för kategoristöd) eller archive_root
(för arkiveringsstöd) i det associerade hashref-argumentet till det önskade @path::mönster
Kategorier
- nytt innehåll konstrueras med hjälp av mall
ssi
taggar som pekar tillbaka till permalänkplatsen, medan du tar bortArkivera
sidhuvud från den konstruerade källsidan - kategorier är strikt additiva (dvs. att ta bort en kategori från en källsidas rubriker kommer inte att ta bort den från den kategorin på den aktiva webbplatsen),
- genererad på begäran
Arkiverade sidor
På vår webbplats arkiverar vi aggressivt inaktuella essäer för att hålla byggtiderna för nya essäer låga, samtidigt som vi inte förstör permalänkar till arkiverade dokument. beroende graf i förhållande till /arkiv/
- innehåll konstruerat med hjälp av mall
ssi
taggar som pekar tillbaka till permalänkplatsen, medan du tar bortKategorier
ochArkivera
rubriker från den konstruerade källsidan - innehåll i
/(essays|clients)/
är alltid permalänkar, även efter arkivering
Ledare
HTML-kommentarer inbäddade i Markdown-prosans formgränser för lede-innehållet. Vi använder **{Antal ledtrådar}
Bearbetningslinjer görs med ledare
Mallfilter. Det är nyttigt att kombinera detta med ssi
Slutsatser
Det finns intressanta datastrukturer och relationer som ännu inte har upptäckts när man hanterar en webbplats beroende diagram från ett byggprestandaperspektiv, vilket är ett mycket nyare intresseområde än forskningslitteraturen som gräver i datastrukturerna och tillhörande isärtaganden som omger länka topologi1,2.
Konventionella inkrementella byggen för rena mjukvaruutvecklingsprojekt är fortfarande ett hett ämne. Den forskning som omfattas av 3 4 publicerades i oktober 2022, ungefär en månad innan denna uppsats förväntas vara klar. Byggsystemet pluto5 har funktioner som liknar våra (själva bygget kan dynamiskt återskapa och återskapa beroenden).
Den goda nyheten är att vi har dig täckt som vår kund. Vi kommer att hålla dig informerad om bästa praxis och den senaste tekniken inom detta område, så att du kommer att dra nytta av våra lärdomar under det senaste decenniet och in i framtiden.
Fotnoter
Identifiering av kluster i webbdiagrammet baserat på länktopologi.
Hämta webbforum från länktopologi Den nionde ACM-konferensen om hypertext och hypermedia: länkar, objekt, tid och rum — struktur i hypermedia system: länkar, objekt, tid och rum —
Om fördelarna och gränserna för inkrementella konfigurationer av programvara: en undersökande studie.
Ett ljud och optimalt inkrementellt byggsystem med dynamiska beroenden.