To improve performance and avoid re-fetching/re-parsing filters on every run, you can serialize the PuppeteerBlocker instance to a byte-array and store it on disk.
Automatic Caching
Pass a configuration object to the factory method containing path, read, and write functions (e.g., using fs.promises):
import { promises as fs } from 'fs';
PuppeteerBlocker.fromPrebuiltAdsAndTracking(fetch, {
path: 'engine.bin',
read: fs.readFile,
write: fs.writeFile,
}).then((blocker) => {
blocker.enableBlockingInPage(page);
});
Manual Serialization
You can manually control the process using serialize() and deserialize():
const buffer = blocker.serialize();
const restoredBlocker = PuppeteerBlocker.deserialize(buffer);
// `restoredBlocker` is deep-equal to `blocker`!
import { PuppeteerBlocker } from '@ghostery/adblocker-puppeteer';
import fetch from 'cross-fetch';
// Manual approach
PuppeteerBlocker.fromPrebuiltAdsAndTracking(fetch).then((blocker) => {
const buffer = blocker.serialize();
const restoredBlocker = PuppeteerBlocker.deserialize(buffer);
});