From f022eb09a237f16171280e169e53b43c9b1ec6ee Mon Sep 17 00:00:00 2001 From: Quentin Gliech Date: Fri, 15 Nov 2024 00:53:07 +0100 Subject: [PATCH] Precompress assets and set the right cache headers --- Dockerfile | 6 ------ config/nginx.conf | 13 +++---------- package.json | 1 + vite.config.js | 5 +++++ yarn.lock | 19 +++++++++++++++++-- 5 files changed, 26 insertions(+), 18 deletions(-) diff --git a/Dockerfile b/Dockerfile index 05354e3f..275ab153 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,9 +2,3 @@ FROM nginxinc/nginx-unprivileged:alpine COPY ./dist /app COPY config/nginx.conf /etc/nginx/conf.d/default.conf - -USER root - -RUN rm -rf /usr/share/nginx/html - -USER 101 diff --git a/config/nginx.conf b/config/nginx.conf index ca4ac4c6..6950eb72 100644 --- a/config/nginx.conf +++ b/config/nginx.conf @@ -3,23 +3,16 @@ server { server_name localhost; root /app; + gzip_static on; location / { - # disable cache entriely by default (apart from Etag which is accurate enough) - add_header Cache-Control 'private no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0'; - if_modified_since off; - expires off; - # also turn off last-modified since they are just the timestamps of the file in the docker image - # and may or may not bear any resemblance to when the resource changed - add_header Last-Modified ""; - try_files $uri $uri/ /index.html; + add_header Cache-Control "no-store, no-cache, must-revalidate"; } # assets can be cached because they have hashed filenames location /assets { - expires 1w; - add_header Cache-Control "public, no-transform"; + add_header Cache-Control "public, immutable, max-age=31536000"; } location /apple-app-site-association { diff --git a/package.json b/package.json index b1015050..eb65c407 100644 --- a/package.json +++ b/package.json @@ -114,6 +114,7 @@ "unique-names-generator": "^4.6.0", "vaul": "^1.0.0", "vite": "^5.0.0", + "vite-plugin-compression2": "^1.3.1", "vite-plugin-html-template": "^1.1.0", "vite-plugin-svgr": "^4.0.0", "vitest": "^2.0.0", diff --git a/vite.config.js b/vite.config.js index b92f717b..f4fa4900 100644 --- a/vite.config.js +++ b/vite.config.js @@ -6,6 +6,7 @@ Please see LICENSE in the repository root for full details. */ import { defineConfig, loadEnv } from "vite"; +import { compression } from "vite-plugin-compression2"; import svgrPlugin from "vite-plugin-svgr"; import htmlTemplate from "vite-plugin-html-template"; import { codecovVitePlugin } from "@codecov/vite-plugin"; @@ -38,6 +39,10 @@ export default defineConfig(({ mode }) => { bundleName: "element-call", uploadToken: process.env.CODECOV_TOKEN, }), + + compression({ + exclude: [/config.json/], + }), ]; if ( diff --git a/yarn.lock b/yarn.lock index 5057090b..1aa26c6f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2542,7 +2542,7 @@ "@react-spring/shared" "~9.7.5" "@react-spring/types" "~9.7.5" -"@rollup/pluginutils@^5.1.3": +"@rollup/pluginutils@^5.1.0", "@rollup/pluginutils@^5.1.3": version "5.1.3" resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.1.3.tgz#3001bf1a03f3ad24457591f2c259c8e514e0dbdf" integrity sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A== @@ -7927,6 +7927,11 @@ tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== +tar-mini@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/tar-mini/-/tar-mini-0.2.0.tgz#2b2cdc215f5b83b0ab8ce363dc9ded22de51849b" + integrity sha512-+qfUHz700DWnRutdUsxRRVZ38G1Qr27OetwaMYTdg8hcPxf46U0S1Zf76dQMWRBmusOt2ZCK5kbIaiLkoGO7WQ== + teex@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/teex/-/teex-1.0.1.tgz#b8fa7245ef8e8effa8078281946c85ab780a0b12" @@ -8430,6 +8435,16 @@ vite-node@2.1.4: pathe "^1.1.2" vite "^5.0.0" +vite-plugin-compression2@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/vite-plugin-compression2/-/vite-plugin-compression2-1.3.1.tgz#ac2a512f8ca90a76687add6cf441000dd2c41485" + integrity sha512-UMr66CFu+RVPiD8E3iaX9BdZjCgO+lzzaAPAZvL5YgwH6FU4OR/MulJEyp9wq9EKoO6ErjUtPpaiDi3hvzv79Q== + dependencies: + "@rollup/pluginutils" "^5.1.0" + tar-mini "^0.2.0" + optionalDependencies: + vite "^5.3.4" + vite-plugin-html-template@^1.1.0: version "1.2.2" resolved "https://registry.yarnpkg.com/vite-plugin-html-template/-/vite-plugin-html-template-1.2.2.tgz#d263c18dcf5f5e54bc74894546fd0ed993191f2f" @@ -8446,7 +8461,7 @@ vite-plugin-svgr@^4.0.0: "@svgr/core" "^8.1.0" "@svgr/plugin-jsx" "^8.1.0" -vite@^5.0.0: +vite@^5.0.0, vite@^5.3.4: version "5.4.11" resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.11.tgz#3b415cd4aed781a356c1de5a9ebafb837715f6e5" integrity sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==