Minifikacja HTML? [Zamknięte]

99

Czy istnieje narzędzie online, do którego możemy wprowadzić źródło HTML strony i które zminimalizuje kod?

Zrobiłbym to dla plików aspx, ponieważ nie jest dobrym pomysłem, aby serwer sieciowy je zgzował ...

Paulo
źródło
19
Kiedy używanie programu gzip na serwerze jest złym pomysłem?
Chuck
5
Czytałem, że ponieważ strony aspx nie są plikami statycznymi, nie będą buforowane przez IIS, a więc będą gzipować stronę przy każdym żądaniu ...
Paulo
23
... i czy to problem? Chyba że serwer ma już 99,9% procesora, prawdopodobnie nie. gzipping jest zwykłą czynnością i znacznie skuteczniejszy niż jakakolwiek „minifikacja”.
bobince
2
Odpowiedzi tutaj są nieaktualne, nie wspominając o tym, że niektóre z nich są błędne. Sprawdź moje wyjaśnienie problemu i odpowiednie narzędzie .
Salvador Dali,

Odpowiedzi:

63

Być może wypróbuj program HTML Compressor , oto tabela przed i po pokazująca, co może zrobić (w tym dla samego przepełnienia stosu):

Przepraszamy, markdown nie ma koncepcji tabel

Zawiera wiele opcji optymalizacji stron, w tym minimalizację skryptów (ompressor, Google Closure Compiler, Twój własny kompresor) tam, gdzie byłoby to bezpieczne. Domyślny zestaw opcji jest dość konserwatywny, więc możesz zacząć od tego i eksperymentować z włączaniem bardziej agresywnych opcji.

Projekt jest bardzo dobrze udokumentowany i wspierany.

Tim Post
źródło
58

Nie rób tego . Lub raczej, jeśli nalegasz, zrób to po zakończeniu bardziej znaczących optymalizacji witryny. Szanse są bardzo duże, że koszt / korzyść takiego wysiłku jest znikoma, zwłaszcza jeśli planujesz ręcznie używać narzędzi online do obsługi każdej strony.

Użyj YSlow lub Page Speed, aby określić, co naprawdę musisz zrobić, aby zoptymalizować swoje strony. Domyślam się, że zmniejszenie liczby bajtów HTML nie będzie największym problemem Twojej witryny. O wiele bardziej prawdopodobne jest, że kompresja, zarządzanie pamięcią podręczną, optymalizacja obrazu itp. Będą miały większy wpływ na ogólną wydajność Twojej witryny. Te narzędzia pokażą Ci, jakie są największe problemy - jeśli poradziłeś sobie ze wszystkimi i nadal okaże się, że minifikacja HTML robi znaczącą różnicę, zrób to.

(Jeśli jesteś pewien, że chcesz to zrobić i używasz serwera httpd Apache, możesz rozważyć użycie mod_pagespeed i włączenie niektórych opcji w celu zmniejszenia białych znaków itp., Ale pamiętaj o ryzyku ).

Zac Thompson
źródło
25
Co jest złego w optymalizacji, jeśli zminimalizowany kod jest łatwy do odczytania przy użyciu automatycznego upiększania?
12
Prawdopodobnie nie jest to największy problem - ale jeśli uruchamianie znaczników przez minifikację zestawu wyrażeń regularnych podczas kompilacji z dev do qa lub prod jest trywialnym procesem, to dlaczego nie chcesz wysyłać mniejszych dokumentów znaczników?
Will Peavy,
26
Właściwie nie jest to odpowiedź na pierwotne pytanie :(
Chuck Le Butt
7
@Will, prawie na pewno nie jest to trywialny proces, aby uruchomić HTML poprzez minifikację wyrażeń regularnych, a nawet użycie odpowiedniego parsera prawdopodobnie nie jest trywialne ani szybkie. Co więcej, w przeciwieństwie do minifikacji JS / CSS, minifikacja HTML nie będzie bezstratna: każdy tag może mieć styl white-space: pre, a minifikacja zniszczy wstępnie sformatowany tekst.
powiek
3
@eyelidlessness - obecnie mam tysiące stron, które są zminimalizowane przez wyrażenia regularne, zanim zostaną wyświetlone. Ta funkcja nie jest skomplikowaną ani kosztowną częścią systemu. ... Z drugiej strony, gdybyś chciał przeanalizować styl obliczony, aby uniknąć zmniejszania elementów stylizowanych za pomocą white-space:pre, to tak, kompresja HTML byłaby bardziej złożona. Nie rozumiem jednak, dlaczego ktoś miałby chcieć używać spacji: pre zamiast używać elementu prelub code.
Will Peavy
34

Oto krótka odpowiedź na twoje pytanie: powinieneś zminimalizować swój HTML, CSS, JS . Istnieje łatwe w użyciu narzędzie zwane chrząknięciem . Pozwala zautomatyzować wiele zadań. Wśród nich JS , CSS , minifikacja HTML , konkatenacja plików i wiele innych .

Napisane tutaj odpowiedzi są skrajnie nieaktualne, a czasem wręcz nie mają sensu. Wiele się zmieniło od starego 2009 roku, więc spróbuję odpowiedzieć na to poprawnie.

Krótka odpowiedź - zdecydowanie powinieneś zminimalizować HTML . Dziś jest to trywialne i daje około 5% przyspieszenia . Aby uzyskać dłuższą odpowiedź, przeczytaj całą odpowiedź

W dawnych czasach ludzie ręcznie minimalizowali css / js (uruchamiając go za pomocą specjalnego narzędzia w celu zminimalizowania). Ciężko było zautomatyzować ten proces i zdecydowanie wymagało pewnych umiejętności. Wiedząc, że wiele witryn wysokiego poziomu nawet teraz nie używa gzip (co jest trywialne), zrozumiałe jest, że ludzie niechętnie zajmowali się minimalizacją html.

Dlaczego więc ludzie minifikowali js, ale nie html ? Podczas zmniejszania JS wykonujesz następujące czynności:

  • usunąć komentarze
  • usuń puste miejsca (tabulatory, spacje, znaki nowej linii)
  • zmień długie nazwy na krótkie ( var isUserLoggedInna var a)

Co dawało dużą poprawę nawet w dawnych czasach. Ale w html nie można było w skrócie zmienić długich nazw, również w tym czasie nie było prawie nic do komentowania. Więc jedyne, co pozostało, to usunąć spacje i znaki nowej linii. Co daje tylko niewielką poprawę.

Jeden błędny argument tutaj napisany jest taki, że ponieważ zawartość jest obsługiwana przez gzip, minifikacja nie ma sensu. To jest całkowicie błędne. Tak, ma sens, że gzip zmniejsza poprawę minifikacji, ale po co gzipować komentarze, białe spacje, jeśli można je odpowiednio przyciąć i gzip tylko ważną część. To tak samo, jakbyś miał folder do zarchiwizowania, który zawiera jakieś bzdury, których nigdy nie użyjesz, i decydujesz się po prostu go spakować, zamiast czyścić i spakować.

Kolejnym argumentem, dlaczego minifikacja nie ma sensu, jest to, że jest to nudne. Może tak było w 2009 roku, ale po tym czasie pojawiły się nowe narzędzia. W tej chwili nie musisz ręcznie zmniejszać swoich znaczników. W przypadku rzeczy takich jak Grunt instalacja grunt-contrib-htmlmin (opiera się na HTMLMinifier od @kangax) i skonfigurowanie go do zminimalizowania HTML jest trywialne . Wszystko, czego potrzebujesz, to około 2 godzin, aby nauczyć się pomrukiwać i wszystko skonfigurować, a potem wszystko odbywa się automatycznie w mniej niż sekundę. Wygląda na to, że 1 sekunda (którą można nawet zautomatyzować, aby nic nie robić za pomocą funkcji grunt-contrib-watch ) nie jest tak zła dla około 5% poprawy (nawet przy użyciu gzip).

Kolejnym argumentem jest to, że CSS i JS są statyczne , a HTML jest generowany przez serwer, więc nie można go wstępnie zminifikować. Był to również prawda w 2009 roku, ale obecnie więcej i więcej miejsca są patrząc jak jeden app strony, gdzie serwer jest cienka, a klient robi cały routing, templating i inne logiki. Serwer dostarcza więc tylko JSON, a klient go renderuje. Tutaj masz dużo kodu HTML dla strony i różne szablony.

Więc na koniec moje przemyślenia:

Salvador Dali
źródło
3
Minfying HTML jest absolutnie nie trywialne, jak spacje są istotne w HTML i czy dana spacje mogą zostać usunięte zależy od CSS. Ponadto cienkie klienty są okropne i moim zdaniem nie można ich podawać jako dobrego argumentu przeciwko problemom związanym z minimalizacją dynamicznego HTML. (Jednym dobrym sposobem na zrobienie tego jest wybranie silnika szablonów [Haml, Jade itp.], Który nie zawiera niepotrzebnych białych znaków w renderowanym wyniku.)
Ry-
Kompresja HTML @minitech jest trywialna, istnieje również kilka możliwych problemów z białymi znakami (np <span>.). Przede wszystkim zawsze możesz znaleźć sposób na napisanie prawidłowego kodu HTML, dzięki czemu będzie on agnostyczny. Również możesz być zaskoczony, ale minifier JS / CSS może również wprowadzić błąd - co nie oznacza, że ​​nie powinieneś go używać. Tak więc dwa sposoby rozwiązania problemu: naucz się pisać niezależne od białych znaków znaczniki, przetestuj swój produkt przed / po minifikacji (CSS / HTML / JS). Również w Minifier możesz określić, które spacje chcesz zachować.
Salvador Dali,
Poprawne minifier JavaScript w nie szalonym kodzie (tj. Kodzie, który nie czyta się sam lub nie oszukuje przez synchronizację) nie może wprowadzić błędu. I nie, nie zawsze istnieje sposób na napisanie kodu HTML niezależnego od białych znaków, szczególnie dlatego, że HTML znowu nie jest niezależny od białych znaków. W ogóle. Upewnij się, że przetestowałeś kopiowanie i wklejanie, jeśli uważasz, że marginesy to przycinają. Określanie białych znaków, które chcę zachować, brzmi jak strata czasu (z wyjątkiem Google)…
Ry-
@minitech, czy możesz mi pokazać CSS, którego nie da się napisać w sposób niezależny od białych znaków? Od dawna minimalizuję html i do tej pory nie widziałem żadnych problemów.
Salvador Dali,
* { white-space: pre; }jest oczywiste, ale jeśli usuwasz wszystkie białe znaki, a nie tylko zwijasz je (zastępując je marginesami), tekst może się niepoprawnie kopiować i siać spustoszenie w przeglądarkach tekstowych i czytnikach ekranu.
Ry-
23

Napisałem narzędzie internetowe do minifikacji HTML. http://prettydiff.com/?m=minify&html

To narzędzie działa według następujących zasad:

  • Wszystkie komentarze HTML zostaną usunięte
  • Ciągi białych znaków są konwertowane na pojedyncze znaki spacji
  • Niepotrzebne białe znaki wewnątrz tagów są usuwane
  • Znaki odstępu między dwoma tagami, jeśli jeden z tych dwóch tagów nie jest singletonem, są usuwane
  • styleZakłada się, że cała zawartość tagu jest CSS i jako taka jest zminimalizowana
  • scriptZakłada się, że cała zawartość tagu jest JavaScriptem, chyba że podano inny typ multimediów, a następnie zminimalizowano jako taką
    • Minifikacja CSS i JavaScript wykorzystuje mocno rozwidloną formę JSMin. To rozwidlenie zostało rozszerzone, aby obsługiwać natywnie CSS, a także obsługiwać składnię SCSS. Automatyczne wstawianie średników jest obsługiwane w przypadku minifikacji JavaScript, jednak automatyczne wstawianie nawiasów klamrowych nie jest jeszcze obsługiwane.
    austincheney
    źródło
    7
    Cześć, usuwa tę linię! <!--[if IE 8.0]><link rel="stylesheet" href="css/ie8.css" type="text/css" /><![endif]-->
    UnLoCo
    1
    tak, to byłaby katastrofa, jeśli używasz ko!
    Ray Suelzer,
    8

    To zadziałało dla mnie:

    http://minify.googlecode.com/git/min/lib/Minify/HTML.php

    Nie jest to już dostępne narzędzie online, ale bycie prostym PHP jest dość łatwe, możesz je po prostu uruchomić samodzielnie.

    Nie zapisałbym jednak skompresowanych plików, rób to dynamicznie, jeśli naprawdę musisz, i zawsze lepiej jest włączyć kompresję serwera Gzip. Nie wiem, jak to jest zaangażowane w IIS / .Net, ale w PHP jest to tak proste, jak dodanie jednej linii do globalnego pliku dołączanego

    adamJLev
    źródło
    6

    CodeProject ma opublikowany przykładowy projekt ( http://www.codeproject.com/KB/aspnet/AspNetOptimizer.aspx?fid=1528916&df=90&mpp=25&noise=3&sort=Position&view=Quick&select=2794900 ) do obsługi niektórych z następujących sytuacji. .

    • Łączenie wywołań ScriptResource.axd w jedno wywołanie
    • Kompresuj wszystkie skrypty po stronie klienta na podstawie możliwości przeglądarki, w tym gzip / deflate
    • ScriptMinifier do usuwania komentarzy, wcięć i podziałów wierszy.
    • Kompresor HTML do kompresji wszystkich znaczników HTML w oparciu o możliwości przeglądarki, w tym gzip / deflate.
    • I - co najważniejsze - HTML Minifier do zapisywania całego kodu HTML w jednej linii i minimalizacji go na możliwym poziomie (w trakcie tworzenia).
    Leniwy DBA
    źródło
    3

    Dla platformy Microsoft .NET istnieje biblioteka o nazwie WebMarkupMin , która generuje minimalizację kodu HTML.

    Dodatkowo istnieje moduł do integracji tej biblioteki z ASP.NET MVC - WebMarkupMin.Mvc .

    Andrey Taritsyn
    źródło
    1

    wypróbuj http://code.mini-tips.com/html-minifier.html , to jest biblioteka .NET Libary dla Html Minifier

    HtmlCompressor to mała, szybka i bardzo łatwa w użyciu biblioteka .NET, która minimalizuje dane źródło HTML lub XML poprzez usuwanie dodatkowych białych znaków, komentarzy i innych niepotrzebnych znaków bez naruszania struktury treści. W rezultacie strony stają się mniejsze i ładują się szybciej. Dostępna jest również wersja kompresora uruchamiana z wiersza poleceń.


    źródło