מהו ניהול תלות בתוכן חכםTM הכל אודות?
תקציר
ניהול תלות בתוכן חכם™ עוסק במעגל הרעיונות הקשורים למתן תמיכה והנחיה לבנייה הגדלה, תוך שמירה על נכונות ל עקרון הנורמליזציה של התוכן — אשר קישורים אנכיים צריך להיות מקור האמת היחיד, לא משנה איך התוכן שלהם נצבר לאורך עץ המקור וכתוצאה מכך בונים ארטיפקטים.
מאמר זה מציג את אתר האינטרנט https://sunstarsys.com/ כמקרה בוחן לצורך הדגמה של שיטות עבודה מומלצות וניתוח של טופולוגיות הגרפים הקשורות.
מס’ מערות
זה משנה רק כאשר אתה צריך לשקול את העלות של ביצוע מלא האתר בונה בכל פעם שאתה צריך לצבוט את התוכן בדף אינטרנט. אם אתר האינטרנט שלך מכיל פחות מ-1K קבצי מקור בתוכו, relax, וקרא את הדברים הבאים בעיניים לעבר הצרכים העתידיים שלך. בחרת להשתמש בפלטפורמה שלנו, המיועדת להתרחב איתך, לא נגדך. עבור רוב הדפים, חומר זה להלן עוסק בתרשימי תלות של תוכן sparse לאתרים עם יותר מ-1K דפים.
לדוגמה, אתר האינטרנט של Apache https://www.OpenOffice.Org הצליח לבנות את קובצי ה-40K+ שלו באמצעות גרסת ה-Apache המקורית של מערכת בנייה זו, עם תמיכה משולבת במלואה לבניות תוספתיות — ללא יחסי תלות מוגדרים כלשהם — על ידי שימוש חכם בטכנולוגיית SSI מסורתית בלבד.
כברירת מחדל, מערכת הבנייה שלנו תבנה רק את הקבצים ששינית, ללא חשש ליחסי התלות בתוך הקובץ (אלא אם כן תציין אותם ב- %path::יחסי תלות
— עוד על זה למטה). אם הקובץ ששינית נמצא ב תבניות/
או ספרייה/
ספרייה, בניית אתר מלאה תפעיל במקום זאת.
אריגת גרף התלות של האתר שלך* יחד
מתמטית, טופולוגיה הוא מפרט מלא של התת-קבוצות open של רווח
, שמטרתה לציין את קשרי הקרבה בין נקודות **
של החלל
. מתי
הוא גרף, טופולוגיה
עבור
מציין את הקצוות המחברים את הקודקודים של התרשים יחד (כאן הקודקודים מוצגים כנקודות * של
, והקצוות המחברים קובעים את השכונות של נקודות אלה כערכות פתוחות בסיס עבור הטופולוגיה. טופולוגיית גרף מכוונת היא בעצם אותו הדבר, אבל משלבת התייחסות לשיבוץ טופולוגי של
במרחב טופולוגי גדול יותר
, כאשר חיבורי הקצה של השיבוץ מיוצגים על-ידי עקומות כיווניות שאינן חותכות (ירדן).
הרעיון האחרון הוא מה שנשתמש בו כאשר נדון בטופולוגיה של גרף התלות* מקושר למרחב
של קובצי מקור מתחת לאתר שלך
תוכן/
תת ספרייה (כאן) הינו
עם הטופולוגיה המטרית של
, והקצוות של
הם לא חותכים, עקומות ירדן מכוונת המחבר קובץ
אודות קבוצת הקבצים שעליה
תלוי:
).
לאחר הבנה ברורה של גרף התלות* של אתר האינטרנט שלך תבטיח שתוכל למקסם את הביצועים של טכנולוגיית הבנייה שלנו בקנה מידה גדול. אנו לוקחים את המידע שאתה מספק %path::יחסי תלות
במהלך עומס הבנייה של האתר שלך lib/path.pm
קובץ, בנה מפה הפוכה של קבצים תלויים, והשתמש ב-* that reverse map* כדי לקבוע את מבנה הקבצים המלא לכל נתון ביצוע commit של svn
אתה עושה למערכת שלנו.
חשוב לציין שקשרי התלות בין קובצי מקור יכולים וצריכים להיקלט באופן מלא על-ידי %path::יחסי תלות
hash במהלך טעינת האתחול של מערכת הבנייה של lib/path.pm
מעץ המקור שלך, כך נראים התצוגות המובנות הכלולות בנו SunStarSys::תצוגה
חבילת פריל נועדה לפעול. דה walk_content_tree
, הועבר לארכיב
, וגם seed_file_deps
פונקציות שירות שניתן לייבא מ- SunStarSys::כלי שירות
הם עזרים שימושיים בבניית %path::יחסי תלות
גיבוב, עם תמיכה מובנית לניהול מטמון תלות להאצת בניות תוספתיות בקנה מידה.
הנה החלק הזה של חיינו 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>};
};
אנא בצע mull קוד זה על רעיונות על איך אתה רוצה האתר שלך לעבוד. כן, יש מורכבות סבירה כלשהי (הכוללת גם את הביטויים הרגילים של פרל וגם את קליפת UNIX C של פרל) גלוב
ממשקים, באופן מדויק מאוד) סביב איך %path::יחסי תלות
הוא בנוי בקובץ זה, אבל במקום רק לראות את זה כעבודת אופטימיזציה, במקום להסתכל על זה כמספק את המרכיבים הבסיסיים הדרושים לפרש את ההיבטים העיקריים של טופולוגיית הקישור *באופן אוטומטי, שנוצר באופן דינמי.
היכן רשומות ב- %path::יחסי תלות
מקור? אם הם לא נולדים מתוך קריאה של walk_content_tree { seed_file_deps ... }
, (אשר בעצם צולל לתוך הכותרות והתוכן של קבצי מקור markdown שלך), אז הם פשוט מקודדים קשה לתוך lib/path.pm
בזמן העומס.
###תרשימי תלות מעגליים הם הנורמה
האתר שלנו מורכב כיום 240 קובצי מקור
בתוך תוכן/
. הנה אחד 85 קודקודים x 465 קצוות
, ייצוג גרף מופנה דו-ממדי ניתן לגלילה של צילום מצב עדכני של יחסי התלות של דפי השפה האנגלית באתר שלנו** (שימוש ב- GraphViz נקודה
):
.
די מורכב, אפילו עבור אתר קטן כזה! חיתוכי קצוות רבים בעת לקיחת (ניתן לביטול בממד)
). הערה מיוחדת היא קבוצת הליבה של יחסי תלות מעגליים צפופים בקבצים שאינם מאוחסנים בארכיון של האתר שלנו
/הודעות/
ספרייה, לכיוון מרכז-ימין התחתון של הגרף, כך צריך להיראות תרשים התלות של אתר בלוגים טוב. תלות זו נמשכת ב- עקומות אדומות
בתוך התמונה.
כמו כן, שימו לב לחיבור הפנימי, המבודד במהותו של האלמנטים ב /קטגוריות/*/*
וגם /archives/2022/11/*
. יחסי התלות החיצוניים היחידים כוללים תוכן שלא הועבר לארכיב ב- /הודעות/*
. זה לפי העיצוב — המאמרים בארכיון צריך רק לשנות אדיאבטי אולי רק להתאמות שלהם קטגוריה
כותרות. אף אחד מהשינויים האלה לא משפיע באופן מהותי על התוכן הקיים, לכן אנחנו לא עוקבים אחריו. %path::יחסי תלות
.
כמובן, שלנו וויקי, אוריון אנטרפרייז מעולם לא הייתה בעיה להתמודד עם תלות מחזורית.
זה לא רק על היפר-קישורים?
לא! למעשה, טופולוגיית הקישור* של אתר האינטרנט שלך היא עניין נפרד לחלוטין מתרשים התלות* של עץ המקור. מנוע חיפוש באופן טבעי יפרש את הטופולוגיה של הקישור*, אך אין לו תובנה לגבי גרף התלות*.
הנה A 240+ קודקודים x 3859 קצוות
, גרף עין הציפורים הנוכחי של הטופולוגיה קישור אנגלית גרף עבור האתר שלנו (שימוש ב- GraphViz טופי
):
.
אתה יכול לזהות את קצוות אדומים
כפי שצוין בתרשים התלות*? גרף הטופולוגיה של הקישור הוא איכותי וכמותי שונה מאוד מגרף התלות* (קטן באופן דרמטי ופחות מחובר) המתואר לעיל.
כיצד טכנולוגיית SSI יכולה לעזור
מסורתי כולל צד שרת (SSI).
- מצוין עבור גיזום תרשים התלות של האתר שלך למטה כדי לנהל את הגודל מבלי להקריב את זמן ההמתנה למסירת דף
- מצוין להפחתת נטישת הטקסט החוזר בהודעות commit גדולות לסקירה ופיקוח טובים יותר של קבוצות השינויים המובנות שלך
- lousy להקצאה מחדש של דפי אינטרנט שלמים למיקום אחר בהיררכיית שורש המסמך.
API לתבנית
תווית ssi
תחביר:
{% ssi
`/content_rooted/path/to/source_file` %}
נתיבים המושרשים ב- תוכן
ספריית מקור
- מדלג על חלק הכותרת של קובץ המקור להיות
ssi
כלול - משכתב כתובות url יחסיות לכתובות url מוחלטות בתוכן הכלול של נתיב היעד
מסנן ssi
תחביר:
{{ תוכן|ssi }}
- הערכה רקורסיבית
ssi
תגיות בערך שיש לסנן - שימושי כדי להימנע משימוש בערך גדול (3+) של
quick_deps
בתוך a@path::תבניות
hashref ארגומנט של ערך, שיכול להשפיע על הביצועים
למה לא SymLinks?
- אבסטרקציה מערכת קבצים בקושי כי הוא קשה לתמוך באופן מאובטח ב
<virtualhost>
הקשר
אותו downides עם מסורתיssi
בדפי אינטרנט מלאים
שלנו וויקי, אוריון אנטרפרייז המערכת לא תומכת בהם
בניית כלים לקישורים מורשים
אוצרות מסמך
מערכת הבנייה של אוריון כוללת תמיכה משולבת במה שאנו מכנים “אוצרות מסמכים”, שהיא תהליך של יצירת הקשר מחדש וארגון מחדש של התוכן שלך בהתבסס על האופן שבו אתה מגדיר את התוכן. קטגוריות
וגם ארכיון
כותרות בקובצי המקור של Markdown. תכונות אלו חסומות כברירת מחדל, אך ניתן להפעיל אותן על-ידי הגדרת category_root
(לתמיכה בקטגוריה) או archive_root
(לתמיכה בהעברה לארכיב) בארגומנט hashref המקושר אל הרצוי @path::תבניות
כניסה.
קטגוריות
- תוכן חדש נבנה באמצעות תבנית
ssi
תגיות המצביעות חזרה למיקום קישור קבוע, בעת הסרתארכיון
כותרת מדף המקור שנבנה - הקטגוריות מתווספות בקפדנות (כלומר, הסרת קטגוריה מכותרות דף מקור לא תסיר אותה מהקטגוריה באתר החי),
- נוצר לפי דרישה
- מחיקת כל הקטגוריות ב-commit יחיד היא דרך מצוינת לסנכרן אותן עם המפרט המדויק בכל כותרות דפי המקור, מבלי להרוס את תוכן הקטגוריה שנשמר באתר החי
דפים בארכיב
באתר שלנו, אנחנו בארכיון אגרסיבי מאמרים מיושנים כדי לשמור על זמני בנייה עבור מאמרים חדשים נמוך, תוך לא להרוס קישור קבוע למסמכים בארכיון. גרף התלות* יחסית ל- /ארכיונים/
מדריך (עבור האתר שלנו) הוא באופן סביר עצמאי לפי הכללים הבאים:
- תוכן שנבנה באמצעות תבנית
ssi
תגיות המצביעות חזרה למיקום קישור קבוע, בעת הסרתקטגוריות
וגםארכיון
כותרות מדף המקור שנבנה - תוכן ב-
/(הודעות|לקוחות)/
הם תמיד קישור קבוע, גם לאחר אחסון בארכיון - העברה לארכיון מסירה ביעילות את מיקום הקישור הקבוע מגרף התלות*, מבלי להסיר את הקישור הקבוע עצמו מהאתר
מספר ##### לד
הערות HTML המוטמעות בגבולות טופס Markdown prose של תוכן המדריך. אנו משתמשים {מס’ לידים} למטרה זו.
ה-Leades של העיבוד נעשה עם לובי
מסנן תבניות. כדאי לשלב את זה עם ssi
מסנן למפתוח קובץ קטגוריה עם יותר מדף קטגוריה אחד בתוכו.
מס’ מסקנות
ישנם מבני נתונים מעניינים ויחסים שטרם נחשפו בעת התמודדות עם גרף התלות* של אתר אינטרנט מנקודת מבט של ביצועי בנייה, שהוא תחום עניין הרבה יותר חדש מאשר ספרות המחקר המתעמקת במבני הנתונים והנפקות קשורות המקיפות את טופולוגיית הקישור*1,2.
בנייה מצטברת קונבנציונלית לפרויקטים טהורים של פיתוח תוכנה היא עדיין נושא חם. המחקר שכלל 3,4 פורסם באוקטובר 2022, כחודש לפני שמאמר זה צפוי להסתיים. מערכת הבנייה pluto5 כוללת תכונות הדומות למדי לתכונות שלנו (הבנייה עצמה יכולה ליצור מחדש ולבנות מחדש יחסי תלות באופן דינמי).
החדשות הטובות הן שאנחנו מכוסים בתור הלקוחות שלנו. אנו נשמור אתכם על שיטות העבודה המומלצות ומצב האמנות במרחב זה, כך שתיהנו מהלקחים שלנו שנלמדו בעשור האחרון ולמחר.
מס’ הערות שוליים
זיהוי אשכולות בתרשים האינטרנט בהתבסס על טופולוגיית קישור סימפוזיון ההנדסה והיישומים הבינלאומי השביעי, 2003. הליכים.
הסקת קהילות אינטרנט מטופולוגיית קישור ההליכים של ועידת ACM התשיעית בנושא היפרטקסט והיפרמדיה: קישורים, אובייקטים, זמן ומרחב — מבנה במערכות היפר-מדיה: קישורים, אובייקטים, זמן ומרחב — מבנה במערכות היפר-מדיה. 1998.
על היתרונות והמגבלות של תצורות תוכנת בנייה תוספתית: מחקר חקרני ICSE ‘22: הליכי הכנס הבינלאומי ה-44 להנדסת תוכנה, מאי 2022
לקראת בנייה מצטברת של תצורות תוכנה ICSE-NIER ‘22: הליכי הכנס הבינלאומי ה-44 של ACM/IEEE בנושא הנדסת תוכנה: רעיונות חדשים ותוצאות מתפתחות, מאי 2022
מערכת בנייה תוספתית קולית ואופטימלית עם יחסי תלות דינמיים OOPSLA 2015: ההליכים של הכנס הבינלאומי ACM SIGPLAN לשנת 2015 בנושא תכנות, מערכות, שפות ויישומים מוכווני אובייקט, אוקטובר 2015