perf: add .htaccess for GZIP compression and browser caching

- GZIP: HTML, CSS, JS, SVG, fonts compressed
- Cache: CSS/JS 1 month, images/fonts 1 year, HTML 1 hour
- Estimated savings: ~345 KiB on repeat visits
This commit is contained in:
mstfyldz
2026-05-04 22:12:20 +03:00
parent c1a9eb18ad
commit 178ce41cec

60
.htaccess Normal file
View File

@@ -0,0 +1,60 @@
# Enable GZIP Compression
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript
AddOutputFilterByType DEFLATE application/javascript application/x-javascript application/json
AddOutputFilterByType DEFLATE application/xml application/xhtml+xml
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE font/woff font/woff2 application/font-woff application/font-woff2
</IfModule>
# Browser Caching - Static Assets
<IfModule mod_expires.c>
ExpiresActive On
# Images (1 year)
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/webp "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
ExpiresByType image/x-icon "access plus 1 year"
# Fonts (1 year)
ExpiresByType font/woff "access plus 1 year"
ExpiresByType font/woff2 "access plus 1 year"
ExpiresByType application/font-woff "access plus 1 year"
ExpiresByType application/font-woff2 "access plus 1 year"
ExpiresByType font/ttf "access plus 1 year"
ExpiresByType font/otf "access plus 1 year"
# CSS & JavaScript (1 month)
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType text/javascript "access plus 1 month"
# HTML (1 hour)
ExpiresByType text/html "access plus 1 hour"
</IfModule>
# Cache-Control Headers
<IfModule mod_headers.c>
# CSS & JS - 1 month
<FilesMatch "\.(css|js)$">
Header set Cache-Control "public, max-age=2592000, immutable"
</FilesMatch>
# Images - 1 year
<FilesMatch "\.(jpg|jpeg|png|gif|webp|svg|ico)$">
Header set Cache-Control "public, max-age=31536000, immutable"
</FilesMatch>
# Fonts - 1 year
<FilesMatch "\.(woff|woff2|ttf|otf|eot)$">
Header set Cache-Control "public, max-age=31536000, immutable"
</FilesMatch>
# HTML - no-cache (always check for updates)
<FilesMatch "\.(html|htm)$">
Header set Cache-Control "public, max-age=3600, must-revalidate"
</FilesMatch>
</IfModule>