node.js - nodejs Puppeteer 缓存
问题描述
我正在尝试使用本地缓存运行无头铬,因此我之前访问过的网页加载速度更快。
我正在使用 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 说的是真的。
直到这里一切都如预期的那样,但后来我将网址更改为(“ https://google.com ”)。
第一次运行:console.log,缓存为空,显示为 false。
第二次运行:console.log 说假。
我用多个 url 尝试了这个,直到现在只有(“ https://example.com ”)一直在使用缓存的浏览器。
我也尝试使用 headless: false 并且 console.log 在第二次尝试时继续说 false 但我注意到第二次尝试它实际上是在使用缓存,因为它会立即加载。
任何想法为什么?还是我做错了什么。谢谢。
解决方案
Puppeteer 很可能只是遵循这里的 HTTP 缓存规则。
https://example.com,截至 2020 年 7 月 23 日,返回以下缓存标头:
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 页面是相当常见的,并且只对静态资产(如图像、CSS 和 JS 包)使用缓存。Google 的网站可能就是这种情况,这就是为什么第二次加载仍然很快的原因。
推荐阅读
- openxml - AbstractNum 和 NumberingInstance 的用途
- python - 将重复值变为唯一值
- reactjs - 简单的反应组件 - 期望一个赋值或函数调用,而是看到一个表达式 no-unused-expressions
- javascript - 当嵌入的视频到达特定位置时,使用 javascript 突出显示文本
- regex - 正则表达式(RegEx)不验证字符串“https://www.website”
- here-api - 我似乎无法理解如何获得我正在寻找的城市的 XYZ 位置
- r - 在 RStudio 中使用搜索工具时如何关闭自动搜索/查找?
- python - 如何在函数列表中迭代不同的数据框?
- reporting-services - SSRS 更多参数的相同数据集
- python - SQL Python 用户指定查询