SEO 百科
JavaScript 解析
本页目录
JavaScript 解析
JavaScript 解析在脚本执行之前进行,引擎先把源码转成可执行形式,脚本才可能运行[1]。它和爬虫的关系藏在渲染队列后面:脚本不执行,脚本生成的内容就不存在。看这一篇要抓住两件事,解析发生在脚本执行之前,以及浏览器会把暂时用不到的代码留到调用时再解析。
从源码到可执行代码
解析是执行的前置步骤。MDN 的说明是,JavaScript 会被下载、解析并执行[1]。
解析把源码转成中间表示。V8 的文档写明,解析是把源代码转成中间表示,交给编译器处理的一步[2]。
浏览器里这一步发生在主线程。MDN 说明,脚本被解析成抽象语法树,有的引擎再把它编译成字节码,这个过程叫 JavaScript 编译[3]。
主线程被占住时,页面无法响应。脚本在解析和执行期间,滚动、点击都要排队[3]。
延迟解析
浏览器不会把所有函数都完整解析。V8 的文档解释,不是所有送到浏览器的代码都会在启动时用到,因此主流浏览器都实现了延迟解析[2]。
遇到函数时会先做预解析。预解析器只做最基本的检查,确认函数语法有效,并记录外层函数编译所需的信息[2]。
函数真正被调用时才完整解析。延迟解析省下了启动时的处理器时间和内存,代码量越大,省下的越多[2]。
这套机制有代价。被推迟解析的代码如果启动时就要用,等于多花了一次预解析的开销[2]。
解析与执行的时间点
脚本按类型影响解析时机。<script> 不带 async 或 defer 时,它会阻塞 HTML 解析[3]。
异步脚本在下载期间不阻塞解析。async 与 defer 让脚本在下载期间不挡住解析,加载完成后再执行[3]。
执行顺序因此会变。异步脚本的执行时机取决于下载完成的先后,依赖其他脚本的代码不能假设顺序。
内联脚本另有特点。它在被解析到时立刻执行,而且会暂停后面的 HTML 解析[3]。
对抓取与收录的影响
引擎要执行脚本,才会看到脚本生成的内容。Google 说明,网页会进入渲染队列,由无头 Chromium 执行 JavaScript[4]。
队列有等待。Google 的文档写明,网页在队列里可能停留几秒,也可能更久[4]。
脚本自身也会被解析和缓存。Google 说明抓取工具会主动缓存资源,并可能忽略缓存标头,因此旧脚本可能被继续使用[4]。
爬虫侧的所见可以核对。百度提供抓取诊断,展示 Baiduspider 拿到的内容,用来确认脚本生成的信息有没有被取到[5]。
常见误用
- 把所有脚本都堆在
<head>里同步加载,解析被反复打断。 - 依赖脚本执行顺序却不加约束,上线后偶发报错。
- 正文只在脚本运行后出现,还指望爬虫一定执行到位。
- 脚本包过大,解析和执行时间把首屏拖到几秒。
附录
参见
参考资料
官方(境外)
- 《解析》,MDN Web 文档,2025-10-10 更新。
- 《Blazingly fast parsing, part 2: lazy parsing》,V8,2019-04-15。
- 《渲染页面:浏览器的工作原理》,MDN Web 文档,2025-11-10 更新。
- 《了解 JavaScript SEO 基础知识》,Google 搜索中心,2026-03-05 更新。
官方(国内)
- 《平台工具使用手册(抓取诊断)》,百度搜索资源平台,2020-08-14 更新。
外部链接
无。