2012-07-29 21 views
11

Używam django templating i dla czytelności Mam html, która wygląda podobnie do następującego:Zagęszczanie/minifying dynamiczny html

{% if some_variable %} 
    text 
{% else %} 
    nothing exists here 
{% endif %} 

{% for item in set %} 
    {% if forloop.first %} 
...etc... 

Przekształca się następujący kod HTML w czasie wykonywania, który zawiera mnóstwo białych znaków i zwrotów :

text 

<div> 

    <li 

     class='some_class 

    > 

    some text 

    </li> 

</div> 

etc... 

Niektóre strony wyświetlają nawet ~ 3 000 linii html podczas przeglądania źródła strony.

Czy istnieje narzędzie do kompresji tego html w czasie wykonywania? A co z narzędziem do usuwania dodatkowych podziałów linii?

+1

Google okazało się to: http://www.soyoucode.com/2011/minify-html-output-django (nie jestem zaznajomiony z Django, więc nie wiem, czy w jakimś konkretnym przypadku jest to użyteczne). –

+1

czy wypróbowałeś django.middleware.gzip.GZipMiddleware, – mrok

+0

Prawdopodobnie potrzebujesz podejścia Django/Python HTMLTidy. –

Odpowiedz

5

Dla odrobiny tła jest to robione celowo, ponieważ mechanizm szablonowania Django nie dba obecnie o odkażanie linii, które oceniają puste miejsca po usunięciu tagów, a to spowoduje nałożenie pewnych drobnych kar za spełnienie wymagań w dostarczaniu odpowiedzi , ponieważ obejmuje etap przetwarzania końcowego, który ocenia pełną zawartość renderowanego szablonu.

Mimo to, jeśli potrzebujesz szybkiego rozwiązania, sugeruję użycie oprogramowania pośredniczącego odpowiedzi StripWhitespaceMiddleware, które usunie pozorne białe znaki z tekstowych odpowiedzi. Jest to dość szybkie i proste, wykorzystujące dopasowywanie wyrażenia regularnego, takie jak sam szablon. Bardziej podatkową, ale skuteczną alternatywą byłoby wdrożenie oprogramowania pośredniczącego do odpowiedzi, które wykorzystuje koder HTML, jeśli naprawdę zależy ci na tym, że biedni ludzie wciąż czytają nieprzetworzone odpowiedzi.

+2

Istnieją inne problemy związane z nadmiernymi odstępami czasu niż czytelność, np. Przepustowość na stronach ze znacznymi jednoczesnymi żądaniami, ale zwykle ma to związek z * większymi witrynami * takimi jak Yahoo, Facebook itp. Zgadzam się jednak z duchem twojej odpowiedzi, w tym białym polu jest zwykle problemem, który projektanci i osoby wykonawcze nie będące specjalistami IT mają "pwoblematyczne". Najlepszym przypadkiem, z jakim się zetknąłem, jest ten, w którym * znacznik źródłowy * został oceniony przez oznakowanie jako znak jakości kodu. Zabawne, co czasem płacimy za wypłatę. –

+0

Projektanci, typy wykonawcze inne niż IT i programiści z OCPD;)! –

1

Jeśli korzystasz z Nginxa, jego moduł Strip doskonale sprawdza się przy czyszczeniu html. Jest to czas rzeczywisty i przejrzysty. W ogóle nie musisz się martwić, gdy ustawisz go poprawnie.

http://wiki.nginx.org/HttpStripModule

2

Rozglądając Właśnie znalazłem Django rurociągu, po prostu starał, by teraz, middleware i to jest właśnie to, co mam oczekiwać. Minimalizuje wszystkie html i tekstowe węzły i utrzymuje węzły javascript nietknięte.

Implementacja oprogramowania pośredniego i podstawowy wynik testu trwa około 4 minut, wystarczy zainstalować i aktywować oprogramowanie pośrednie po zainstalowaniu oprogramowania pośredniego gzip lub nad ustawieniem MIDDLEWARE_CLASSES.

https://github.com/cyberdelia/django-pipeline

http://django-pipeline.readthedocs.org/en/latest/

2

myślę narzędziem rozwoju front-end, takich jak grunt-contrib-htmlmin, powinny zostać wykorzystane do minify pliki szablonów Django przed wdrożeniem ich do serwera produkcyjnego.

W ten sposób proces minimalizacji odbywa się w "czasie kompilacji" i oszczędza zasoby procesora serwera w celu zminimalizowania HTML w "czasie wykonywania".

To narzędzie jest pierwotnie przeznaczone do minimalizowania kodu HTML, ale działa również w przypadku szablonów Django, tak jak wypróbowałem.

+0

Niesamowite, myślałem o podobnym rozwiązaniu, w którym minifikacja mogłaby działać w czasie ładowania szablonu. – aisbaa

0

„Myślę, że narzędzie rozwoju front-end, takich jak grunt-contrib-htmlmin, powinny być stosowane do zminimalizuj pliki szablonów Django przed wdrożeniem ich na serwerze produkcyjnym. "

Potrzebowałem zrobić to jakiś czas temu, aby zwiększyć wydajność i zmniejszyć opóźnienie.Napisałem minimizer szablonu, który zminimalizuje HTML, CSS i JavaScript w twoich szablonach, tak aby strony zostały zminimalizowane. Integruje się z Django jako polecenie Django, rozumie zawiłości kuszącego języka Django i można go rozszerzyć. Można go znaleźć na PyPI pod poniższym linkiem:

django-template-minimizer