O ladă ușoară cu o roată dințată pe un cântar care abia se mișcă, lângă un raft înalt separat, plin de tablouri înrămate.
Astro & web· 3 min de citit

Imaginile nu intră în limita de mărime a Worker-ului Cloudflare

Imaginile unui site Astro pe Cloudflare Workers ajung în static assets, nu în Worker. Ce am măsurat, ce limite contează și ce te costă totuși imaginile.

Azi pregăteam blogul pentru imagini de copertă pe Cloudflare Workers și un lucru mă îngrijora: imaginile stau în repo, chiar lângă articole. Țineam minte că limita de mărime a unui Worker e 10 MB, iar câteva screenshot-uri ar fi umplut-o repede. Așa că am făcut build la site cu și fără imagini și am comparat.

Imaginile nu intră deloc în limita de mărime a Worker-ului. Astro le pune în static assets, pe care Cloudflare le stochează și le servește separat de codul Worker-ului. Iar limita în sine e acum de 64 MiB necomprimat, nu de 10 MB.

Pe scurt: imaginile nu intră niciodată în Worker, așa că limita lui de mărime le ignoră.

  • Măsurat: două imagini de 2 MB au lăsat Worker-ul la 1,3 MB, iar static assets au crescut de la 1,6 MB la 6,5 MB.
  • Limitele care contează: 25 MiB pe fișier și 100.000 de fișiere per deploy pe planul plătit (20.000 pe cel gratuit).
  • Ce te costă totuși imaginile: Astro publică originalele lângă versiunile WebP pe care le generează, iar fiecare imagine rămâne în git pentru totdeauna. Convertește-le înainte de commit.

Unde ajung imaginile când Astro face build pentru Workers

Adaptorul Cloudflare împarte build-ul în două foldere:

  • dist/server este Worker-ul: codul de server și paginile randate la cerere. Pe ăsta îl măsoară limita.
  • dist/client sunt static assets: paginile pre-randate, CSS-ul, fonturile și toate imaginile. Wrangler le urcă separat, iar Cloudflare le servește fără să încarce codul Worker-ului.

O imagine pe care o imporți sau o pui în Markdown ajunge în dist/client/_astro/, ca fișier original plus versiunile WebP redimensionate pe care Astro le generează pentru ea.

Ce am măsurat

Am făcut build la blog de două ori: o dată așa cum e, o dată cu un articol de test cu două PNG-uri de 2,5 MB și 2,1 MB, unul drept copertă și unul în text.

npm run build
du -sh dist/server dist/client
Build dist/server (Worker) dist/client (static assets)
Fără imagini 1,3 MB 1,6 MB
Cu imagini 1,3 MB 6,5 MB

Worker-ul nu s-a schimbat cu niciun byte pe care să-l vadă du. Aproape toată creșterea de 4,9 MB sunt cele două PNG-uri originale, copiate așa cum sunt. Versiunile WebP făcute de Astro au ieșit mici: coperta are între 11 KB și 161 KB, în funcție de lățime.

Ce limite contează?

Din pagina de limite Workers a Cloudflare:

Limită Gratuit Plătit
Mărimea Worker-ului (necomprimat) 64 MiB 64 MiB
Fișiere per versiune de Worker 20.000 100.000
Mărimea unui fișier static 25 MiB 25 MiB

Nu mai există limită pentru mărimea comprimată, doar pentru cea necomprimată. Cele 100.000 de fișiere cer Wrangler 4.34.0 sau mai nou.

Astro face mai multe fișiere per imagine (originalul plus câte un WebP pentru fiecare lățime de care are nevoie), așa că numără câteva fișiere per imagine când faci estimarea. Chiar și la cinci per imagine, 20.000 de fișiere înseamnă mii de imagini.

Micșorează imaginile înainte de commit

Ce te costă de fapt imaginile e mărimea repo-ului. Fiecare screenshot pe care îl faci commit rămâne în istoria git pentru totdeauna, iar originalul ajunge în producție lângă versiunile optimizate.

Convertesc copertele și screenshot-urile în WebP înainte să le pun în folderul articolului:

cwebp -q 82 -resize 1600 0 screenshot.png -o screenshot.webp

Coperta acestui articol e un WebP de 80 KB, lat de 1600 de pixeli. Astro tot își face versiunile mai mici din ea, dar fișierul care ajunge în producție și cel din git sunt amândouă mici.

Dacă ajungi la video sau la fișiere de peste 25 MiB, atunci are sens R2. Pentru imaginile unui blog, static assets sunt de ajuns.

Disponibil și în

English

Primește articolele mele noi pe emailVrei să afli când scriu următorul articol?

Îți scriu cel mult o dată pe săptămână și doar când apare ceva nou pe site. Fără articole noi, fără email. Fără spam, iar dezabonarea e la un clic distanță.Mulțumesc că ai citit! Lasă-mi adresa de email și îți scriu cel mult o dată pe săptămână, doar când apare ceva nou. Fără spam, te dezabonezi dintr-un clic.

Doar adresa ta de email. Te dezabonezi dintr-un clic. Confidențialitate