直接答案:36 个文章页共有 1,698 个内联 SVG 标签,但归一化后只有 55 种不同的 SVG 标记。SVG 总字节 1,705,395,每种标记只存一次则只需 201,993 字节——1,503,402 字节(88.2%)是重复。按页看,81.7% 的 SVG 标签在各自页面内就是重复的。
重复高度集中:出现最多的 4 种标记合计 1,439 次,占全部标签的 84.7%、SVG 字节的 67.9%。但这不是所有页面都一样:E23 的 SVG 多是大块不同插图,字节重复只有 19.7%。
方法:把 SVG 当标记指纹
复用第 83 期缓存的 36 个文章页(10 站,2026-11-03 抓取)。先移除 script、style 与注释,提取所有 <svg>…</svg>;把连续空白压缩为一个空格、去掉相邻标签之间的空白,保留全部属性与结构;对归一化后的 UTF-8 字节取 SHA-1,同一指纹即同一段标记。
| 项 | 判定 | 边界 |
|---|---|---|
| SVG 标签 | 页面中 <svg> 整块 | 不含脚本字符串里的 SVG |
| 不同标记 | 归一化后 SHA-1 不同 | 换 class/id 也算不同 |
| 重复字节 | 总 SVG 字节 − 每种标记只计一次的字节 | 只做空白归一化,不改路径 |
| 页内重复 | 同一页内标签数 − 该页不同标记数 | 跨页重复另算 |
结果:1,698 个标签,55 种标记
| 口径 | 数值 | 说明 |
|---|---|---|
| 内联 SVG 标签 | 1,698 | 30/36 页至少一个 |
| 不同标记(全局) | 55 | 每种只计一次 |
| SVG 总字节 | 1,705,395 | UTF-8 |
| 去重后字节 | 201,993 | 每种标记只存一次 |
| 重复字节 | 1,503,402(88.2%) | 总字节 − 去重字节 |
| 页内重复标签 | 81.7% | 1,698 个标签中 1,387 个 |
| 页内重复字节 | 65.6% | 按页汇总 |
重复集中在少数图形
| 标记 | 出现次数 | 单块字节 | 合计字节 | 占标签 | 占 SVG 字节 |
|---|---|---|---|---|---|
| S01 | 624 | 873 | 544,752 | 36.7% | 31.9% |
| S02 | 580 | 743 | 430,940 | 34.2% | 25.3% |
| S03 | 145 | 718 | 104,110 | 8.5% | 6.1% |
| S04 | 90 | 864 | 77,760 | 5.3% | 4.6% |
| S05 | 25 | 1,025 | 25,625 | 1.5% | 1.5% |
| S06 | 25 | 820 | 20,500 | 1.5% | 1.2% |
| S07 | 20 | 1,469 | 29,380 | 1.2% | 1.7% |
| S08 | 20 | 816 | 16,320 | 1.2% | 1.0% |
前 10 种标记合计 1,557 次,占标签的 91.7%、SVG 字节的 74.3%。这说明“内联 SVG 很大”主要不是因为有大量不同插图,而是同几段图标/装饰标记在页面和站点之间反复出现。
按站点:模板图标与大块插图是两种形态
| 站点 | 页数 | SVG 标签 | 不同标记(页内合计) | 页内标签重复 | 字节重复 | SVG 字节 |
|---|---|---|---|---|---|---|
| E03 | 5 | 355 | 55 | 84.5% | 82.3% | 311,975 |
| E06 | 5 | 390 | 25 | 93.6% | 94.1% | 333,520 |
| E09 | 5 | 165 | 50 | 69.7% | 67.5% | 125,975 |
| E14 | 5 | 155 | 40 | 74.2% | 74.5% | 114,670 |
| E22 | 5 | 425 | 45 | 89.4% | 83.6% | 338,635 |
| E23 | 5 | 208 | 96 | 53.8% | 19.7% | 480,620 |
| E16 / E19 / E26 / E28 | 3 / 1 / 1 / 1 | 0 | 0 | — | — | 0 |
E06、E22、E03 是典型的“模板图标反复出现”:E06 的 390 个标签只有 25 种页内标记,字节重复 94.1%。E23 相反:208 个标签、96 种页内标记,字节重复只有 19.7%,它的 SVG 更可能是大块不同插图。把 36 页合成一个 88.2% 会掩盖这两种形态。
重复不等于无用
同一段 SVG 出现多次,可能是导航图标、按钮箭头、装饰线,也可能是模板在每个页面复用的图形。本期只证明“标记重复”,不判断它是否必要,也不建议直接删除。可复核的下一步是:把高频标记与视觉位置对上,再决定哪些适合做 sprite 或外部文件。
对验收的启示
- 同时报“标签数”和“不同标记数”。 只看总字节会以为需要压缩图片;先看重复度,可能只需要复用。
- 按页看重复。 站点合计会掩盖 E23 这类大块不同插图;验收应抽最大页和高重复页。
- 重复图形适合外置。 高频且体积小的标记可考虑 sprite/外部 SVG;大块不同插图另议。
- 归一化口径要写清。 保留属性、只压空白是保守口径;换 class/id 会拆成不同标记。
- 不把重复率当质量分。 它只回答“标记是否重复”,不回答设计、可访问性或性能。
局限
- 标记相同 ≠ 视觉相同: 不同 CSS 可能让同一标记呈现不同效果;不同标记也可能看起来一样。
- 保守匹配: 保留全部属性,只做空白归一化;换 class/id/路径写法不会合并。
- 只算静态 HTML: 不含 JS 生成、shadow DOM 或外部 sprite 引用的图形。
- 缓存快照: 2026-11-03 抓取,未复测改版。
- pilot: 10 站 36 页,不外推行业;站点匿名。
数据与复算
页面级:equipment-article-inline-svg-duplication-2026.csv(36 行 × 9 列:标签数、不同标记、重复标签、SVG/去重/重复字节与重复占比)。标记级:equipment-article-svg-shapes-2026.csv(55 行 × 8 列:匿名 S01–S55、出现次数、单块/合计字节、首次出现页、占标签/字节比例)。仓库内为 docs/research/2026-11-article-inline-svg-duplication.csv 与 2026-11-article-svg-shapes.csv。
探测:scripts/article_svg_duplication_probe.py;单元测试 scripts/test_article_svg_duplication_probe.py(无网络,9 项:空白归一化、属性差异、脚本/注释排除、重复计数、字节与空页)。运行:
python -m unittest scripts.test_article_svg_duplication_probe
配套:文章页 HTML 体积组成 pilot、文章页 HTML 压缩 pilot、文章页图片交付 pilot。
数据来源与口径
- 页面缓存:第 83 期 10 站 36 页(2026-11-03 08:40–08:41)。
- SVG 提取:移除 script/style/注释后匹配
<svg>…</svg>。 - 指纹:空白归一化后 SHA-1;字节 UTF-8;统计时间 2026-11-06,零网络。