From ef91e50aa5603e03ca1a33abf3bc68acda9a5a24 Mon Sep 17 00:00:00 2001 From: sebseb7 Date: Thu, 20 Nov 2025 11:43:07 +0100 Subject: [PATCH] feat(Images): convert images to AVIF format for improved performance - Updated image references in various components and configuration files to use AVIF format instead of PNG and JPG. - Modified the build process to include a script for converting images to AVIF, enhancing loading times and reducing file sizes. - Ensured consistency across the application by updating image paths in the footer, main layout, and content components. --- package.json | 2 +- prerender/data-fetching.cjs | 4 +- prerender/seo/category.cjs | 8 ++++ public/assets/images/cutlings.avif | Bin 0 -> 5173 bytes public/assets/images/gg.avif | Bin 0 -> 4152 bytes public/assets/images/maps.avif | Bin 0 -> 1490 bytes public/assets/images/seeds.avif | Bin 0 -> 20769 bytes public/assets/images/sh.avif | Bin 0 -> 8014 bytes scripts/convert-images-to-avif.cjs | 58 +++++++++++++++++++++++++++++ scripts/convert-logo-to-avif.js | 26 +++++++++++++ src/components/Content.js | 4 +- src/components/Footer.js | 4 +- src/components/MainPageLayout.js | 4 +- src/components/header/Logo.js | 2 +- src/config.js | 2 +- 15 files changed, 103 insertions(+), 11 deletions(-) create mode 100644 public/assets/images/cutlings.avif create mode 100644 public/assets/images/gg.avif create mode 100644 public/assets/images/maps.avif create mode 100644 public/assets/images/seeds.avif create mode 100644 public/assets/images/sh.avif create mode 100644 scripts/convert-images-to-avif.cjs create mode 100644 scripts/convert-logo-to-avif.js diff --git a/package.json b/package.json index e3a79b2..361cfa0 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "start": "cross-env NODE_OPTIONS=\"--no-deprecation\" webpack serve --progress --mode development --no-open", "start:seedheads": "cross-env PROXY_TARGET=https://seedheads.de NODE_OPTIONS=\"--no-deprecation\" webpack serve --progress --mode development --no-open", "prod": "webpack serve --progress --mode production --no-client-overlay --no-client --no-web-socket-server --no-open --no-live-reload --no-hot --compress --no-devtool", - "build:client": "cross-env NODE_ENV=production webpack --progress --mode production && shx cp dist/index.html dist/index_template.html", + "build:client": "node scripts/convert-images-to-avif.cjs && cross-env NODE_ENV=production webpack --progress --mode production && shx cp dist/index.html dist/index_template.html", "build": "npm run build:client", "analyze": "cross-env ANALYZE=true NODE_ENV=production webpack --progress --mode production", "lint": "eslint src/**/*.{js,jsx}", diff --git a/prerender/data-fetching.cjs b/prerender/data-fetching.cjs index 652460f..3ec5344 100644 --- a/prerender/data-fetching.cjs +++ b/prerender/data-fetching.cjs @@ -152,7 +152,7 @@ const saveProductImages = async (socket, products, categoryName, outputDir) => { "public", "assets", "images", - "sh.png" + "sh.avif" ); // Ensure assets/images directory exists @@ -236,7 +236,7 @@ const saveProductImages = async (socket, products, categoryName, outputDir) => { fs.writeFileSync(imagePath, processedImageBuffer); console.log( - ` ✅ Applied centered inverted sh.png overlay to ${estimatedFilename}` + ` ✅ Applied centered inverted sh.avif overlay to ${estimatedFilename}` ); } catch (overlayError) { console.log( diff --git a/prerender/seo/category.cjs b/prerender/seo/category.cjs index 42beb24..68d274f 100644 --- a/prerender/seo/category.cjs +++ b/prerender/seo/category.cjs @@ -1,4 +1,12 @@ const generateCategoryJsonLd = (category, products = [], baseUrl, config) => { + // Category IDs to skip (seeds, plants, headshop items) + const skipCategoryIds = [689, 706, 709, 711, 714, 748, 749, 896, 710, 924, 923, 922, 921, 916, 278, 259, 258]; + + // Check if category ID is in skip list + if (category.id && skipCategoryIds.includes(parseInt(category.id))) { + return ''; + } + const categoryUrl = `${baseUrl}/Kategorie/${category.seoName}`; // Calculate price valid date (current date + 3 months) diff --git a/public/assets/images/cutlings.avif b/public/assets/images/cutlings.avif new file mode 100644 index 0000000000000000000000000000000000000000..759fa1635e5b0a98b752989b13129489187a5562 GIT binary patch literal 5173 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 literal 0 HcmV?d00001 diff --git a/public/assets/images/maps.avif b/public/assets/images/maps.avif new file mode 100644 index 0000000000000000000000000000000000000000..32a88f03beadadc1cedf2aefc0ff9701a48f42e0 GIT binary patch literal 1490 zcmYLH2{e>z82)FWF_t6_x`e`*3@2N5*D^7qLb8S!%<#+b8)Gt-vP4<3+)+eiN`ZO00{^g08y}+ z0RUM6b8w(dwirY)T$+Gj#Ktu?R5`eyZrI>%3TwZfu;VugD_dk82r(d7%mksJNH|MS zSbBEJsvEtsU^GM(cEVu|FB^DCLtrcjX8?u4VBoar2b6>qJjJGl5Gp2=m{>a@9m9w) zqeIk?jm_392n>SEqS?_*Dm~f^_JH9ag~2wXghQbep)Rx7C#z zqXz%9=_TxUSKSK2oa*g(jo|4rnFG6RCU951m3A(*H6|U(D2z=9+pkQhPSF~53@5iI z3`_i+#ICP71gI@8^{{^B6XKp)W?Kw>$iaDsJnvWOcdE@|m+htv;Bv*X9a~C@2R{X< zT5%8G^jm1i#c4jsY~_9!7>PYzi}0(sUo_WP5LeZWYI0_)GqM6YhQnL_E}A_iNyPcw zd1B{#S0PD+J;L$F>UK$Th&NXY^D%D4Rm9YnF)j~YjoP!sGQ*;ZW_hP=NM!FaHA^B#P#99!tAoiKXMRS3LaGB6!w({4Ei}V&x^8M#2DI%n|5+ z6zR-ibtX^t3f$a%Pqg*TX1Xb+y!O^)KN7Le>+JdbIGJNOwnwbioMc6o+Pf3?)Ui^k z5=UNY%%!^)EIEOa&)nAT?TF_cRf0=8k zaZGVT?#?{hdH798jqUa7>aHcR^9nOnVSDq{68&EK0`-c@qdG%;1mSDQj+KKM{2nR1 z=Y1Lbwq(4iAf>Q8vjj!>XySNlmWA1RK*% zYB5$`VW09`Yif3IBi`8m(Z?Z}2met~1>qkp*S~<01+>b`#|@5dJGG!lG#*`^t6+}5 zshaLz9j)xB??`=WC-ybep)rIO?2;xab$-k>B$=b=!eY1I-_4h>0JV>Q_1af zjrO->`FEsMqEXzn{x~anbuIp$X{#I`8-X}~<%`!(ojxSXfNU82st&KU9#Hy;-uv;) zz)L|qlQg*V?Ay-?+$q&R5(7(BoYhPL45{Kf$E)6AB(*n=siQILlN|+p8g0{zVj~&+Ldz zdkPL2_Nz4H&$s+%Q{*BifkIn+T5U`-2C2e0|Idgy&%wAvJKd8&c^F~osBl3ifLnKJO^K`chi2IY=Vw9)EpwV;%nXO+f6Qt3>o|zs=*2HkXUYh RS3MR=c1Qb7Mi#%A{2w!LPBH)h literal 0 HcmV?d00001 diff --git a/public/assets/images/seeds.avif b/public/assets/images/seeds.avif new file mode 100644 index 0000000000000000000000000000000000000000..bec760d70f63e50a456af0f0a9a7c3cd39090e31 GIT binary patch literal 20769 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 { + const imagesDir = path.join(__dirname, '../public/assets/images'); + let hasError = false; + + for (const image of imagesToConvert) { + const inputPath = path.join(imagesDir, image.src); + const outputPath = path.join(imagesDir, image.dest); + + if (!fs.existsSync(inputPath)) { + console.warn(`⚠️ Input file not found: ${inputPath}`); + continue; + } + + // Check if output file exists and compare modification times + // Only convert if source is newer or destination doesn't exist + let shouldConvert = true; + if (fs.existsSync(outputPath)) { + const inputStat = fs.statSync(inputPath); + const outputStat = fs.statSync(outputPath); + if (inputStat.mtime <= outputStat.mtime) { + shouldConvert = false; + } + } + + if (shouldConvert) { + try { + await sharp(inputPath) + .toFormat('avif') + .toFile(outputPath); + console.log(`✅ Converted ${image.src} to ${image.dest}`); + } catch (error) { + console.error(`❌ Error converting ${image.src}:`, error.message); + hasError = true; + } + } else { + // Silent skip if already up to date to keep logs clean, or use verbose flag + // console.log(`Skipping ${image.src} (already up to date)`); + } + } + + if (hasError) { + process.exit(1); + } +}; + +run(); diff --git a/scripts/convert-logo-to-avif.js b/scripts/convert-logo-to-avif.js new file mode 100644 index 0000000..4586239 --- /dev/null +++ b/scripts/convert-logo-to-avif.js @@ -0,0 +1,26 @@ +const sharp = require('sharp'); +const path = require('path'); +const fs = require('fs'); + +const run = async () => { + const inputPath = path.join(__dirname, '../public/assets/images/sh.png'); + const outputPath = path.join(__dirname, '../public/assets/images/sh.avif'); + + if (!fs.existsSync(inputPath)) { + console.error('Input file not found:', inputPath); + process.exit(1); + } + + try { + await sharp(inputPath) + .toFormat('avif') + .toFile(outputPath); + console.log(`Successfully converted ${inputPath} to ${outputPath}`); + } catch (error) { + console.error('Error converting image:', error); + process.exit(1); + } +}; + +run(); + diff --git a/src/components/Content.js b/src/components/Content.js index 0357cf3..2fc233e 100644 --- a/src/components/Content.js +++ b/src/components/Content.js @@ -722,7 +722,7 @@ class Content extends Component { justifyContent: 'center' }}> Seeds Stecklinge { const allContentBoxes = { home: [ - { title: t('sections.seeds'), image: "/assets/images/seeds.jpg", bgcolor: "#e1f0d3", link: "/Kategorie/Seeds" }, - { title: t('sections.stecklinge'), image: "/assets/images/cutlings.jpg", bgcolor: "#e8f5d6", link: "/Kategorie/Stecklinge" } + { title: t('sections.seeds'), image: "/assets/images/seeds.avif", bgcolor: "#e1f0d3", link: "/Kategorie/Seeds" }, + { title: t('sections.stecklinge'), image: "/assets/images/cutlings.avif", bgcolor: "#e8f5d6", link: "/Kategorie/Stecklinge" } ], aktionen: [ { title: t('sections.oilPress'), image: "/assets/images/presse.jpg", bgcolor: "#e1f0d3", link: "/presseverleih" }, diff --git a/src/components/header/Logo.js b/src/components/header/Logo.js index bf6be19..078c56e 100644 --- a/src/components/header/Logo.js +++ b/src/components/header/Logo.js @@ -16,7 +16,7 @@ const Logo = () => { }} >