Kolega podlinkował mi dziś test zużycia pamięci przez przeglądarki. Test jest zaopatrzony w ładny wykres pokazujący która przeglądarka ile żre, porządny opis na czym test polegał itp. Tylko wnioski wyciągnięte przez autora testu jakieś ubogie.

Autor, Sam Allen, napisał program który odpali w przeglądarce 150 najpopularniejszych stron i będzie monitorował zużycie pamięci. Opisał, na czym dokładniej polegał test i przedstawił wyniki w formie ładnego wykresu.

Zastanawia mnie, jakie to ma znaczenie, ile pamięci przeglądarka zajmuje? Na maszynie z 4GiB pamięci operacyjnej (taka była maszyna testowa) kiszenie się procesu na kilkuset MiB przy kilkuset otwartych stronach jest trochę bez sensu. Ostatecznie więcej danych trzeba doczytywać z dysku, a ten ma dłuższy czas dostępu.

Pamiętam też, jak wykładowcy od wprowadzenia do programowania oraz algorytmów i struktur danych tłumaczyli, że czasem dodanie kilku zmiennych pozwala radykalnie podnieść wydajność programu. Jest to logiczne. Gdy weźmiemy podstawową strukturę, jaką jest lista uporządkowana to najłatwiej mieć zapisany tylko wskaźnik na początek listy. Jednak wygodnie jest też posiadać wskaźnik na koniec listy, gdyż chcąc dodać element na koniec, z najwyższym (lub najniższym, zależnie od rodzaju listy) priorytetem możemy po prostu to zrobić, bez przeszukiwania całej listy. Posiadając wskaźniki na wybrane środkowe elementy możemy dalej skrócić czas odnajdywania właściwego miejsca w liście.

Wybierając bardziej skomplikowaną strukturę danych, drzewo czerwono-czarne mamy jeszcze większy nadmiar danych, bo trzymamy dla każdego węzła informację o jego lewym i prawym child’zie (sorry, słowo dziecko mi jakoś nie odpowiada i z pedofilią się kojarzy). Oczywiście możemy ułożyć drzewo w formie tablicy. Zmniejszymy nadmiar, ale dodanie elementu będzie się odbywało koszem większej ilości operacji przepisywania danych przy wyważaniu drzewa.

Mając na uwadze, że często większa złożoność pamięciowa wiąże się z mniejszą złożonością czasową mogę postawić tezę, że programy używające mniej danych są wolniejsze od tych, które mają największe zapotrzebowanie na RAM, prawda?

Wracając do pytania, które zadałem w temacie: po co się robi benchmark zużycia RAMu? Ram jest tani. Wygodniej jest dołożyć kość RAMu niż tracić czas na wykonanie powolnego, ale oszczędnego pod względem pamięci algorytmu. Po co testować coś, co dla końcowego odbiorcy będzie bez większego znaczenia i pokazywać jako przewagę, podczas gdy działanie programu z najlepszym wynikiem teście jest dużo gorsze?

Benchmark zużycia pamięci przez przeglądarki Safari, Firefox, Opera i Chrome: http://dotnetperls.com/chrome-memory