模板继承中 block 命名冲突需通过“区域-职责”命名规范、blocks.json 全局校验及 data-block 属性定位排查;SSR ID 冲突须注入唯一前缀并 hydrate 时清洗;template 卡顿源于非法 HTML 结构、错误克隆及脚本未绑定;爬虫提取失败需验证原始 HTML 结构而非渲染后 DOM。
art-template 或类似引擎里,block 覆盖不是报错,而是静默失效——上层定义的 block 'header' 被下层同名 block 直接替换,中间层插入点彻底消失。这种问题在三层以上继承(layout → inner → page)里极难肉眼发现。
实操建议:
立即学习“前端免费学习笔记(深入)”;
block 名必须按 '区域-职责' 命名,比如 'nav-main'、'content-hero'、'sidebar-recommend',禁用泛义名如 'content' 或 'body'
blocks.json,列出全部已注册 block 名及其所属模板路径,构建脚本启动时校验重复document.querySelectorAll('[data-block]')(前提是模板编译时注入 data-block 属性),快速定位未被消费的 block 插入点多个服务拼装 HTML 时,id="loading"、id="modal-root" 这类通用 ID 几乎必然重复。浏览器只认第一个,后续 JS 查询或事件绑定全错位,hydration 后页面功能半瘫。
实操建议:
立即学习“前端免费学习笔记(深入)”;
id="{{.FragmentID}}-loading",FragmentID 可由 trace ID 或哈希生成document.querySelectorAll('[id^="frag-"]').forEach(el => el.id = el.id.replace(/^frag-d+-/, '')) 清洗 ID,再绑定逻辑<template> 加载却卡顿的根源<template> 本身不执行、不渲染,但很多人误以为“放进去就安全”。实际卡顿常来自三处:fetch 返回含 <html> 或 <body> 的完整 HTML;克隆后直接 appendChild 导致样式重算;片段内含未剥离的 <script> 标签。
实操建议:
立即学习“前端免费学习笔记(深入)”;
<html>、<body>、<head>,验证方式:用 new DOMParser().parseFromString(html, 'text/html').body.children.length 检查是否只有预期节点document.importNode(template.content, true) 克隆,而非 innerHTML 赋值——后者触发完整解析流水线<template> 不保留任何 JS 行为,也不执行内联脚本结构混淆(如拆分价格、套娃 <picture>、把文本塞进 <meta>)会让 BeautifulSoup 或 XPath 提取器返回空,但浏览器渲染一切正常。问题不在显示,而在静态解析路径断裂。
实操建议:
立即学习“前端免费学习笔记(深入)”;
curl -s URL 抓原始 HTML,再用 grep -o '<div class="price">[^<]*</div>' 验证关键字段是否存在——别依赖 DevTools 的 Elements 面板,它展示的是修正后的 DOMdocument.querySelectorAll('main') 是否唯一且直属于 body,结构混乱常伴随 main 错位,导致爬虫根本找不到主体内容起点