Smart Content Dependency Management ™ 的相關資訊是什麼?
目錄
摘要
智慧內容相依性管理™ 是關於為 *增量建置提供支援和協助的想法圓圈 ,同時保持 內容標準化原則 — 其中 永久連結 * 應該是單一事實來源,不論其內容在整個來源樹狀結構中的策劃方式與產生的組建使用者自建物件為何。
本文提供https://iconoclasts.blog/ 網站為案例研究,以示範相關圖形拓樸的最佳實務與分析。
洞穴
這只有在您需要在每次在網頁上調整內容時,才需要將執行完整網站組建的費用加權時,才非常重要。如果您的網站中的來源檔案少於 1K (relax),請仔細閱讀下列內容,以滿足您的未來需求。您選擇使用我們的平台,該平台旨在與您一起擴展,而不是對您進行擴展。對於大多數頁面,以下資料是關於 1K 以上之網站的 *稀疏內容相依性圖表 *。
例如,Apache https://www.OpenOffice.Org 網站能夠使用此組建系統的原始 Apache 版本建立超過 40K 個檔案,並完全整合支援增量組建— 沒有任何已設定的相依性— 透過單獨使用傳統的 SSI 技術。
依照預設,我們的建置系統只會建置您所變更的檔案,而不會影響檔案內部相依性 (除非您在其中指定檔案相依性) %path::dependencies — 下面還有更多功能。如果您變更的檔案位於templates/ 或lib/ 目錄會改為觸發完整網站建置。
將您網站的 相依性圖表 一起編排
數學、* 拓樸 是空間 open 子集的完整規格,其目的是指出 點 之間的相鄰關係 的空間。時間 是一個圖表, 主題 針對 用於指定將圖表頂點連接在一起的邊數的量 (頂點視作 點 *) ,而連接邊則確定這些點的鄰域為拓樸的 *基礎開放集 。 導向圖形拓樸 *基本上是相同的,但包含拓樸內嵌的參照 進入更大的拓樸空間 ,其中嵌入的邊緣連接以方向性、非相交 (約旦) 曲線表示。
後者概念是我們在討論* 相依性圖表 *拓樸時將使用的概念 與空間相關 網站下方的來源檔案content/ 子目錄 (此處) 是 與其度量拓樸 - ,以及 的邊緣 是不相交的,引導約旦曲線連接檔案 到它的一組檔案 相依:).
擁有清楚瞭解您網站的* 相依性圖表 可確保您可以大規模地將建置技術的效能最大化。我們會將您提供的資訊提供給%path::dependencies 在建置版本載入您網站時lib/path.pm 檔案、建構相依檔案的反向對映,並使用 該反向對映 *來決定要為任何指定檔案建置的完整檔案庫svn commit 您可前往我們的系統。
請注意,來源檔案之間的相依性關係可以且應由來源檔案完全擷取是很重要的。%path::dependencies 組建系統啟動載入時的雜湊lib/path.pm 從您的來源樹狀結構,這是我們所包含之內建檢視的方式SunStarSys::View Perl 套裝程式的運作方式。繁體中文walk_content_tree, archived,和seed_file_deps 公用程式功能可匯入自SunStarSys::Util 有用的助於建構%path::dependencies hash,內建支援管理相依性快取,可大規模加速增量建置。
這是我們生活中的那一部分lib/path.pm:
walk_content_tree {
$File::Find::prune = 1, return if m#^/(images|css|js)\b#;
return if -d "content/$_";
my $path = $_;
utf8::is_utf8 $path or utf8::decode $path;
state $count = 0;
for my $lang (qw/en es de fr ru sv he zh-TW ar ko ja pt-BR/) {
delete $dependencies{"/sitemap.html.$lang"} if ++$count <= 12;
next if m!\.page/!;
if (/\.md\.$lang$/ or m!/index\.html\.$lang$!) {
push @{$dependencies{"/sitemap.html.$lang"}}, $path if !archived;
}
if (/^(.*)\.tex\.$lang$/ and -f "content$1.bib.lang") {
push @{$dependencies{$path}}, "$1.bib.$lang";
}
if ($path =~ s!/index\.html\.$lang$!!) {
$dependencies{"$path/index.html.$lang"} = [
grep {utf8::decode $_; s/^content//}
glob("'content$path'/*.md.$lang"),
glob("'content$path'/*/index.html.$lang")
];
}
}
}
and do {
while (my ($k, $v) = each %{$facts->{dependencies}}) {
$dependencies{$k} = [grep $k ne $_, grep s/^content// && !archived, map glob("'content'$_"), ref $v ? @$v : split /[;,]?\s+/, $v];
}
open my $fh, "<:raw", "lib/acl.yml" or die "Can't open acl.yml: $!";
unshift @acl, @{Load join "", <$fh>};
my %cache;
@acl = grep !$cache{$_->{path}}++, @acl;
for (glob("content/*/index.md.*")) {
next if /archives|categories/;
s!/index\.md\.[^/]+$!!;
push @acl, { path => $_, rules => {
'@bloggers' => 'rw',
'@svnadmin' => 'rw',
'*' => 'r',
}} unless $cache{$_}++;
}
};
請仔細閱讀該程式碼,瞭解您希望* 您的網站 如何運作。是,有一些合理的複雜性 (包括 Perl 的正規表示式和 Perl 的 UNIX C-shell) glob 介面,以非常精確的方式進行) %path::dependencies 建構於該檔案中,但不僅僅是將它視為最佳化工作,而是將它視為提供必要的基本成分,以自動化、動態產生的方式來建構 連結拓樸 *的主要層面。
項目在何處%path::dependencies 起始?如果它們不是從呼叫walk_content_tree { seed_file_deps ... }, (基本上會深入您的 Markdown 來源檔案的標頭和內容),然後它們就會被硬式編碼為lib/facts.yml 在載入時間。
循環相依性圖表為常態
我們的網站包括:2417 source files 中的content/。以下是100+ vertices x 600+ edges,可捲動的二維導向圖表,代表 此網站 的英文頁面相依性最近快照 (使用 GraphViz dot):
即使是像這樣的小型網站,也相當複雜!拍攝時多個邊相交 (可在維度中作廢) ). 特別注意的是,我們網站中非封存檔案中的密集、循環相依性核心集/essays/ 朝向圖表右下角的目錄,這是部落格網站的相依性圖表應該呈現的樣子。這些相依性繪製於red curves 在影像中。
另請注意下列元素的內部、基本上隔離的互連性:/categories/*/* 與/archives/2026/05/*。唯一外部相依性涉及未封存的內容/joe/*。這是根據設計— 封存的文章應僅變更 adiabatically,可能僅用於調整其內容Category 標頭。這些變更都不會對預先存在的內容造成重大影響,因此我們不會追蹤這些變更%path::dependencies.
當然,我們的Orion Enterprise Wiki 處理循環相依性從未發生過問題。
這不只是超連結?
沒有! 事實上,您網站的 *link 拓樸 與來源樹狀結構的 相依性圖表 完全不同。搜尋引擎會自然地拉出 連結拓樸 *,但無法深入解析 *相依性圖表 *。
以下是16k+ vertices x 90k+ edges,目前鳥瞰的英文 連結拓撲 圖表 **(使用 GraphViz twopi):
可以看到red edges 如 相依性圖表 中所指定?* 連結拓樸 *圖表具有質性且量化 ** 與上述 (極小且較不相互連接) 相依性圖表 相異。
SSI 技術如何提供協助
傳統伺服器端包括 (SSI)
- 極佳 可將您的網站 相依性圖表 縮減至可管理大小,不犧牲頁面傳遞延遲
- 良好 可減少大型確認訊息中的樣板流失,以便對等複查及監督您所建立的變更集
- lousy 可將整個網頁重新整合至文件根目錄中的不同位置
樣板 API
ssi 標籤
Syntax:
{% ssi `/content_rooted/path/to/source_file` %}
- 根目錄路徑
content來源目錄 - 略過來源檔案的標頭部分
ssi包含 - 將目標路徑內含內容的相對 URL 重寫為絕對 URL
ssi 濾波器
Syntax:
{{ 內容 |ssi }}
- 遞迴評估
ssi要篩選之值中的標記 - 適用於避免使用大值 (3+)
quick_deps中的@path::patterns項目的引數 hashref,可能會影響效能
為什麼不是 SymLinks?
- 難以安全地支援的裸機檔案系統抽象化
<VirtualHost>上下文 - 與傳統相同的停機
ssi在完整網頁上 - 我們的Orion Enterprise Wiki 系統不支援
為 Permalink 建立工具
文件策展
Orion 的建置系統已整合支援我們所呼叫的內容 *文件策展 *,這是根據您設定的方式,重新塑造和重組內容的程序。Categories 與Status Markdown 來源檔案中的標頭。這些功能預設為停用,但可透過設定來啟用category_root (適用於類別支援) 或archive_root 相關聯的 hashref 引數中的 (適用於「封存支援」) 符合所需@path::patterns 項目。
分類
- 使用範本建構新內容
ssi指向永久連結位置的標記, - 類別是嚴格的添加物 (亦即,從來源頁面的標頭中移除類別不會將其從即時網站的該類別中移除),
- 按要求產生,
- 刪除單一確認中的所有類別是將它們與所有來源頁面標頭中確切規格同步的好方法,而不會毀棄即時網站上保留的類別內容。
存檔的頁面
在我們的網站上,我們積極封存過時的短文,以維持新短文的建置時間,而不會破壞封存文件的永久連結。相對於此項目的 相依性圖表 /archives/ 目錄 (用於我們的網站) 是依下列規則合理獨立的目錄:
- 使用範本建構的內容
ssi指向永久連結位置的標記,同時移除Categories來自建構來源頁面的標頭 - 內容
/(essays|clients)/永遠是永久連結,即使在存檔之後 - 存檔功能會有效地將永久連結位置自 相依性圖表 移除,但不會將永久連結本身自網站移除
Lede
內嵌於 LED 內容之 Markdown 程序表單界限中的 HTML 註解。我們使用 {導管編號} 為此目的。
處理導向已完成lede 範本篩選條件。將此項目與ssi 編製類別檔案索引的篩選,其中包含一個以上的類別頁面。
結論
從構建績效角度處理網站 相依性圖形 時,有一些有趣的資料結構和關係尚未被發現,這比研究文獻更新的興趣領域,深入研究資料結構和相關問題 *連結拓撲 *1、2.
純軟體開發專案的傳統增量建置仍然是一個熱門主題。研究涵蓋於3、4 2022 年 10 月發布,此文章預計完成前大約一個月。* 插件 *5 個 組建系統的功能與我們的功能相當類似 (組建本身可動態重新產生及重建相依性)。
好消息是,我們為您提供作為我們的客戶。我們將讓您瞭解此空間中的最佳實務和藝術狀態,因此您將從過去十年到未來的經驗中獲益。
註腳
根據連結拓樸識別 Web 圖表中的叢集 2003 年第七屆國際資料庫工程與應用軟體研討會。訴訟程序。
從連結拓樸推斷 Web 社群 在超文本和超媒體上第九次 ACM 會議的訴訟:連結、物件、時間和空間— 超媒體系統的結構:連結、物件、時間及空間— 超媒體系統的結構。1998 年。
增量建置軟體組態的優點與限制:探索性研究 ICSE ‘22:2022 年 5 月第 44 屆軟體工程國際會議的訴訟
提供逐步建置的軟體組態 ICSE-NIER ‘22:2022 年 5 月,ACM/IEEE 第 44 屆軟體工程國際會議的訴訟:新想法與新興成果
具備動態相依性的聲音和最佳增量建置系統 OOPSLA 2015:2015 年 ACM SIGPLAN 國際會議關於物件導向程式設計、系統、語言和應用程序的程序 2015 年 10 月