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> 里同步加载,解析被反复打断。
  • 依赖脚本执行顺序却不加约束,上线后偶发报错。
  • 正文只在脚本运行后出现,还指望爬虫一定执行到位。
  • 脚本包过大,解析和执行时间把首屏拖到几秒。

附录

参见

参考资料

官方(境外)

  1. 《解析》,MDN Web 文档,2025-10-10 更新。
  2. 《Blazingly fast parsing, part 2: lazy parsing》,V8,2019-04-15。
  3. 《渲染页面:浏览器的工作原理》,MDN Web 文档,2025-11-10 更新。
  4. 《了解 JavaScript SEO 基础知识》,Google 搜索中心,2026-03-05 更新。

官方(国内)

  1. 《平台工具使用手册(抓取诊断)》,百度搜索资源平台,2020-08-14 更新。

外部链接

无。