Imagini, fonturi, JS: quick wins de viteză

On-Page · Performanță

Imagini, fonturi, JS: quick wins de viteză (aplicabile azi)

Vrei o accelerare site vizibilă fără să refaci tot? Începe cu trei zone care cântăresc cel mai mult: optimizare imagini și fonturi și încărcare asincronă JS.

optimizare imagini optimizare fonturi încărcare asincronă JS
Pe scurt: comprimă imaginile și livrează-le la dimensiunea corectă, folosește fonturi cu schimbare rapidă (fără „clipiri”), iar scripturile mută-le la final cu defer/async. Rezultatul: pagină care se vede și se mișcă mai repede pe telefon.

1) Imagini: cele mai rapide câștiguri

Reguli simple

  • Dimensiune corectă: nu încărca poze uriașe pentru un card mic.
  • Format modern: folosește WebP/AVIF, păstrând un fallback JPG/PNG.
  • Încărcare întârziată: imaginile de mai jos în pagină cu loading="lazy".
  • Descrieri scurte: text alternativ care spune „ce se vede”.

Dacă ai multe imagini vechi, procesăm în lot cu compresie sigură.

Exemplu simplu (picture)

<picture>
  <source srcset="/img/hero.avif" type="image/avif">
  <source srcset="/img/hero.webp" type="image/webp">
  <img src="/img/hero.jpg"
       alt="Ecran de site rapid pe telefon"
       width="1200" height="700"
       loading="lazy" decoding="async" />
</picture>

Dimensiunile declarate ajută la stabilitate (nu „saltă” layout-ul).

Galerii & listări

  • folosește srcset + sizes pentru imagini responsive
  • nu încărca 10 imagini deodată: afișează primele, restul la scroll
  • evită caruselul greu dacă nu e necesar

Exemplu responsive

<img
  src="/img/card-800.webp"
  srcset="/img/card-400.webp 400w, /img/card-800.webp 800w, /img/card-1200.webp 1200w"
  sizes="(max-width: 680px) 100vw, 400px"
  alt="Exemplu card"
  loading="lazy" decoding="async" />
Rezumat imagini: micșorezi fișierele, livrezi format modern, pui dimensiuni și întârzii ce nu se vede imediat. Asta singură poate tăia secunde întregi din încărcare.

2) Fonturi: frumos și rapid

Ce funcționează

  • font-display: swap — textul apare imediat cu un font de rezervă, apoi se schimbă fin.
  • mai puține variante — regular + bold sunt adesea suficiente.
  • self-host — găzduiește fontul pe același domeniu, unde e posibil.
  • preload pentru fontul esențial (un singur fișier, varianta de bază).

Exemple rapide

<link rel="preload" href="/fonts/brand-regular.woff2"
      as="font" type="font/woff2" crossorigin>
@font-face{
  font-family:"Brand";
  src:url("/fonts/brand-regular.woff2") format("woff2");
  font-display:swap; /* textul apare imediat */
  font-weight:400; font-style:normal;
}

Evita fonturile externe „grele” dacă nu sunt necesare.

Alegerea fontului

  • folosește system UI când e cazul (zero fișiere de font)
  • limitează variantele (regular/bold/italic doar dacă e nevoie)
  • evită icon-font-urile mari — folosește SVG-uri punctuale

Semn că e bine

  • textul nu „clipește” gol
  • pagina rămâne lizibilă chiar fără fontul personalizat
  • nu încarci 5-10 fișiere de font pentru o singură pagină
Rezumat fonturi: mai puține fișiere, încărcare „în schimb” (swap), eventual fonturi de sistem. Arată bine și se încarcă rapid.

3) JavaScript: încarcă doar ce trebuie

Mută scripturile în spate

Scripturile grele pot bloca afișarea paginii. Soluția: marchează-le pentru încărcare întârziată și ține doar ce e necesar.

  • defer — așteaptă, dar păstrează ordinea; se execută după ce pagina este gata.
  • async — se încarcă în paralel și rulează când e gata (atenție la dependențe).
  • elimină plugin-urile nefolosite; înlocuiește librării masive cu variante mici.

Exemplu: <script> corect

<!-- librărie necesară peste tot -->
<script src="/js/app.min.js" defer></script>

<!-- widget de pe pagini secundare -->
<script src="/js/widget.js" async></script>

Dacă ai un singur fișier uriaș, împarte-l: „critic” vs. „opțional”.

Cum reduci „greutatea”

  • dezactivează carusele/efecte pe mobil dacă nu sunt esențiale
  • folosește CSS pentru animații simple (mai ieftin decât JS)
  • încarcă scripturi terțe doar acolo unde chiar ai nevoie

Semne că ai reușit

  • prima parte a paginii apare rapid
  • derularea este fluidă
  • evenimentele (click, deschidere meniu) răspund repede

4) Checklist „5 minute” (începi astăzi)

Imagini

  • comprimă 3–5 imagini mari de pe homepage
  • pune loading="lazy" pe imaginile din josul paginii
  • adaugă lățime/înălțime pe imaginea din hero

Fonturi

  • activează font-display: swap
  • dezactivează greutăți pe care nu le folosești
  • preîncarcă un singur font esențial

JavaScript

  • adaugă defer pe scriptul principal
  • oprește un plugin pe care nu-l folosești
  • mută widgeturile „opționale” pe async

5) Impact vs. efort (unde merită să începi)

AcțiuneEfortImpactObservații
Comprimă imaginile mariMicMareîncepe cu homepage și pagini de campanie
Setează font-display: swapMicMediutextul devine lizibil imediat
defer pe scriptul principalMicMareprima parte a paginii apare mai repede
Reduci greutățile de font nefolositeMediuMediutaie 100–300 KB uneori
Împarți bundle-ul JS „monolit”MediuMarecritice vs. opționale
Urmează regula 80/20: fă întâi lucrurile mici cu impact mare. Apoi rafinează.

Întrebări frecvente

WebP sau AVIF?

Ambele sunt bune. AVIF comprimă și mai bine, dar nu peste tot. Folosește <picture> cu surse multiple și un JPG de rezervă.

Ce înseamnă „swap” la fonturi?

Textul apare imediat cu un font de sistem (provizoriu), apoi se schimbă fin în fontul dorit când fișierul se încarcă.

Când folosesc async și când defer?

defer păstrează ordinea scripturilor și rulează după ce pagina e gata — sigur pentru scriptul principal. async e bun pentru widgeturi independente (chat, hartă) care pot rula oricând.

Contează și CSS-ul?

Da, dar în acest ghid am vizat cele mai mari câștiguri: imagini, fonturi, JS. Pentru o imagine de ansamblu, fă un audit tehnic SEO.

Vrei o listă de pași exact pentru site-ul tău? Facem o verificare scurtă și-ți dăm un plan aplicabil cu „quick wins”.