前端教程【免费下载链接】preguntas-entrevista-reactPreguntas típicas sobre React para entrevistas de trabajo ⚛️项目地址https://gitcode.com/gh_mirrors/pr/preguntas-entrevista-react点击查看免费下载本文基于 preguntas-entrevista-react 仓库内.agents/skills/vercel-react-best-practices技能库中的 rendering-script-defer-async.md 规则展开。该规则是 Vercel React 最佳实践中渲染性能Rendering Performance章节Section 6下的一条 HIGH 影响级别规则面向使用 React 与 Next.js 的开发者与 AI Agent核心解决一个常见但代价高昂的问题裸script标签如何阻塞 HTML 解析从而推迟首屏内容绘制FCP与可交互时间TTI。读完本文你将掌握 defer 与 async 的语义差异与选择标准、如何写出非阻塞的脚本引入代码以及 Next.js 中next/script的strategy替代方案并理解本仓库实际工程中Astro React 混合架构对哪些脚本必须同步、哪些可以延后的取舍逻辑。为什么无属性脚本标签会导致渲染阻塞问题的根源规则文件 rendering-script-defer-async.md 开篇即点明不带defer或async的脚本标签会在脚本下载和执行期间阻塞 HTML 解析。这是浏览器 HTML 解析器的一个经典行为当解析器在head或body中遇到一个没有异步属性的经典script src...时会暂停后续 DOM 的构建先同步下载并执行该脚本然后才继续解析剩余 HTML。这一停顿带来两个直接后果延迟 First Contentful PaintFCPHTML 解析停滞意味着首屏可绘制内容迟迟无法提交给渲染管线用户看到第一帧有意义内容的时间被推迟延迟 Time to InteractiveTTI脚本执行本身占用主线程同时阻塞的 DOM 构建也让交互处理器无法尽早挂载就绪。在本仓库的规则体系中这条规则被标记为Impact: HIGHimpactDescription 明确写着eliminates render-blocking。与_sections.md中 Section 6 的定位一致——Optimizing the rendering process reduces the work the browser needs to do优化渲染过程减少浏览器需要做的工作。值得对比的是同一技能库中CRITICAL级别规则如消除瀑布流、减小包体积带来的收益量级更大但脚本阻塞是成本极低、收益立竿见影的高频优化点几乎任何页面都适用。defer 与 async两种并行下载两种执行语义规则文件给出了二者最关键的区别这里结合浏览器规范展开说明属性下载时机执行时机执行顺序保证defer与 HTML 解析并行HTML 解析完成后执行在DOMContentLoaded触发前✅ 按文档中出现顺序依次执行async与 HTML 解析并行下载完成后立即执行不等待解析结束❌ 无顺序保证谁先下载完谁先执行无属性阻塞式同步下载下载并解析 HTML 的同一刻执行按顺序但阻塞渲染由此推导出规则给出的选择标准用defer脚本依赖 DOM需要操作文档结构或依赖其他脚本有执行顺序要求。因为defer保证在 HTML 解析完成后、按声明顺序执行DOM 必然已就绪脚本间的依赖关系也能得到满足用async脚本彼此独立、不依赖 DOM、不依赖页面内容典型如第三方统计/分析脚本analytics。这类脚本谁先加载完谁先跑完全可接受且不与页面主流程竞争执行时机。需要特别强调的是defer只对带src的外部脚本有效对内联脚本无意义而async即使下载完成也不会阻塞解析但执行瞬间仍会占用主线程。理解这一点才能在设计脚本加载策略时做出正确判断。反例与正例从阻塞到非阻塞的改造规则文件给出了可直接对照的两段代码。先看错误写法阻塞渲染export default function Document() { return ( html head script srchttps://example.com/analytics.js / script src/scripts/utils.js / /head body{/* content */}/body /html ) }这里的两个script都没有defer或async浏览器会依次同步下载并执行它们head之后的 HTML 解析全程被挂起——哪怕两个脚本体积很小也会在网络往返上额外增加一段可见的首屏延迟。再看正确写法非阻塞export default function Document() { return ( html head {/* 独立脚本 - 用 async */} script srchttps://example.com/analytics.js async / {/* 依赖 DOM 的脚本 - 用 defer */} script src/scripts/utils.js defer / /head body{/* content */}/body /html ) }改造逻辑非常清晰analytics.js属于独立的第三方埋点脚本使用async让它在下载完成后自行执行不干扰页面解析utils.js大概率需要操作 DOM如增强交互、初始化组件使用defer保证它在解析完成后、按声明顺序执行。两条脚本的下载都与 HTML 解析并行进行首屏路径上不再有任何同步脚本。Next.js 场景优先使用 next/script 的 strategy 属性规则文件在代码示例之后补充了一条重要 Note在 Next.js 中优先使用next/script组件配合strategy属性而不是裸写script标签。原因在于next/script把脚本加载决策提升为框架级能力自动处理优先级、去重、位置与加载时机import Script from next/script export default function Page() { return ( Script srchttps://example.com/analytics.js strategyafterInteractive / Script src/scripts/utils.js strategybeforeInteractive / / ) }strategy的可选值与原生属性的对应关系本仓库.agents/skills/next-best-practices/scripts.md有更完整的展开beforeInteractive在页面可交互之前加载并执行内部实现类似defer的高优先级变体仅用于关键脚本且只能放在根布局或_document中afterInteractive默认页面变为可交互后再加载适合埋点、分析等非关键脚本对应用async处理独立脚本的思路lazyOnload浏览器空闲时段加载适合低优先级组件脚本worker实验性在 Web Worker 中执行彻底移出主线程。这与原生defer/async的取舍一一对应afterInteractive与lazyOnload承担了独立、非关键脚本的角色原生async的职责beforeInteractive则承担页面交互必需、但必须保证顺序的角色原生defer的职责并进一步提前。规则的底层目标始终一致让下载并行化、执行错峰化避免任何脚本阻塞首屏渲染。规则库的工程化组织一条规则如何进入最佳实践体系这条规则并非孤立文档它只是 Vercel React Best Practices 技能库 40 条规则之一理解它所在的组织结构有助于你在仓库中定位同类规则、评估优化优先级规则文件命名即分类文件以rendering-为前缀rendering-script-defer-async.md按 _sections.md 的约定归入 Section 6 Rendering Performance影响等级 MEDIUM描述为优化渲染过程以减少浏览器工作量其余前缀如async-消除瀑布流CRITICAL、bundle-包体积优化CRITICAL、server-、client-、rerender-、js-、advanced-各自对应不同章节统一模板保证一致性_template.md 规定了每条规则的 frontmattertitle、impact、impactDescription、tags与反例/正例 解释的正文结构这正是本规则可读性高的原因frontmatter 中的tags: rendering, script, defer, async, performance让 Agent 与搜索引擎都能快速索引编译产物 AGENTS.md规则通过pnpm build汇总进 AGENTS.md在编译版中本条规则编号为6.8 Use defer or async on Script Tags见 AGENTS.md 目录与正文第 2546-2591 行按标题字母序自动排序ID 由构建脚本生成影响等级体系技能库 README 定义了从 CRITICAL 到 LOW 的六级影响评估HIGH 意味着显著的性能提升。在 AGENTS.md 的抽象说明中这套体系用于指导自动化重构与代码生成即 AI Agent 在维护、生成或重构 React/Next.js 代码库时会优先遵循 HIGH/CRITICAL 级别的规则。从仓库实战看脚本加载决策哪些脚本可以特殊豁免任何规则都有边界。本仓库preguntas-entrevista-react一个 Astro React 混合架构的静态站点的实际代码展示了非阻塞原则的合理例外——关键路径上的极少量内联脚本需要同步执行这恰恰是为了避免更糟的阻塞形态。在 BaseLayout.astro 中主题初始化脚本被刻意写成script is:inline放在head的第一个可执行位置script is:inline ;(function () { var root document.documentElement // 读取 localStorage / matchMedia同步切换 dark/light 主题类名 })() /script文件注释解释了原因Theme bootstrap MUST be the first executable content inhead。Si se difiere, se ve un flash en modo claro antes de aplicar el tema.主题引导必须是head中第一个可执行内容。若被延后会在应用主题前出现亮色模式的闪烁。这类必须在首帧前同步生效、且体积极小的引导脚本是defer/async规则的刻意例外——对它们而言延迟执行的代价主题闪烁、布局闪变远大于解析阻塞的代价因此选择内联同步。同时布局文件用visibility: hidden兜底若脚本被延迟未定主题的页面不会以错误配色闪现BaseLayout.astro。与之形成对照的是同文件中的非阻塞资源预加载实践字体文件使用link relpreload asfont提前并行下载BaseLayout.astro图书封面图片用relpreload asimage配合fetchprioritylow提前发起请求且不与 LCP 资源竞争BaseLayout.astro。这些做法与脚本的 defer/async 异曲同工在解析早期用非阻塞手段预热关键资源把网络往返藏进解析时间里。更宏观地看astro.config.mjs 中inlineStylesheets: always的注释也讲述了同一套性能哲学将 CSS 内联进 HTML 以避免浏览器解析完 head 才发现样式表链接这一额外的串行 round-trip从而保证首屏立即可绘制。可见本仓库对渲染阻塞问题脚本、样式、字体、图片是系统性地处理而非单点修补。决策速查与边界提醒将规则内化为可执行的判断记住这张速查表场景正确选择理由独立第三方脚本分析、埋点、AB 测试async不依赖 DOM 与其他脚本顺序无要求依赖 DOM / 依赖其他脚本的工具库defer保证解析完成后按序执行页面前置交互的关键脚本Next.jsstrategybeforeInteractive需在交互前就绪且只在根布局使用非关键/低优先级脚本Next.jsstrategyafterInteractive或lazyOnload完全错开首屏主线程首帧前必须同步生效的引导逻辑内联 刻意同步例外延迟执行的代价高于阻塞代价最后提醒三条容易踩的边界defer不作用于内联脚本只有src外部脚本才会被延迟执行需要内联但可延后的逻辑应放入独立.js文件再以defer引用async无顺序保证若脚本间存在隐式依赖如先埋点后上报务必使用defer而非async否则可能因顺序颠倒引入难以排查的线上问题规则适用前提本条规则针对浏览器端的第三方/工具脚本加载。对于框架内置的打包产物如 Astro 构建出的模块脚本、React 运行时 chunk应由框架自身的加载策略管理不要手动在页面里再加一层script src否则反而破坏框架的代码分割与优先级调度。结合本仓库的技能库组织方式你可以把这条规则与其他渲染性能规则如 rendering-resource-hints.md 中 React DOM 的preload/preconnectAPI组合使用前者解决脚本何时执行后者解决关键资源何时开始下载二者协同才能在首屏路径上做到既快又稳。赞分享前端教程【免费下载链接】preguntas-entrevista-reactPreguntas típicas sobre React para entrevistas de trabajo ⚛️项目地址https://gitcode.com/gh_mirrors/pr/preguntas-entrevista-react点击查看免费下载相关推荐Cherry Studio React 渲染性能实践用 defer/async 消除 Script 标签的渲染阻塞Cherry Studio React 渲染性能实践用 defer/async 消除 Script 标签的渲染阻塞 本文讲解 Vercel React 最佳实人工智能大模型AI 应用交互助手本地部署AI4Animation 引用完整指南5 分钟写对角色动画项目的论文引用AI4Animation 引用完整指南5 分钟写对角色动画项目的论文引用 如果你在论文里用了 AI4Animation——这个用深度学习做角色动画控制的开源项人工智能深度学习图形学游戏开发Polar Web 前端 Script 加载性能指南用 defer/async 与 next/script 消除渲染阻塞Polar Web 前端 Script 加载性能指南用 defer/async 与 next/script 消除渲染阻塞 Polar开源结算平台的 Web后端前端金融科技上一篇pyzk终极指南10个技巧轻松管理ZKTeco考勤机下一篇终极Xshell配色指南250主题让你的终端颜值爆表创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考