improve puppeteer performance, change screenshots to (smaller) jpg

This commit is contained in:
James Fenn
2023-04-04 18:00:36 -04:00
parent 3284836174
commit 570815ea5e
4 changed files with 49 additions and 7 deletions

5
.gitignore vendored
View File

@@ -18,5 +18,6 @@ pnpm-debug.log*
# macOS-specific files # macOS-specific files
.DS_Store .DS_Store
.idea/ .idea/
.eslintcache .eslintcache
.vercel .vercel
.puppeteer

View File

@@ -14,21 +14,61 @@ import { Layout } from "./base";
let browser: puppeteer.Browser; let browser: puppeteer.Browser;
let page: puppeteer.Page; let page: puppeteer.Page;
const browser_args = [
"--autoplay-policy=user-gesture-required",
"--disable-background-networking",
"--disable-background-timer-throttling",
"--disable-backgrounding-occluded-windows",
"--disable-breakpad",
"--disable-client-side-phishing-detection",
"--disable-component-update",
"--disable-default-apps",
"--disable-dev-shm-usage",
"--disable-domain-reliability",
"--disable-extensions",
"--disable-features=AudioServiceOutOfProcess",
"--disable-hang-monitor",
"--disable-ipc-flooding-protection",
"--disable-notifications",
"--disable-offer-store-unmasked-wallet-cards",
"--disable-popup-blocking",
"--disable-print-preview",
"--disable-prompt-on-repost",
"--disable-renderer-backgrounding",
"--disable-setuid-sandbox",
"--disable-speech-api",
"--disable-sync",
"--hide-scrollbars",
"--ignore-gpu-blacklist",
"--metrics-recording-only",
"--mute-audio",
"--no-default-browser-check",
"--no-first-run",
"--no-pings",
"--no-sandbox",
"--no-zygote",
"--password-store=basic",
"--use-gl=swiftshader",
"--use-mock-keychain",
"--disable-web-security",
];
const createPostSocialPreviewPng = async (layout: Layout, post: PostInfo) => { const createPostSocialPreviewPng = async (layout: Layout, post: PostInfo) => {
if (!browser) { if (!browser) {
browser = await chromium.puppeteer.launch({ browser = await chromium.puppeteer.launch({
args: [...chromium.args, "--hide-scrollbars", "--disable-web-security"], args: [...chromium.args, ...browser_args],
defaultViewport: chromium.defaultViewport, defaultViewport: chromium.defaultViewport,
executablePath: await chromium.executablePath, executablePath: await chromium.executablePath,
headless: true, headless: true,
ignoreHTTPSErrors: true, ignoreHTTPSErrors: true,
userDataDir: "./.puppeteer",
}); });
page = await browser.newPage(); page = await browser.newPage();
await page.setViewport(heightWidth); await page.setViewport(heightWidth);
} }
await page.setContent(await renderPostPreviewToString(layout, post)); await page.setContent(await renderPostPreviewToString(layout, post));
return (await page.screenshot()) as Buffer; return (await page.screenshot({ type: "jpeg" })) as Buffer;
}; };
const build = async () => { const build = async () => {
@@ -47,10 +87,11 @@ const build = async () => {
const png = await createPostSocialPreviewPng(layout, post); const png = await createPostSocialPreviewPng(layout, post);
await fsPromises.writeFile( await fsPromises.writeFile(
resolve(outDir, `${post.slug}.${layout.name}.png`), resolve(outDir, `${post.slug}.${layout.name}.jpg`),
png png
); );
} }
console.log(post.slug);
} }
await browser.close(); await browser.close();

View File

@@ -59,7 +59,7 @@ const otherLangs = translations
otherLangs, otherLangs,
currentLang: post.locale, currentLang: post.locale,
}} }}
shareImage={`/generated/${post.slug}.twitter-preview.png`} shareImage={`/generated/${post.slug}.twitter-preview.jpg`}
/> />
<BlogPost Content={Content} post={post} posts={posts} /> <BlogPost Content={Content} post={post} posts={posts} />
</Document> </Document>

View File

@@ -55,7 +55,7 @@ const otherLangs = translations
otherLangs, otherLangs,
currentLang: post.locale, currentLang: post.locale,
}} }}
shareImage={`/generated/${post.slug}.twitter-preview.png`} shareImage={`/generated/${post.slug}.twitter-preview.jpg`}
/> />
<BlogPost Content={Content} post={post} posts={posts} /> <BlogPost Content={Content} post={post} posts={posts} />
</Document> </Document>