运行 chrome 来自命令行并推断页面何时完成加载

Running chrome from the command line and infering when a page finished loading

我运行 chromium如下,让它输出生成的汇编代码,加载指定的.html:

./chrome --js-flags="--print-code" ~/example.html

有没有办法(命令行参数?)判断页面是否已经加载完毕,即所有的汇编代码都已经输出了?理想情况下,通过标准输出传递此信息。

谢谢!

简而言之:没有。

一个原因是 "the page has finished loading" 语句非常模糊,实际上根本不是一个定义。许多现代网站分阶段加载:首先下载并显示一些服务器呈现的静态 HTML,然后异步加载动态内容,通常再次分几个步骤(例如,首先是主要内容,闲置时是广告)。如果有几个<iframe>怎么办?如果页面上有一个计时器在 X 秒后加载更多内容(例如,图片幻灯片、通知、新广告)怎么办?如果用户交互(点击、滚动等)触发更多负载怎么办?对于所有这些情况,浏览器无法知道 "this page has finished",许多页面永远不会 "finished".

另一个问题是语句 "the page has finished loading" 和 "all assembly code has been generated" 是非常不同的东西。事实上,V8 通常不会在初始加载仍在进行时尝试编译任何优化代码,因为这会导致速度变慢和卡顿,而不会带来太多好处。相反,优化代码是在稍后编译的,因为 JavaScript 函数被观察到 运行 很多。由于优化取决于 JavaScript 代码在做什么,因此通常无法预测代码生成是否完成。我见过无限滚动的网站,其中每个滚动事件都会导致更多代码的优化编译。

也就是说,对于特定场景,您可以获得一些近似值:如果您可以控制 example.html,则可以在您选择的时间发出 console.log("MY_MARKER")。如果你然后 运行 Chrome 和 --enable-logging=stderr,你可以在 stderr.[=16= 上找到 console.log() 语句(以及一堆其他东西) ]