Jakie masz pytanie?

lub

Dlaczego współcześni programiści tworzą przeglądarki i inne aplikacje, nie zwracając uwagi na ich zasobożerność oraz podatność na zawieszanie się, a także na fakt, że po zamknięciu pliku lub karty zajęte zasoby nie są zwalniane?

przyczyny zasobożerności aplikacji dlaczego przeglądarki zużywają ram optymalizacja nowoczesnego oprogramowania
avatar

Gość (37.30.*.*)



Odpowiedź:

Wielu użytkowników komputerów z nostalgią wspomina czasy, gdy systemy operacyjne i programy mieściły się na dyskietkach, a każda operacja była optymalizowana pod kątem pojedynczych kilobajtów pamięci. Dzisiaj, otwierając kilka kart w przeglądarce lub uruchamiając prosty komunikator, widzimy, jak licznik zużycia pamięci RAM gwałtownie rośnie. Choć może się wydawać, że to wynik lenistwa programistów, rzeczywistość jest znacznie bardziej skomplikowana i wynika z ewolucji technologii, ekonomii oraz naszych własnych oczekiwań co do szybkości działania oprogramowania.

Era Electrona i uniwersalnych frameworków

Jednym z głównych powodów, dla których współczesne aplikacje desktopowe (takie jak Discord, Slack, Spotify czy Visual Studio Code) zużywają tak dużo zasobów, jest technologia, na której zostały zbudowane. Mowa o frameworku Electron. Pozwala on programistom tworzyć aplikacje komputerowe przy użyciu technologii webowych (HTML, CSS, JavaScript).

W praktyce oznacza to, że każda taka aplikacja uruchamia pod spodem własną, okrojoną instancję przeglądarki Chromium. Jeśli masz otwartych pięć różnych aplikacji tego typu, Twój komputer de facto obsługuje pięć oddzielnych przeglądarek internetowych. Dlaczego programiści to robią? Ponieważ pozwala to na drastyczne skrócenie czasu produkcji i łatwe przenoszenie kodu między Windowsem, macOS a Linuxem. W dzisiejszym świecie biznesu czas wprowadzenia produktu na rynek (Time to Market) jest często ważniejszy niż to, czy aplikacja zajmie 200 MB czy 800 MB pamięci RAM.

Bezpieczeństwo kosztem pamięci, czyli piaskownica

Przeglądarki internetowe, takie jak Chrome, Edge czy Firefox, stosują architekturę wieloprocesową. Dawniej jedna zawieszona strona mogła doprowadzić do zamknięcia całej przeglądarki. Dziś każda karta, wtyczka i rozszerzenie działają jako oddzielny proces w systemie.

Mechanizm ten, zwany izolacją procesów lub "piaskownicą" (sandboxing), ma dwa główne cele:

  1. Stabilność: Jeśli jedna karta ulegnie awarii, reszta przeglądarki działa dalej.
  2. Bezpieczeństwo: Izolacja sprawia, że złośliwy kod z jednej strony ma utrudniony dostęp do danych z innej karty (np. Twojego banku).

Ceną za to bezpieczeństwo jest ogromne zużycie zasobów. Każdy proces musi załadować własne biblioteki i silnik renderujący, co multiplikuje zapotrzebowanie na pamięć RAM.

Dlaczego pamięć nie jest zwalniana natychmiast?

Często obserwujemy zjawisko, w którym po zamknięciu karty lub pliku zużycie pamięci nie spada od razu. Może to wynikać z kilku czynników. Po pierwsze, współczesne systemy zarządzania pamięcią (Garbage Collection) nie działają w czasie rzeczywistym. Programy "sprzątają" niepotrzebne dane w określonych odstępach czasu lub gdy system operacyjny zgłosi, że zaczyna mu brakować miejsca.

Po drugie, przeglądarki stosują agresywne buforowanie (caching). Zamiast usuwać dane zamkniętej karty, trzymają je w pamięci RAM na wypadek, gdyby użytkownik kliknął przycisk "Cofnij" lub chciał szybko przywrócić zamkniętą sesję. Pamięć RAM, która nie jest używana, jest z punktu widzenia systemu pamięcią zmarnowaną, więc programy starają się ją wykorzystać do przyspieszenia działania, dopóki nie jest ona potrzebna innym procesom.

Ciekawostka: Prawo Wirth’a

Istnieje humorystyczne, ale trafne spostrzeżenie zwane prawem Wirtha, które mówi, że: „Oprogramowanie staje się wolniejsze szybciej, niż sprzęt staje się szybszy”. Oznacza to, że postęp w wydajności procesorów i pojemności dysków jest niemal natychmiast niwelowany przez coraz bardziej złożone i mniej zoptymalizowane warstwy kodu.

Złożoność nowoczesnego internetu

Współczesne strony internetowe to w rzeczywistości potężne aplikacje. Facebook, Gmail czy Mapy Google wykonują tysiące operacji w tle, przetwarzając grafikę, skrypty śledzące, animacje i multimedia. Przeglądarka musi to wszystko przetworzyć w ułamku sekundy.

Dodatkowo programiści korzystają z wielu gotowych bibliotek i warstw abstrakcji. Zamiast pisać kod od zera pod konkretny procesor, używają narzędzi, które działają wszędzie, ale są mniej wydajne. Optymalizacja kodu pod kątem zużycia każdego bajta pamięci jest procesem niezwykle czaso- i pracochłonnym. W dobie, gdy 16 GB pamięci RAM staje się standardem w laptopach biurowych, firmy wychodzą z założenia, że taniej jest kupić użytkownikowi więcej pamięci, niż płacić programistom za miesiące pracy nad optymalizacją.

Czy można coś z tym zrobić?

Choć jako użytkownicy mamy ograniczony wpływ na to, jak pisane są aplikacje, możemy zarządzać ich zasobożernością. Wiele nowoczesnych przeglądarek wprowadziło funkcje takie jak "Oszczędzanie pamięci", które usypiają nieaktywne karty, zwalniając zasoby dla tych, których aktualnie używamy. Warto również regularnie przeglądać zainstalowane rozszerzenia – każde z nich to dodatkowy proces, który stale obciąża system, nawet jeśli z niego nie korzystamy.

Podziel się z innymi: