From 26ed39e1ebbab7efce8f70d4bad8023fce842334 Mon Sep 17 00:00:00 2001 From: sanbuphy Date: Sun, 18 Jan 2026 10:24:35 +0800 Subject: [PATCH] feat: add AI and Backend evolution history with interactive demos, and refine Frontend evolution demo --- docs/.vitepress/config.mjs | 26 +- .../appendix/ai-history/AiEvolutionDemo.vue | 420 ++++++ .../appendix/ai-history/PerceptronDemo.vue | 226 +++ .../ai-history/RuleBasedVsLearningDemo.vue | 213 +++ .../BackendEvolutionDemo.vue | 404 ++++++ .../MonolithVsMicroserviceDemo.vue | 232 +++ .../browser-devtools/BrowserDevToolsDemo.vue | 1252 +++++++++++++++++ .../BrowserDevToolsLiveDemo.vue | 457 ++++++ .../appendix/git-intro/GitThreeAreasDemo.vue | 516 +++++-- .../appendix/ide-intro/AiHelpDemo.vue | 707 ++++++++++ .../appendix/ide-intro/VirtualVSCodeDemo.vue | 19 +- .../appendix/llm-intro/TokenizerToMatrix.vue | 7 +- .../appendix/vlm-intro/AttentionDemo.vue | 532 ++++--- .../vlm-intro/LinearProjectionDemo.vue | 30 +- .../ModelArchitectureComparisonDemo.vue | 513 +++---- .../appendix/vlm-intro/PatchifyDemo.vue | 312 ++-- .../appendix/vlm-intro/ViTOutputDemo.vue | 6 +- .../web-basics/BrowserRenderingDemo.vue | 637 +++++---- .../web-basics/ComponentReusabilityDemo.vue | 260 ++++ .../web-basics/CssCommonProperties.vue | 237 ++++ .../appendix/web-basics/CssLayoutDemo.vue | 295 ++++ .../appendix/web-basics/CssPlaygroundDemo.vue | 193 +++ .../appendix/web-basics/CssSelectorsDemo.vue | 253 ++++ .../appendix/web-basics/DnsLookupDemo.vue | 374 ++--- .../web-basics/FrontendEvolutionDemo.vue | 668 +++++++++ .../appendix/web-basics/HttpExchangeDemo.vue | 545 +++---- .../ImperativeVsDeclarativeDemo.vue | 222 +++ .../appendix/web-basics/TcpHandshakeDemo.vue | 456 +++--- .../appendix/web-basics/UrlParserDemo.vue | 376 +++-- .../appendix/web-basics/UrlToBrowserDemo.vue | 212 ++- .../appendix/web-basics/WebTechTriad.vue | 200 ++- docs/.vitepress/theme/index.js | 34 + docs/en-us/index.md | 18 + docs/zh-cn/appendix/ai-evolution.md | 83 ++ docs/zh-cn/appendix/backend-evolution.md | 89 ++ docs/zh-cn/appendix/browser-devtools/index.md | 119 ++ docs/zh-cn/appendix/frontend-evolution.md | 66 + docs/zh-cn/appendix/git-intro.md | 578 +------- docs/zh-cn/appendix/ide-intro/index.md | 124 +- docs/zh-cn/appendix/url-to-browser.md | 129 +- docs/zh-cn/appendix/vlm-intro.md | 275 ++-- docs/zh-cn/appendix/web-basics.md | 161 ++- docs/zh-cn/index.md | 23 + .../1.1-introduction-to-ai-ide/index.md | 2 +- 44 files changed, 9868 insertions(+), 2633 deletions(-) create mode 100644 docs/.vitepress/theme/components/appendix/ai-history/AiEvolutionDemo.vue create mode 100644 docs/.vitepress/theme/components/appendix/ai-history/PerceptronDemo.vue create mode 100644 docs/.vitepress/theme/components/appendix/ai-history/RuleBasedVsLearningDemo.vue create mode 100644 docs/.vitepress/theme/components/appendix/backend-evolution/BackendEvolutionDemo.vue create mode 100644 docs/.vitepress/theme/components/appendix/backend-evolution/MonolithVsMicroserviceDemo.vue create mode 100644 docs/.vitepress/theme/components/appendix/browser-devtools/BrowserDevToolsDemo.vue create mode 100644 docs/.vitepress/theme/components/appendix/browser-devtools/BrowserDevToolsLiveDemo.vue create mode 100644 docs/.vitepress/theme/components/appendix/ide-intro/AiHelpDemo.vue create mode 100644 docs/.vitepress/theme/components/appendix/web-basics/ComponentReusabilityDemo.vue create mode 100644 docs/.vitepress/theme/components/appendix/web-basics/CssCommonProperties.vue create mode 100644 docs/.vitepress/theme/components/appendix/web-basics/CssLayoutDemo.vue create mode 100644 docs/.vitepress/theme/components/appendix/web-basics/CssPlaygroundDemo.vue create mode 100644 docs/.vitepress/theme/components/appendix/web-basics/CssSelectorsDemo.vue create mode 100644 docs/.vitepress/theme/components/appendix/web-basics/FrontendEvolutionDemo.vue create mode 100644 docs/.vitepress/theme/components/appendix/web-basics/ImperativeVsDeclarativeDemo.vue create mode 100644 docs/zh-cn/appendix/ai-evolution.md create mode 100644 docs/zh-cn/appendix/backend-evolution.md create mode 100644 docs/zh-cn/appendix/browser-devtools/index.md create mode 100644 docs/zh-cn/appendix/frontend-evolution.md diff --git a/docs/.vitepress/config.mjs b/docs/.vitepress/config.mjs index 03febec..769d72a 100644 --- a/docs/.vitepress/config.mjs +++ b/docs/.vitepress/config.mjs @@ -534,13 +534,6 @@ export default defineConfig({ text: '人工智能基础', collapsed: false, items: [ - { text: '大语言模型', link: '/zh-cn/appendix/llm-intro' }, - { text: '多模态大模型', link: '/zh-cn/appendix/vlm-intro' }, - { - text: 'AI 绘画原理', - link: '/zh-cn/appendix/image-gen-intro' - }, - { text: 'AI 音频模型', link: '/zh-cn/appendix/audio-intro' }, { text: '提示词工程', link: '/zh-cn/appendix/prompt-engineering' @@ -549,6 +542,14 @@ export default defineConfig({ text: '上下文工程', link: '/zh-cn/appendix/context-engineering' }, + { text: '人工智能进化史', link: '/zh-cn/appendix/ai-evolution' }, + { text: '大语言模型', link: '/zh-cn/appendix/llm-intro' }, + { text: '多模态大模型', link: '/zh-cn/appendix/vlm-intro' }, + { + text: 'AI 绘画原理', + link: '/zh-cn/appendix/image-gen-intro' + }, + { text: 'AI 音频模型', link: '/zh-cn/appendix/audio-intro' }, { text: 'Agent 智能体', link: '/zh-cn/appendix/agent-intro' }, { text: 'AI 能力词典', @@ -564,10 +565,19 @@ export default defineConfig({ text: 'HTML/CSS/JS 基础', link: '/zh-cn/appendix/web-basics' }, + { + text: '前端进化史', + link: '/zh-cn/appendix/frontend-evolution' + }, + { + text: '后端进化史', + link: '/zh-cn/appendix/backend-evolution' + }, { text: 'URL 到浏览器显示', link: '/zh-cn/appendix/url-to-browser' - } + }, + { text: '浏览器调试器', link: '/zh-cn/appendix/browser-devtools' } ] }, { diff --git a/docs/.vitepress/theme/components/appendix/ai-history/AiEvolutionDemo.vue b/docs/.vitepress/theme/components/appendix/ai-history/AiEvolutionDemo.vue new file mode 100644 index 0000000..9acd536 --- /dev/null +++ b/docs/.vitepress/theme/components/appendix/ai-history/AiEvolutionDemo.vue @@ -0,0 +1,420 @@ + + + + + \ No newline at end of file diff --git a/docs/.vitepress/theme/components/appendix/ai-history/PerceptronDemo.vue b/docs/.vitepress/theme/components/appendix/ai-history/PerceptronDemo.vue new file mode 100644 index 0000000..9ae2474 --- /dev/null +++ b/docs/.vitepress/theme/components/appendix/ai-history/PerceptronDemo.vue @@ -0,0 +1,226 @@ + + + + + \ No newline at end of file diff --git a/docs/.vitepress/theme/components/appendix/ai-history/RuleBasedVsLearningDemo.vue b/docs/.vitepress/theme/components/appendix/ai-history/RuleBasedVsLearningDemo.vue new file mode 100644 index 0000000..317ed48 --- /dev/null +++ b/docs/.vitepress/theme/components/appendix/ai-history/RuleBasedVsLearningDemo.vue @@ -0,0 +1,213 @@ + + + + + \ No newline at end of file diff --git a/docs/.vitepress/theme/components/appendix/backend-evolution/BackendEvolutionDemo.vue b/docs/.vitepress/theme/components/appendix/backend-evolution/BackendEvolutionDemo.vue new file mode 100644 index 0000000..da906c4 --- /dev/null +++ b/docs/.vitepress/theme/components/appendix/backend-evolution/BackendEvolutionDemo.vue @@ -0,0 +1,404 @@ + + + + + \ No newline at end of file diff --git a/docs/.vitepress/theme/components/appendix/backend-evolution/MonolithVsMicroserviceDemo.vue b/docs/.vitepress/theme/components/appendix/backend-evolution/MonolithVsMicroserviceDemo.vue new file mode 100644 index 0000000..d3bf54f --- /dev/null +++ b/docs/.vitepress/theme/components/appendix/backend-evolution/MonolithVsMicroserviceDemo.vue @@ -0,0 +1,232 @@ + + + + + \ No newline at end of file diff --git a/docs/.vitepress/theme/components/appendix/browser-devtools/BrowserDevToolsDemo.vue b/docs/.vitepress/theme/components/appendix/browser-devtools/BrowserDevToolsDemo.vue new file mode 100644 index 0000000..ffacaae --- /dev/null +++ b/docs/.vitepress/theme/components/appendix/browser-devtools/BrowserDevToolsDemo.vue @@ -0,0 +1,1252 @@ + + + + + diff --git a/docs/.vitepress/theme/components/appendix/browser-devtools/BrowserDevToolsLiveDemo.vue b/docs/.vitepress/theme/components/appendix/browser-devtools/BrowserDevToolsLiveDemo.vue new file mode 100644 index 0000000..58375d3 --- /dev/null +++ b/docs/.vitepress/theme/components/appendix/browser-devtools/BrowserDevToolsLiveDemo.vue @@ -0,0 +1,457 @@ + + + + + diff --git a/docs/.vitepress/theme/components/appendix/git-intro/GitThreeAreasDemo.vue b/docs/.vitepress/theme/components/appendix/git-intro/GitThreeAreasDemo.vue index 1413b04..da80a24 100644 --- a/docs/.vitepress/theme/components/appendix/git-intro/GitThreeAreasDemo.vue +++ b/docs/.vitepress/theme/components/appendix/git-intro/GitThreeAreasDemo.vue @@ -1,58 +1,121 @@ @@ -60,145 +123,320 @@ diff --git a/docs/.vitepress/theme/components/appendix/ide-intro/AiHelpDemo.vue b/docs/.vitepress/theme/components/appendix/ide-intro/AiHelpDemo.vue new file mode 100644 index 0000000..a76eced --- /dev/null +++ b/docs/.vitepress/theme/components/appendix/ide-intro/AiHelpDemo.vue @@ -0,0 +1,707 @@ + + + + + diff --git a/docs/.vitepress/theme/components/appendix/ide-intro/VirtualVSCodeDemo.vue b/docs/.vitepress/theme/components/appendix/ide-intro/VirtualVSCodeDemo.vue index 1938c3f..24b3302 100644 --- a/docs/.vitepress/theme/components/appendix/ide-intro/VirtualVSCodeDemo.vue +++ b/docs/.vitepress/theme/components/appendix/ide-intro/VirtualVSCodeDemo.vue @@ -1625,21 +1625,24 @@ onUnmounted(() => { width: 100%; } .tour-btn { - background: #007acc; + background: linear-gradient(135deg, #007acc 0%, #005999 100%); border: none; color: white; - padding: 6px 12px; - border-radius: 4px; + padding: 10px 20px; + border-radius: 6px; cursor: pointer; - font-size: 13px; - font-weight: 500; - transition: background 0.2s; + font-size: 15px; + font-weight: 600; + transition: all 0.2s; display: flex; align-items: center; - gap: 6px; + gap: 8px; + box-shadow: 0 4px 12px rgba(0, 122, 204, 0.3); } + .tour-btn:hover { - background: #005fa3; + transform: translateY(-1px); + box-shadow: 0 6px 16px rgba(0, 122, 204, 0.4); } .tour-btn.stop { background: #e51400; diff --git a/docs/.vitepress/theme/components/appendix/llm-intro/TokenizerToMatrix.vue b/docs/.vitepress/theme/components/appendix/llm-intro/TokenizerToMatrix.vue index e2cf08a..00412ba 100644 --- a/docs/.vitepress/theme/components/appendix/llm-intro/TokenizerToMatrix.vue +++ b/docs/.vitepress/theme/components/appendix/llm-intro/TokenizerToMatrix.vue @@ -46,6 +46,9 @@

Step 1: Tokenization (分词)

计算机首先将文本切分为最小的语义单位(Token)。 + + (注:此处演示简化为按字切分,真实模型通常使用 BPE 算法,如“人工智能”可能合并为一个 Token) +

colors[idx % colors.length] const getHeatmapColor = (val) => { // val is -1 to 1 // Map to blue (negative) -> white (0) -> red (positive) - const opacity = Math.abs(val) + // Reduce max opacity to avoid confusion with "selection" or "special token" + const opacity = Math.abs(val) * 0.6 + 0.1 if (val > 0) return `rgba(239, 68, 68, ${opacity})` // Red return `rgba(59, 130, 246, ${opacity})` // Blue } @@ -341,6 +345,7 @@ const getHeatmapColor = (val) => { position: relative; display: flex; align-items: center; + justify-content: center; /* Add centering */ margin-top: 1rem; } diff --git a/docs/.vitepress/theme/components/appendix/vlm-intro/AttentionDemo.vue b/docs/.vitepress/theme/components/appendix/vlm-intro/AttentionDemo.vue index 8b2a3b1..11a7c1f 100644 --- a/docs/.vitepress/theme/components/appendix/vlm-intro/AttentionDemo.vue +++ b/docs/.vitepress/theme/components/appendix/vlm-intro/AttentionDemo.vue @@ -1,57 +1,110 @@ @@ -77,40 +147,68 @@ const toggleState = () => { padding: 20px; background: var(--vp-c-bg-soft); margin: 20px 0; + user-select: none; } .control-panel { margin-bottom: 20px; display: flex; - justify-content: center; + flex-direction: column; + align-items: center; + gap: 15px; } .controls { display: flex; - gap: 20px; + gap: 15px; align-items: center; } -.action-btn { - background: var(--vp-c-brand); - color: white; - border: none; +.step-indicator { + font-family: monospace; + font-weight: bold; + color: var(--vp-c-text-2); +} + +.step-desc { + font-size: 0.9em; + color: var(--vp-c-text-1); + text-align: center; + background: var(--vp-c-bg-mute); padding: 8px 16px; border-radius: 4px; - cursor: pointer; - font-weight: 600; - transition: opacity 0.2s; -} - -.action-btn:hover { - opacity: 0.9; -} - -.info { + min-height: 40px; display: flex; - gap: 15px; + align-items: center; + justify-content: center; + width: 100%; +} + +.action-btn { + background: var(--vp-c-bg-mute); + color: var(--vp-c-text-1); + border: 1px solid var(--vp-c-divider); + padding: 6px 12px; + border-radius: 4px; + cursor: pointer; + transition: all 0.2s; font-size: 0.9em; - color: var(--vp-c-text-2); +} + +.action-btn.primary { + background: var(--vp-c-brand); + color: white; + border-color: var(--vp-c-brand); +} + +.action-btn:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +.action-btn:not(:disabled):hover { + opacity: 0.8; + transform: translateY(-1px); } .visual-area { @@ -118,7 +216,7 @@ const toggleState = () => { flex-direction: column; align-items: center; gap: 20px; - min-height: 300px; + min-height: 350px; } .image-container { @@ -126,31 +224,55 @@ const toggleState = () => { grid-template-columns: repeat(14, 1fr); width: 280px; height: 280px; - gap: 0; - background: #333; + /* Step 0 & 1 Background */ + background-image: radial-gradient(circle at 70% 20%, #FFD700 0%, #FFD700 10%, transparent 10.5%), linear-gradient(to bottom, #87CEEB 0%, #87CEEB 60%, #4CA1AF 60%, #2C3E50 100%); + position: relative; transition: all 0.5s ease; - border: 2px solid var(--vp-c-text-1); + box-shadow: 0 4px 12px rgba(0,0,0,0.1); } +/* Step 2+: Remove container background, let patches show */ .image-container.is-patchified { + background-image: none; + background-color: transparent; gap: 2px; - background: transparent; - border-color: transparent; } .patch { - background-color: hsl(var(--hue), 70%, 60%); display: flex; align-items: center; justify-content: center; font-size: 8px; - color: rgba(0, 0, 0, 0.5); - transition: all 0.5s ease; + color: rgba(255, 255, 255, 0.8); + position: relative; } -.is-patchified .patch { +/* Step 1: Pixelated Overlay Effect */ +.image-container.is-pixelated:not(.is-patchified) .patch { + border: 1px solid rgba(255, 255, 255, 0.1); + /* Use pseudo-element or just opacity logic in JS */ +} + +/* Step 1: Digitization numbers */ +.pixel-val { + font-family: monospace; + font-size: 8px; + color: rgba(0, 0, 0, 0.3); + mix-blend-mode: overlay; +} + +.patch-id { + background: rgba(0, 0, 0, 0.5); + color: white; + padding: 1px 2px; border-radius: 2px; - transform: scale(0.9); + font-size: 7px; +} + +.arrow-down { + font-size: 24px; + color: var(--vp-c-text-2); + animation: bounce 1s infinite; } .sequence-container { @@ -159,7 +281,7 @@ const toggleState = () => { padding: 15px; border-radius: 8px; border: 1px solid var(--vp-c-divider); - animation: fadeIn 0.5s ease; + animation: slideUp 0.5s ease; } .sequence-label { @@ -171,50 +293,48 @@ const toggleState = () => { .token-stream { display: flex; - flex-wrap: wrap; - gap: 2px; + flex-wrap: nowrap; + gap: 1px; + overflow-x: auto; + padding: 10px 5px; /* Space for brackets */ + align-items: center; + position: relative; +} + +/* Add Matrix Brackets */ +.token-stream::before, +.token-stream::after { + content: ''; + display: block; + width: 6px; + height: 36px; /* Match vector height + padding */ + border: 2px solid var(--vp-c-text-3); + flex-shrink: 0; +} + +.token-stream::before { + border-right: none; +} + +.token-stream::after { + border-left: none; } .mini-patch { - width: 10px; - height: 10px; - background-color: hsl(var(--hue), 70%, 60%); + width: 6px; /* Thinner to allow more density */ + height: 32px; /* Taller to represent Vector Dimension D */ border-radius: 1px; -} - -.explanation { - margin-top: 20px; - padding: 12px; - background: var(--vp-c-bg-mute); - border-radius: 6px; - font-size: 0.9em; - line-height: 1.6; -} - -.arrow { - font-size: 24px; - color: var(--vp-c-text-2); - animation: bounce 1s infinite; + flex-shrink: 0; + opacity: 0.9; } @keyframes bounce { - 0%, - 100% { - transform: translateY(0); - } - 50% { - transform: translateY(5px); - } + 0%, 100% { transform: translateY(0); } + 50% { transform: translateY(5px); } } -@keyframes fadeIn { - from { - opacity: 0; - transform: translateY(10px); - } - to { - opacity: 1; - transform: translateY(0); - } +@keyframes slideUp { + from { opacity: 0; transform: translateY(20px); } + to { opacity: 1; transform: translateY(0); } } diff --git a/docs/.vitepress/theme/components/appendix/vlm-intro/ViTOutputDemo.vue b/docs/.vitepress/theme/components/appendix/vlm-intro/ViTOutputDemo.vue index a7cf7d8..110ff10 100644 --- a/docs/.vitepress/theme/components/appendix/vlm-intro/ViTOutputDemo.vue +++ b/docs/.vitepress/theme/components/appendix/vlm-intro/ViTOutputDemo.vue @@ -3,7 +3,7 @@
-
1. Processed Patches (Grid)
+
1. Patch Tokens (Shown as Grid) (Patch Token 网格示意)
-
Flatten & Output
+
Reshape for View: Grid ⇄ Sequence (重排显示:网格⇄序列)
- 2. Feature Vector Sequence (The "Image Sentence") + 2. Output Token Sequence (N×D) (输出序列)
-
-
Step: {{ currentStep + 1 }} / 4
-
- -
+
+
-
- -
-
HTML / CSS
-
-
<div id="app">
-
<h1>Hello</h1>
-
<p>World</p>
-
</div>
-
h1 { color: red; }
+
+
+

{{ steps[currentStep].title }}

+

{{ steps[currentStep].desc }}

+
+ +
+ +
+
积木说明书 (HTML/CSS)
+
+ +
<!DOCTYPE html>
+
<html>
+
<body>
+
<div class="card">
+
<img class="icon" src="castle.png" />
+
<h2 class="title">乐高城堡</h2>
+
<button class="btn">购买</button>
+
</div>
+
</body>
+
</html>
+ +
+ + + +
.card { display: flex; padding: 10px; }
+
.icon { width: 50px; height: 50px; }
+ +
.title { color: red; }
+
.btn { background: blue; }
+
+
+ +
+ + +
+
{{ steps[currentStep].resultTitle }}
+ +
+ + +
+ html +
+ body + + +
+ div.card + + +
+ img.icon + 🏰 +
+ + +
+ h2.title + 乐高城堡 +
+ + +
+ button.btn + 购买 +
+
+ +
+
+
+ + +
+
🖌️ 正在上色 (Style)...
+
+ +
+
📏 正在排版 (Layout)...
+
+ +
+
✨ 绘制完成 (Paint)!
+
+
- - -
- - -
-
{{ steps[currentStep].title }}
- - - -
-
Document
-
-
-
-
html
-
-
-
-
body
-
-
div#app
-
-
h1
-
p
-
-
-
- - -
-
RenderBlock (div)
-
-
- RenderText (h1)
color: red -
-
RenderText (p)
-
-
- - -
-
- 100% x 100% -
- div: 100% x auto -
h1: 100% x 32px (x:0, y:0)
-
p: 100% x 16px (x:0, y:32)
-
-
-
- - -
-
-
-

Hello

-

World

-
-
-
Layer 1: Background
-
Layer 2: Text
-
-
-
-
-
-
- -
@@ -104,204 +111,340 @@ diff --git a/docs/.vitepress/theme/components/appendix/web-basics/ComponentReusabilityDemo.vue b/docs/.vitepress/theme/components/appendix/web-basics/ComponentReusabilityDemo.vue new file mode 100644 index 0000000..24c3397 --- /dev/null +++ b/docs/.vitepress/theme/components/appendix/web-basics/ComponentReusabilityDemo.vue @@ -0,0 +1,260 @@ + + + + + \ No newline at end of file diff --git a/docs/.vitepress/theme/components/appendix/web-basics/CssCommonProperties.vue b/docs/.vitepress/theme/components/appendix/web-basics/CssCommonProperties.vue new file mode 100644 index 0000000..b760800 --- /dev/null +++ b/docs/.vitepress/theme/components/appendix/web-basics/CssCommonProperties.vue @@ -0,0 +1,237 @@ + + + + + diff --git a/docs/.vitepress/theme/components/appendix/web-basics/CssLayoutDemo.vue b/docs/.vitepress/theme/components/appendix/web-basics/CssLayoutDemo.vue new file mode 100644 index 0000000..54680cb --- /dev/null +++ b/docs/.vitepress/theme/components/appendix/web-basics/CssLayoutDemo.vue @@ -0,0 +1,295 @@ + + + + + + diff --git a/docs/.vitepress/theme/components/appendix/web-basics/CssPlaygroundDemo.vue b/docs/.vitepress/theme/components/appendix/web-basics/CssPlaygroundDemo.vue new file mode 100644 index 0000000..03c4917 --- /dev/null +++ b/docs/.vitepress/theme/components/appendix/web-basics/CssPlaygroundDemo.vue @@ -0,0 +1,193 @@ + + + + + \ No newline at end of file diff --git a/docs/.vitepress/theme/components/appendix/web-basics/CssSelectorsDemo.vue b/docs/.vitepress/theme/components/appendix/web-basics/CssSelectorsDemo.vue new file mode 100644 index 0000000..3f7ba6b --- /dev/null +++ b/docs/.vitepress/theme/components/appendix/web-basics/CssSelectorsDemo.vue @@ -0,0 +1,253 @@ + + + + + diff --git a/docs/.vitepress/theme/components/appendix/web-basics/DnsLookupDemo.vue b/docs/.vitepress/theme/components/appendix/web-basics/DnsLookupDemo.vue index 040af58..86c5c8d 100644 --- a/docs/.vitepress/theme/components/appendix/web-basics/DnsLookupDemo.vue +++ b/docs/.vitepress/theme/components/appendix/web-basics/DnsLookupDemo.vue @@ -1,289 +1,167 @@ diff --git a/docs/.vitepress/theme/components/appendix/web-basics/FrontendEvolutionDemo.vue b/docs/.vitepress/theme/components/appendix/web-basics/FrontendEvolutionDemo.vue new file mode 100644 index 0000000..f0504a9 --- /dev/null +++ b/docs/.vitepress/theme/components/appendix/web-basics/FrontendEvolutionDemo.vue @@ -0,0 +1,668 @@ + + + + + \ No newline at end of file diff --git a/docs/.vitepress/theme/components/appendix/web-basics/HttpExchangeDemo.vue b/docs/.vitepress/theme/components/appendix/web-basics/HttpExchangeDemo.vue index 1dff1d6..e587f57 100644 --- a/docs/.vitepress/theme/components/appendix/web-basics/HttpExchangeDemo.vue +++ b/docs/.vitepress/theme/components/appendix/web-basics/HttpExchangeDemo.vue @@ -1,82 +1,101 @@