Dlaczego minimalizacja HTML / JavaScript jest korzystna

14

Dlaczego minimalizacja HTML / JavaScript jest korzystna, gdy protokół HTTP obsługuje już kompresję danych gzip?

Zdaję sobie sprawę, że minimalizacja Javascript / HTML może znacznie zmniejszyć rozmiar plików JavaScript / HTML poprzez usunięcie niepotrzebnych białych znaków i być może zmianę nazw zmiennych na kilka liter każda, ale algorytm LZW nie radzi sobie szczególnie dobrze, gdy jest wiele powtórzeń znaki (np. dużo białych znaków?)

Zdaję sobie sprawę, że niektóre narzędzia minimalizacji Javascript nie tylko zmniejszają rozmiar. Na przykład kompilator zamykający Google próbuje również poprawić wydajność kodu poprzez wprowadzenie funkcji i wykonanie innych analiz. Ale głównym celem minimalizacji Javascript jest zwykle zmniejszenie rozmiaru pliku.

Zdaję sobie również sprawę, że istnieją inne powody, dla których możesz chcieć zminimalizować oprócz performance, takie jak zaciemnianie kodu. Ale znowu powód ten zwykle nie jest podkreślany tak bardzo, jak wzrost wydajności i zmniejszenie rozmiaru pliku. Na przykład kompilator zamknięcia nie jest reklamowany jako narzędzie zaciemniania, ale jako narzędzie do zmniejszania rozmiaru kodu i zwiększania prędkości pobierania.

Ile wydajności naprawdę zyskujesz dzięki minimalizacji Javascript / HTML, kiedy już znacznie zmniejszasz rozmiar pliku dzięki kompresji gzip?

Channel72
źródło

Odpowiedzi:

11

Ponieważ kompresja gzip ma swój własny narzut (CPU). Minification to pierwsza kompresja „nisko wisząca”, którą można zastosować bez obciążenia procesora.

Mogą się one wydawać nieznaczące, jednak liczby wkrótce będą miały sens, gdy w grę wchodzi waga.

Co więcej, dzięki minimalizacji masz mniej gzip.

Ciemna noc
źródło
3
Czy współczesne serwery sieciowe faktycznie rozpakują pliki javascript dla każdego żądania? Wydaje się prawdopodobne, że serwer będzie buforował statyczną zawartość spakowaną gzipem, ponieważ jest mało prawdopodobne, aby się zmieniła.
aaberg
@ aaberg Mimo to, to więcej buforowanych danych na serwerze. (nie to, że buforowanie nie jest dobre)
dreszcze42
@ chilis42: Jeśli to jest problem, serwery mogą obsługiwać wstępnie spakowane pliki z samego systemu plików.
herby
+1 dla skali. Jeśli masz 10 użytkowników i 100 odsłon dziennie, nie ma znaczenia. Jeśli potrzebujesz na serwerze 100 000 trafień na godzinę, to znaczna oszczędność.
SoylentGray
2
Coś mi mówi, że uruchomienie kompilatora JavaScript w pełnej skali i kilka zoptymalizowanych uruchomień na wewnętrznej reprezentacji, wszystko to często implementowane w Javie nie jest niskim obciążeniem procesora .
Oleg V. Volkov
5

Minification + gzip ogólnie daje lepsze wyniki, ponieważ gzip jest ogólnym algorytmem, nieprzystosowanym specjalnie do jednego lub drugiego wejścia, podczas gdy minifikator jest świadomy jego zawartości i może działać tak, jak ogólny algorytm kompresji. Może sobie również pozwolić na straty (pomyśl: całkowicie wyeliminuj komentarze i białe znaki - to 100% kompresji dla tych danych, jak możesz to pokonać?), Podczas gdy ogólna kompresja nie.

Oleg V. Volkov
źródło
2

Możesz nie uzyskać zbyt dużej wydajności, ale nadal zmniejszysz wykorzystanie przepustowości. Jeśli możesz ogolić kilka KB z plików js (i css) poprzez minimalizację (i użycie sprite'ów css w celu zmniejszenia liczby żądań) i obsługujesz 1000 użytkowników dziennie, po miesiącu znacznie zmniejszysz przepustowość.

Steve Whitehouse
źródło
1
+1: Minifikacja dotyczy oszczędności łącznie. Może to pomóc w szybszym wykonaniu pojedynczego żądania, ale jego celem jest zmniejszenie zużycia przepustowości w miarę upływu czasu.
Joel Etherton
1

Jedną z najdroższych rzeczy, które robisz w aplikacji sieciowej, jest wysyłanie rzeczy w dół. Wysyłanie mniejszej ilości rzeczy niemal zawsze jest wygraną netto, jeśli płacisz w cyklach procesora.

Ponadto nie mam żadnych naukowych podstaw, aby to poprzeć, ale spodziewam się, że narzędzia do minimalizacji prawdopodobnie lepiej skompresują javascript niż gzip, jeśli z innych powodów niż narzędzia do minimalizacji są specyficzne dla domeny i można je dostroić, aby lepiej kompresowały javascript, podczas gdy gzip to ogólne narzędzie i pójdzie na kompromis w środku.

Wyatt Barnett
źródło