2013-04-20 15 views
14

Dla projektów django dostępne jest niesamowite narzędzie o nazwie django-compressor. Łączy wszystkie pliki css js lub pod compress szablonu tag do pojedynczego pliku pamięci podręcznej, na przykład:Python/Tornado - kompresowanie plików statycznych

{% load compress %} 

{% compress css %} 
<link rel="stylesheet" href="/static/css/one.css" type="text/css" charset="utf-8"> 
<style type="text/css">p { border:5px solid green;}</style> 
<link rel="stylesheet" href="/static/css/two.css" type="text/css" charset="utf-8"> 
{% endcompress %} 

Zastanawiam się, czy istnieje coś takiego dla projektów tornado? A może jakieś obejście/alternatywne rozwiązanie?

Znalazłem projekt this na github, ale nie jest już utrzymywany.

Odpowiedz

7

Spójrz na tornado_utils, powinien zrobić to, co chcesz. Szczególnie wziąć spojrzeć na tornado_static.py

tornado_static to moduł do wyświetlania zasobów statycznych w internetowej aplikacji Tornado .

Może zająć się łączeniem, kompresowaniem i podawaniem adresów URL o doskonałych nazwach odpowiednich do agresywnego buforowania HTTP.

+0

Dziękuję bardzo! Konfiguracja była trudna ze względu na brak dokumentacji, ale działa. – alecxe

1

O ile mi zrozumieć patrząc na open-source tornado projektów nie ma standardowego i kanoniczny sposób robienia statyczne-Files minifikacji i kompresję w świecie „tornado”.

Poszczególne opcje widziałem, to:

Tylko dwie pierwsze opcje są specyficzne tornado. Inne narzędzia muszą być powiązane z renderowaniem szablonów Tornado i ręcznymi mechanizmami wyświetlania plików statycznych.

2

Najlepszą opcją jaką widziałem do tej pory jest WebAssets.

Z dokumentacji: webassets jest ogólny, niezależny zależność biblioteka do zarządzania aktywa aplikacji internetowej. Może łączyć i kompresować pliki CSS i JavaScript, obsługując wiele różnych filtrów, i obsługuje pracę z kompilatorami, takimi jak CoffeeScript lub Sass.

Można go używać w trybie autonomicznymz tornado (patrz specific documentation).

Set up jest łatwa i prosta:

from webassets import Environment 
static_directory = "../static" 
output_directory = "/static" 
my_env = Environment(static_directory, output_directory) 

Oczywiście można go dostosować znacznie lepiej. Reszta jest dość dobrze wyjaśniona w dokumentacji.

Główne cechy:

  • Łatwa integracja
  • Możliwość kompresji statycznych plików z góry (narzędzie wiersza polecenia)
  • Możliwość kompresji plików statycznych w locie
  • obsługuje większość minifying/biblioteki kompresji (JS, CSS)
  • Obsługa kompilacji LESS/SASS w przeglądarce
  • Obsługuje kompresję JS Szablony w przeglądarce (kierownica ...)
  • Obsługuje CSS Sprite Mapper

Przykład co szablon (tutaj Jinja2) wygląda po odpowiedniej konfiguracji:

# css 
{% assets filters="cssmin", output="css/compiled-layout.css", 
    "css/custom.css", 
    "css/bootstrap-datepicker.css", 
    "css/typeahead.css" %} 
    <link rel="stylesheet" type="text/css" href="{{ ASSET_URL }}"> 
{% endassets %} 

# js 
{% assets filters="jsmin", output="js/lib/compiled-libs.js", 
    "js/lib/jquery-2.1.1.min.js", 
    "js/lib/jquery-ui.min.js", 
    "js/lib/bootstrap.min.js", 
    "js/lib/bootstrap-datepicker.js", 
    "js/lib/d3.min.js", 
    "js/lib/typeahead.bundle.min.js", 
    "js/lib/moment.min.js", 
    "js/lib/handlebars-v2.0.0.js", 
    "js/global.js" %} 
    <script type="text/javascript" src="{{ ASSET_URL }}"></script> 
{% endassets %} 

Używam WebAssets przywiązanego do Flask przez rok bez żadnych kłopotów i jest całkowicie niezawodny, a także dobrze utrzymany: jest tam od kilku lat i last commit to date was yesterday.

+0

@alecxe Precyzja: Wiem, że jest to kompletna struktura zarządzania zasobami, a nie prosta biblioteka, o którą prosiłeś, ale myślę, że jest to jakość wykonania i jest alternatywą wartą kopania. Powiedz mi, co myślisz, kiedy będziesz miał okazję przyjrzeć się temu bliżej. – Jivan

+1

Dziękujemy za interesującą opcję. Myślę, że można go używać w trybie autonomicznym z tornadem. Mam nadzieję, że będę miał czas, aby to ocenić dzisiaj - skontaktuję się z Tobą. – alecxe

+0

Przeanalizowałem kilka projektów wykorzystujących 'tornado' +' webassets' (na przykład [ten jeden] (https://github.com/bashwork/speleo/tree/master/speleo.service/service)). Integracja jest łatwa i przejrzysta. Dobra opcja. Dzięki jeszcze raz! – alecxe

Powiązane problemy