用playwright写网页性能监测时,如何判断一个页面是否已完全载入? 由松到严有多种标准

39 阅读1分钟

在 Playwright 里,“完全载入”没有唯一标准,要看业务到底关心什么。
把常见判定策略从“最宽松”到“最严格”列出来,按场景挑一个即可:

  1. 只要 HTML 下载下来(最快)

    page.goto(url, wait_until='commit')
    
  2. DOM 树解析完,不等待外链资源(DOM Ready)

    page.goto(url, wait_until='domcontentloaded')
    
  3. 默认级别:DOM + 所有同步资源(图片/JS/CSS)下载并执行完

    page.goto(url, wait_until='load')   # 默认就是这个
    
  4. 网络空闲:3 个关键资源以内、500 ms 内无新请求(适合单页应用)

    page.goto(url, wait_until='networkidle')
    

    可选更严格 networkidle=500(500 ms 无请求才算完)。

  5. 自定义“业务 Ready”——等关键节点或数据

    page.goto(url, wait_until='domcontentloaded')
    page.wait_for_selector('#app .data-list', state='attached')   # 关键列表出现
    page.wait_for_load_state('networkidle')                      # 再确保接口收完
    
  6. 前端自己抛事件(最准)
    让开发在首屏渲染最后主动 window.dispatchEvent(new Event('app-ready'))
    然后脚本里:

    page.goto(url)
    page.wait_for_function('window["app-ready"] === true')  # 或监听事件
    

一句话总结:

  • 传统多页站点 → wait_until='load' 就够;
  • 单页/大量异步 → 先 domcontentloadednetworkidlewait_for_selector
  • 想和产品体验对齐 → 让前端埋“app-ready”事件,脚本里等它即可。