Hvad er minification?
Minification er processen med at fjerne unødvendig data fra kode uden at ændre funktionalitet:
Whitespace (mellemrum, tabs, newlines)
Comments
Unødvendige semikolons
Kortere variable navne
Eksempel (JavaScript):
Original (app.js):
function calculatePrice(price, discount) {
const discountAmount = price * (discount / 100);
const finalPrice = price - discountAmount;
return finalPrice;
}
function calculatePrice(price, discount) {
const discountAmount = price * (discount / 100);
const finalPrice = price - discountAmount;
return finalPrice;
}
function calculatePrice(price, discount) {
const discountAmount = price * (discount / 100);
const finalPrice = price - discountAmount;
return finalPrice;
}Minified (app.min.js):
function calculatePrice(n,t){const i=n*(t/100);return n-i}function calculatePrice(n,t){const i=n*(t/100);return n-i}function calculatePrice(n,t){const i=n*(t/100);return n-i}Result: Filen er 60-70% mindre.
Hvorfor det betyder noget for AI-synlighed
1. Performance signalerer professionalisme
AI-systemer lærer at associere teknisk kvalitet med troværdighed. Sites med:
Minified assets
Hurtig load time
Clean code structure
...bliver vurderet som mere professionelle end sites med:
Unminified, massive files
Langsom performance
Unoptimized code
2. Bedre TTFB og crawlbarhed
Min
ificerede filer loader hurtigere, hvilket betyder:
Lavere TTFB (Time To First Byte)
Crawlere kan besøge flere sider
Mindre risiko for timeouts
3. Industry standard compliance
Minification er standardpraktis. Hvis dit site IKKE bruger det, signalerer det:
Manglende teknisk ekspertise
Forældet teknisk stack
Lavere troværdighed
Sådan implementerer du minification
JavaScript minification
Option 1: Brug et build tool (anbefalet)
Med Webpack:
const TerserPlugin = require('terser-webpack-plugin');
module.exports = {
mode: 'production',
optimization: {
minimize: true,
minimizer: [new TerserPlugin()],
},
};
const TerserPlugin = require('terser-webpack-plugin');
module.exports = {
mode: 'production',
optimization: {
minimize: true,
minimizer: [new TerserPlugin()],
},
};
const TerserPlugin = require('terser-webpack-plugin');
module.exports = {
mode: 'production',
optimization: {
minimize: true,
minimizer: [new TerserPlugin()],
},
};Med Vite:
export default {
build: {
minify: 'terser',
},
};
export default {
build: {
minify: 'terser',
},
};
export default {
build: {
minify: 'terser',
},
};Option 2: Online tools
Option 3: Command-line (Terser)
npm install -g terser
terser app.js -o app.min.js -c -m
terser app.js -o app.min.js --source-map -c -m
npm install -g terser
terser app.js -o app.min.js -c -m
terser app.js -o app.min.js --source-map -c -m
npm install -g terser
terser app.js -o app.min.js -c -m
terser app.js -o app.min.js --source-map -c -m
CSS minification
Option 1: Build tools
Med Webpack (css-minimizer-webpack-plugin):
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
module.exports = {
optimization: {
minimizer: [
new CssMinimizerPlugin(),
],
},
};const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
module.exports = {
optimization: {
minimizer: [
new CssMinimizerPlugin(),
],
},
};const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
module.exports = {
optimization: {
minimizer: [
new CssMinimizerPlugin(),
],
},
};Option 2: PostCSS with cssnano
npm install cssnano postcss postcss-cli
postcss styles.css -o styles.min.css --use
npm install cssnano postcss postcss-cli
postcss styles.css -o styles.min.css --use
npm install cssnano postcss postcss-cli
postcss styles.css -o styles.min.css --use
Option 3: Online tools
Option 4: Command-line (cleancss)
npm install -g clean-css-cli
cleancss -o
npm install -g clean-css-cli
cleancss -o
npm install -g clean-css-cli
cleancss -o
HTML minification
For HTML kan du også minify:
With HTMLMinifier:
npm install -g html-minifier
html-minifier --collapse-whitespace --remove-comments index.html -o
npm install -g html-minifier
html-minifier --collapse-whitespace --remove-comments index.html -o
npm install -g html-minifier
html-minifier --collapse-whitespace --remove-comments index.html -o
Best practices
1. Keep original files
Aldrig overskrive originale filer:
2. Use source maps
Source maps gør debugging muligt:
terser app.js -o app.min.js --source-map "url='app.min.js.map'"
terser app.js -o app.min.js --source-map "url='app.min.js.map'"
terser app.js -o app.min.js --source-map "url='app.min.js.map'"
I HTML:
<script src="/assets/js/app.min.js"></script>
<script src="/assets/js/app.min.js"></script>
<script src="/assets/js/app.min.js"></script>
3. Automate med build scripts
package.json:
{
"scripts": {
"build:js": "terser src/js/app.js -o dist/js/app.min.js -c -m",
"build:css": "cleancss -o dist/css/styles.min.css src/css/styles.css",
"build": "npm run build:js && npm run build:css"
}
}{
"scripts": {
"build:js": "terser src/js/app.js -o dist/js/app.min.js -c -m",
"build:css": "cleancss -o dist/css/styles.min.css src/css/styles.css",
"build": "npm run build:js && npm run build:css"
}
}{
"scripts": {
"build:js": "terser src/js/app.js -o dist/js/app.min.js -c -m",
"build:css": "cleancss -o dist/css/styles.min.css src/css/styles.css",
"build": "npm run build:js && npm run build:css"
}
}Kør: npm run build
4. Reference minified files i production
HTML:
<link rel="stylesheet" href="/assets/css/styles.css">
<script src="/assets/js/app.js"></script>
<link rel="stylesheet" href="/assets/css/styles.min.css">
<script src="/assets/js/app.min.js"></script>
<link rel="stylesheet" href="/assets/css/styles.css">
<script src="/assets/js/app.js"></script>
<link rel="stylesheet" href="/assets/css/styles.min.css">
<script src="/assets/js/app.min.js"></script>
<link rel="stylesheet" href="/assets/css/styles.css">
<script src="/assets/js/app.js"></script>
<link rel="stylesheet" href="/assets/css/styles.min.css">
<script src="/assets/js/app.min.js"></script>
5. Cache busting
Tilføj version eller hash til filnavne:
<link rel="stylesheet" href="/assets/css/styles.min.css?v=1.2.3">
<script src="/assets/js/app.min.js?v=1.2.3"></script>
<link rel="stylesheet" href="/assets/css/styles.min.css?v=1.2.3">
<script src="/assets/js/app.min.js?v=1.2.3"></script>
<link rel="stylesheet" href="/assets/css/styles.min.css?v=1.2.3">
<script src="/assets/js/app.min.js?v=1.2.3"></script>
Eller:
<link rel="stylesheet" href="/assets/css/styles.a3f2b9.min.css">
<script src="/assets/js/app.d8e4c1.min.js"></script>
<link rel="stylesheet" href="/assets/css/styles.a3f2b9.min.css">
<script src="/assets/js/app.d8e4c1.min.js"></script>
<link rel="stylesheet" href="/assets/css/styles.a3f2b9.min.css">
<script src="/assets/js/app.d8e4c1.min.js"></script>
Performance impact
Size reduction
Typiske savings:
JavaScript: 60-70% smaller
CSS: 30-50% smaller
HTML: 20-30% smaller
Example:
Load time improvement
Before minification:
Total asset size: 500 KB
Load time on 3G: 4.2s
After minification:
Total asset size: 180 KB
Load time on 3G: 1.5s
Result: 2.7s faster load time.
Verificér din implementation
Check if files are minified
ls -lh assets/js/app.min.js
head -5
ls -lh assets/js/app.min.js
head -5
ls -lh assets/js/app.min.js
head -5
If minified: Ingen line breaks, ingen comments, short variable names.
If not minified: Readable code med whitespace.
Test load time improvement
Before:
curl -o /dev/null -s -w "Time: %{time_total}s\n"curl -o /dev/null -s -w "Time: %{time_total}s\n"curl -o /dev/null -s -w "Time: %{time_total}s\n"After:
curl -o /dev/null -s -w "Time: %{time_total}s\n"curl -o /dev/null -s -w "Time: %{time_total}s\n"curl -o /dev/null -s -w "Time: %{time_total}s\n"Check with PageSpeed Insights
Gå til https://pagespeed.web.dev/
Indtast URL
Check for "Minify JavaScript" eller "Minify CSS" warnings
If you see these warnings: Not properly minified.
Common mistakes
1. Serving unminified files i production
Problem: Forgot to update HTML to reference .min files.
Check:
curl https://ditwebsite.dk/ | grep -o 'src="[^"]*\.js"'
curl https://ditwebsite.dk/ | grep -o 'src="[^"]*\.js"'
curl https://ditwebsite.dk/ | grep -o 'src="[^"]*\.js"'
Should see: app.min.js, not app.js
2. Minifying already minified files
Problem: Running minifier on .min.js files.
Result: Potential errors, no additional savings.
Solution: Only minify original source files.
3. No source maps in production
Problem: Debugging becomes impossible.
Solution: Always generate and deploy source maps alongside minified files.
4. Not updating references
Problem: HTML still references old file names after renaming.
Example:
<script src="/assets/js/app.js"></script>
<script src="/assets/js/app.min.js"></script>
<script src="/assets/js/app.js"></script>
<script src="/assets/js/app.min.js"></script>
<script src="/assets/js/app.js"></script>
<script src="/assets/js/app.min.js"></script>
Advanced: Automated build pipeline
Complete build script
build.sh:
#!/bin/bash
echo "🔨 Building assets..."
mkdir -p dist/js dist/css
echo "Minifying JavaScript..."
terser src/js/app.js -o dist/js/app.min.js --source-map -c -m
echo "Minifying CSS..."
cleancss -o dist/css/styles.min.css src/css/styles.css
echo "Updating HTML references..."
sed 's/app\.js/app.min.js/g; s/styles\.css/styles.min.css/g' src/index.html > dist/index.html
echo "✅ Build complete!"
#!/bin/bash
echo "🔨 Building assets..."
mkdir -p dist/js dist/css
echo "Minifying JavaScript..."
terser src/js/app.js -o dist/js/app.min.js --source-map -c -m
echo "Minifying CSS..."
cleancss -o dist/css/styles.min.css src/css/styles.css
echo "Updating HTML references..."
sed 's/app\.js/app.min.js/g; s/styles\.css/styles.min.css/g' src/index.html > dist/index.html
echo "✅ Build complete!"
#!/bin/bash
echo "🔨 Building assets..."
mkdir -p dist/js dist/css
echo "Minifying JavaScript..."
terser src/js/app.js -o dist/js/app.min.js --source-map -c -m
echo "Minifying CSS..."
cleancss -o dist/css/styles.min.css src/css/styles.css
echo "Updating HTML references..."
sed 's/app\.js/app.min.js/g; s/styles\.css/styles.min.css/g' src/index.html > dist/index.html
echo "✅ Build complete!"
Integration med CI/CD
GitHub Actions (.github/workflows/build.yml):
name: Build and Deploy
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install dependencies
run: |
npm install -g terser clean-css-cli
- name: Build assets
run: ./build.sh
- name: Deploy
run: |
# Deploy dist/ to productionname: Build and Deploy
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install dependencies
run: |
npm install -g terser clean-css-cli
- name: Build assets
run: ./build.sh
- name: Deploy
run: |
# Deploy dist/ to productionname: Build and Deploy
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install dependencies
run: |
npm install -g terser clean-css-cli
- name: Build assets
run: ./build.sh
- name: Deploy
run: |
# Deploy dist/ to productionImplementation checklist
Brug denne tjekliste:
Konklusion
Minification er en lille teknisk detalje med stor impact. Det forbedrer performance (TTFB, load time), sender professionelle signaler, og er industry standard. Implementering tager under en time med moderne build tools, men effekten er varig.
Start med JavaScript og CSS minification via build tools (Webpack, Vite, eller command-line). Automatisér processen så du aldrig skal tænke på det igen. Test med PageSpeed Insights og verificer, at production serverer .min files.
Husk: Teknisk troværdighed bygges gennem hundr
edvis af små detaljer. Minification er en af dem.