node.js - nodejs Puppeteer 缓存

标签 node.js puppeteer

我正在尝试使用本地缓存运行 headless Chrome ,以便我之前访问的网页加载速度更快。
我正在使用 userDataDir: "C:\Users\user\AppData\Local\Chromium\User Data"作为本地缓存,并使用 console.log(response.fromCache()); 检查它是否加载了缓存。

const puppeteer = require('puppeteer');

async function test() {
    const browser = await puppeteer.launch({
        headless: true, 
        args: ['--no-sandbox'], 
        userDataDir: "C:\\Users\\user\\AppData\\Local\\Chromium\\User Data"
    });

    const page = await browser.newPage();
    const response = await page.goto('https://example.com');

    console.log(response.fromCache());

    await browser.close();
}
test();

第一次运行:console.log,缓存为空,显示为 false。
第二次运行:console.log 显示为真。

直到这里一切都按预期进行,但后来我将 url 更改为 ("https://google.com ")。
第一次运行:console.log,缓存为空,显示为 false。
第二次运行:console.log 显示 false。

我用多个 url 尝试了这个,直到现在只有 ("https://example.com ") 一直在使用缓存浏览器。

我也尝试使用 headless: false 并且 console.log 在第二次尝试时继续说 false 但我注意到第二次尝试它实际上是在使用缓存,因为它立即加载。

任何想法为什么?或者我做错了什么。谢谢。

最佳答案

Puppeteer 可能只是遵循此处的 HTTP 缓存规则。
https://example.com ,截至 2020 年 7 月 23 日,返回以下缓存 header :

Cache-Control
    max-age=604800
Etag
    "3147526947+gzip"
Expires
    Thu, 30 Jul 2020 13:47:37 GMT
Last-Modified
    Thu, 17 Oct 2019 07:18:26 GMT
这表示网页可以缓存一段时间。
同时,https://google.com返回:
cache-control
    private, max-age=0
expires
    -1
这表示不应缓存网页。
网站不缓存其顶级 HTML 页面,并且仅对静态 Assets (如图像、CSS 和 JS 包)使用缓存是很常见的。谷歌的网站可能就是这种情况,这就是为什么第二次加载仍然很快。

关于node.js - nodejs Puppeteer 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60029454/

相关文章:

node.js - Heroku 上的 Puppeteer pdf 空白

node.js - Node Express 未提供 Gzip 文件

networking - 是否有现成的解决方案可以根据浏览器分辨率发送部分隔行扫描 JPEG?

javascript - 如何使用 Puppeteer 从输入中删除现有文本?

javascript - 在哪里调用 for 循环来迭代值数组

javascript - 错误评估失败-尝试将对象传递到伪造函数中

javascript - 是否可以在创建屏幕截图之前使用 Puppeteer 修改 DOM 中的元素?

javascript - Mongoose - 是否可以修改键的值以匹配 find() 查询的 where 条件?

node.js - 使用 2 个字段的 Mongoose 自定义验证

node.js - TypeScript - 无法在其他类型根目录中的类型覆盖中导入自身,TS7016