Pakietowa Kompresja Obrazów dla Programistów Webowych | Bulk Image Compressor

Obrazy są najcięższymi assetami na większości stron internetowych. Na przeciętnej stronie stanowią od 40 do 60% całkowitej wagi. Jeśli jesteś programistą webowym i nie kompresujesz obrazów, wysyłasz rozdęte strony, niezależnie od tego, jak czysty jest Twój kod.

Pytanie nie brzmi, czy kompresować. Chodzi o to, gdzie w Twoim przepływie pracy powinna nastąpić kompresja i które narzędzie pasuje do danej sytuacji.

Gdzie kompresja obrazów pasuje do przepływu pracy programisty

Istnieją trzy główne punkty, w których możesz kompresować obrazy podczas programowania:

Przed commitem. Optymalizujesz obrazy lokalnie, zanim trafią do kontroli wersji. To utrzymuje repozytorium w ryzach i oznacza, że każde środowisko (staging, produkcyjne, maszyny innych programistów) automatycznie otrzymuje zoptymalizowane wersje.

Podczas budowania. Narzędzia takie jak Vite czy webpack obsługują kompresję jako część potoku assetów. Obrazy źródłowe pozostają w pełnej jakości w repozytorium, a proces budowania generuje zoptymalizowane wersje do wdrożenia.

Na warstwie CDN. Usługi takie jak Cloudflare, Imgix czy Cloudinary przekształcają i kompresują obrazy na bieżąco w zależności od urządzenia i przeglądarki.

Każde podejście ma wady i zalety, a można je łączyć.

Narzędzia online a wtyczki do budowania

W przypadku szybkiego, jednorazowego zadania, takiego jak kompresja partii zrzutów ekranu do wpisu na bloga czy optymalizacja zestawu ikon, narzędzie online jest najszybszą opcją. Otwórz Bulk Image Compressor, upuść pliki, dostosuj jakość i pobierz. Gotowe w minutę.

Wtyczki do budowania automatyzują bieżącą optymalizację. Oto jak to wygląda w praktyce.

Vite

Użytkownicy Vite mogą używać vite-plugin-imagemin lub podobnych wtyczek:

// vite.config.js
import imagemin from 'vite-plugin-imagemin';

export default {
  plugins: [
    imagemin({
      mozjpeg: { quality: 80 },
      webp: { quality: 80 },
      pngquant: { quality: [0.7, 0.8] },
    }),
  ],
};

Kompresuje to obrazy podczas vite build. Pliki źródłowe pozostają nietknięte. Katalog wyjściowy otrzymuje zoptymalizowane wersje.

webpack

W webpacku image-minimizer-webpack-plugin robi to samo:

const ImageMinimizerPlugin = require('image-minimizer-webpack-plugin');

module.exports = {
  optimization: {
    minimizer: [
      new ImageMinimizerPlugin({
        minimizer: {
          implementation: ImageMinimizerPlugin.sharpMinify,
          options: {
            encodeOptions: {
              jpeg: { quality: 80 },
              webp: { quality: 80 },
            },
          },
        },
      }),
    ],
  },
};

Kiedy używać którego

Użyj narzędzia online, gdy:

  • Dodajesz kilka obrazów do projektu i chcesz je od razu zoptymalizować
  • Pracujesz z treściami od klienta lub projektanta, który przysłał niezoptymalizowane pliki
  • Twój projekt nie ma etapu budowania (statyczny HTML, proste strony)
  • Chcesz wizualnie sprawdzić wyniki kompresji przed commitem

Użyj wtyczek do budowania, gdy:

  • Twój projekt ma już potok budowania
  • Wielu programistów dostarcza obrazy i chcesz spójnej optymalizacji
  • Potrzebujesz konwersji formatów (np. automatycznego generowania wersji WebP)
  • Chcesz mieć obrazy źródłowe w pełnej jakości w repozytorium na wypadek przyszłego ponownego przetwarzania

Optymalizacja obrazów w CI/CD

Wtyczki do budowania działają podczas lokalnych kompilacji, ale możesz też dodać optymalizację obrazów do swojego potoku CI/CD. To wyłapuje niezoptymalizowane obrazy, które się prześlizgną, niezależnie od tego, kto je zatwierdził.

Prostym podejściem jest uruchomienie skryptu w potoku CI, który sprawdza rozmiary plików obrazów:

# Zakończ budowanie, jeśli jakikolwiek obraz jest większy niż 500KB
find public/images -type f \( -name "*.jpg" -o -name "*.png" -o -name "*.webp" \) -size +500k | tee oversized.txt
if [ -s oversized.txt ]; then
  echo "Znaleziono zbyt duże obrazy. Skompresuj przed wdrożeniem."
  exit 1
fi

Do automatycznej kompresji w CI narzędzia takie jak sharp-cli lub imagemin-cli mogą przetwarzać obrazy jako krok budowania. To gwarantuje, że nic nie trafi na produkcję nieskompresowane.

Leniwe ładowanie i responsywne obrazy

Sama kompresja nie wystarczy. Sposób, w jaki ładujesz obrazy, ma równie duże znaczenie.

Leniwe ładowanie odkłada obrazy poniżej linii widoku do momentu, gdy użytkownik przewinie do nich. Dodaj loading="lazy" do każdego obrazu poniżej górnej krawędzi ekranu. Nie stosuj leniwego ładowania do głównego obrazu ani treści widocznych przy początkowym załadowaniu strony, ponieważ zaszkodzi to Twojemu wynikowi Largest Contentful Paint.

Responsywne obrazy dostarczają różne rozmiary w zależności od szerokości ekranu. Telefon nie potrzebuje obrazu 2400px przeznaczonego na monitor stacjonarny. Użyj atrybutów srcset i sizes, aby przeglądarka wybrała odpowiednią wersję:

<img
  src="product-800.webp"
  srcset="product-400.webp 400w, product-800.webp 800w, product-1600.webp 1600w"
  sizes="(max-width: 640px) 400px, (max-width: 1024px) 800px, 1600px"
  alt="Zdjęcie produktu"
  width="1600"
  height="1067"
  loading="lazy"
>

Generuj te warianty rozmiarów jako część procesu budowania lub za pomocą narzędzia pakietowego przed przesłaniem.

Dostarczanie przez CDN

CDN (sieć dostarczania treści) serwuje obrazy z serwerów geograficznie blisko odwiedzających. Zmniejsza to opóźnienia, ale niektóre CDN-y idą dalej z optymalizacją obrazów na bieżąco.

Cloudflare Image Resizing może automatycznie zmieniać rozmiar i konwertować obrazy do WebP lub AVIF w zależności od przeglądarki odwiedzającego. Nie musisz samodzielnie generować wariantów.

Imgix i Cloudinary to dedykowane CDN-y obrazów. Przesyłasz jedno wysokiej jakości źródło, a one generują dowolny rozmiar, format i jakość, które określisz za pomocą parametrów URL. To potężne rozwiązanie, ale wiąże się z kosztem na obraz.

W przypadku większości projektów kompresja obrazów przed przesłaniem i serwowanie ich przez standardowy CDN (Cloudflare, Fastly, AWS CloudFront) jest wystarczające. Dedykowane CDN-y obrazów mają sens, gdy masz tysiące obrazów przesłanych przez użytkowników i potrzebujesz dynamicznej zmiany rozmiaru. Aby poznać podstawy, dlaczego kompresja ma znaczenie dla sieci, nasz przewodnik dlaczego obrazy na stronie wymagają kompresji omawia podstawy.

Częste błędy programistów

Zatwierdzanie niezoptymalizowanych obrazów. JPEG o wielkości 5MB pozostaje w Twoim repozytorium git w historii na zawsze, nawet jeśli później go zastąpisz. Kompresuj przed commitem.

Używanie PNG do zdjęć. PNG są przeznaczone do grafik, zrzutów ekranu i obrazów z przezroczystością. Zdjęcie zapisane jako PNG jest zazwyczaj 3 do 5 razy większe niż to samo zdjęcie jako JPEG lub WebP. Używaj odpowiedniego formatu do typu treści. Sprawdź nasz przewodnik porównania formatów, aby poznać szczegóły.

Pomijanie atrybutów szerokości i wysokości. Bez wyraźnych wymiarów przeglądarka nie wie, ile miejsca zarezerwować na obraz, dopóki go nie załaduje. Powoduje to przesunięcia układu, co szkodzi wynikowi CLS i denerwuje użytkowników.

Przesadna kompresja. Obniżenie jakości do 30 lub 40% w celu uzyskania małych plików powoduje widoczne artefakty. W przypadku obrazów webowych jakość 75-82% stanowi odpowiedni balans między rozmiarem a wyglądem.

Ignorowanie wymiarów obrazów. Skompresowanie zdjęcia 4000px do jakości 80% jest dobre, ale jeśli jest wyświetlane z szerokością 600px na stronie, wciąż wysyłasz znacznie więcej pikseli niż potrzeba. Najpierw zmień rozmiar do wymiarów wyświetlania, a potem kompresuj.

Nieużywanie WebP. Obsługa WebP w przeglądarkach jest już powszechna. Jeśli wciąż serwujesz wyłącznie JPEG i PNG, tracisz 25-35% oszczędności rozmiaru pliku.

Praktyczne podejście

W przypadku większości projektów webowych sprawdza się następujące podejście:

  1. Zmień rozmiar i skompresuj obrazy przed commitem, używając narzędzia online takiego jak Bulk Image Compressor lub lokalnego skryptu.
  2. Dodaj wtyczkę do budowania jako siatkę bezpieczeństwa, która wyłapie wszystko, co się prześlizgnęło.
  3. Użyj leniwego ładowania i responsywnych obrazów w swoim HTML-u.
  4. Serwuj przez CDN.

Nie musisz robić wszystkich czterech rzeczy od pierwszego dnia. Zacznij od pierwszego kroku. To samodzielnie zrobi zauważalną różnicę w czasie ładowania Twoich stron.

Ready to compress your images?

Bulk compress JPEG, PNG, WebP, and AVIF images right in your browser. No uploads, no sign-ups.

Try Bulk Image Compressor