From 65e524951274794c6b534b018b7a8835097c719c Mon Sep 17 00:00:00 2001 From: Julian Lechner Date: Mon, 27 Apr 2026 15:53:19 +0200 Subject: [PATCH] fix: performance --- scripts/generate-optimized-assets.cjs | 67 +++++++++++++++-------- src/app/home/home.component.html | 4 ++ src/assets/unoptimized/logos/synhost.png | Bin 0 -> 26928 bytes src/global.ts | 46 +++++++++++++++- src/index.html | 60 +++++++++++++++++--- 5 files changed, 142 insertions(+), 35 deletions(-) create mode 100644 src/assets/unoptimized/logos/synhost.png diff --git a/scripts/generate-optimized-assets.cjs b/scripts/generate-optimized-assets.cjs index 8c03dcc..987ee66 100644 --- a/scripts/generate-optimized-assets.cjs +++ b/scripts/generate-optimized-assets.cjs @@ -53,22 +53,54 @@ function getProfile(relativePath) { } if (normalizedRelativePath.startsWith('logos/')) { - return { maxWidth: 640, quality: 90, alphaQuality: 92, nearLossless: true }; + return { maxWidth: 216, quality: 78, alphaQuality: 88, variants: [64, 128, 216] }; } if (normalizedRelativePath.startsWith('portrait/')) { - return { maxWidth: 1600, quality: 84, alphaQuality: 92 }; + return { maxWidth: 900, quality: 82, alphaQuality: 90, variants: [128, 320, 480, 640, 900] }; } return { maxWidth: 1600, quality: 82, alphaQuality: 92 }; } +function getTargetRelativePath(relativePath, width) { + const parsedPath = path.parse(relativePath); + const fileName = + width === undefined ? `${parsedPath.name}.webp` : `${parsedPath.name}-${width}.webp`; + return path.join(parsedPath.dir, fileName); +} + +async function createWebpBuffer(inputBuffer, profile, width) { + const image = sharp(inputBuffer, { animated: false }).rotate(); + const metadata = await image.metadata(); + const targetWidth = width ?? profile.maxWidth; + + let pipeline = image; + if ((metadata.width ?? 0) > targetWidth) { + pipeline = pipeline.resize({ + width: targetWidth, + fit: 'inside', + withoutEnlargement: true, + }); + } + + return pipeline + .webp({ + quality: profile.quality, + alphaQuality: profile.alphaQuality, + effort: 6, + smartSubsample: true, + nearLossless: profile.nearLossless ?? false, + }) + .toBuffer(); +} + async function writeOptimizedAsset(sourceFilePath) { const relativePath = path.relative(sourceRoot, sourceFilePath); const extension = path.extname(sourceFilePath).toLowerCase(); const targetRelativePath = passthroughExtensions.has(extension) ? relativePath - : relativePath.replace(/\.[^.]+$/, '.webp'); + : getTargetRelativePath(relativePath); const targetFilePath = path.join(targetRoot, targetRelativePath); fs.mkdirSync(path.dirname(targetFilePath), { recursive: true }); @@ -87,30 +119,17 @@ async function writeOptimizedAsset(sourceFilePath) { const profile = getProfile(relativePath); const inputBuffer = fs.readFileSync(sourceFilePath); const inputBytes = inputBuffer.byteLength; - const image = sharp(inputBuffer, { animated: false }).rotate(); - const metadata = await image.metadata(); - - let pipeline = image; - if ((metadata.width ?? 0) > profile.maxWidth) { - pipeline = pipeline.resize({ - width: profile.maxWidth, - fit: 'inside', - withoutEnlargement: true, - }); - } - - const outputBuffer = await pipeline - .webp({ - quality: profile.quality, - alphaQuality: profile.alphaQuality, - effort: 6, - smartSubsample: true, - nearLossless: profile.nearLossless ?? false, - }) - .toBuffer(); + const outputBuffer = await createWebpBuffer(inputBuffer, profile); fs.writeFileSync(targetFilePath, outputBuffer); + for (const variantWidth of profile.variants ?? []) { + const variantRelativePath = getTargetRelativePath(relativePath, variantWidth); + const variantFilePath = path.join(targetRoot, variantRelativePath); + const variantBuffer = await createWebpBuffer(inputBuffer, profile, variantWidth); + fs.writeFileSync(variantFilePath, variantBuffer); + } + return { sourceRelativePath: relativePath, targetRelativePath, diff --git a/src/app/home/home.component.html b/src/app/home/home.component.html index 0024ab8..bf3a6aa 100644 --- a/src/app/home/home.component.html +++ b/src/app/home/home.component.html @@ -67,6 +67,8 @@ } diff --git a/src/assets/unoptimized/logos/synhost.png b/src/assets/unoptimized/logos/synhost.png new file mode 100644 index 0000000000000000000000000000000000000000..b4e4a86d5e59cb7081e308c21d414cea809cbf49 GIT binary patch literal 26928 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 + - + Lechner Julian -