let networkIdleTimeout; // 用于设置500ms的定时器 let inflightRequests = 0; // 用于记录当前的网络连接数 // 当页面发起一个网络请求时,执行以下的函数 function onRequest() { // 如果之前没有网络连接,就取消定时器 if (inflightRequests === 0) { clearTimeout(networkIdleTimeout); } // 网络连接数加一 inflightRequests++; } // 当页面收到一个网络响应时,执行以下的函数 function onResponse() { // 网络连接数减一 inflightRequests--; // 如果当前没有网络连接,就设置一个500ms的定时器 if (inflightRequests === 0) { networkIdleTimeout = setTimeout(() => { // 定时器到期时,认为导航完成 resolveNavigation(); }, 500); } }
Puppeteer networkidle0 的实现原理
12 min read