2013-04-20 7 views
14

Per i progetti di django esiste un fantastico strumento chiamato django-compressor. Unisce tutti i js o file css sotto compress tag modello in un solo file memorizzato nella cache, come questo:Python/Tornado - compressione di file statici

{% 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 %} 

mi chiedo se non v'è nulla di simile per i progetti di tornado? O forse qualche soluzione alternativa/alternativa?

Ho trovato il progetto this su github, ma non è più gestito.

risposta

7

Dai uno sguardo allo tornado_utils, dovrebbe fare quello che vuoi. Soprattutto prendere guardare tornado_static.py

tornado_static è un modulo per la visualizzazione di risorse statiche in una ragnatela Tornado applicazione.

Si può fare in modo di unire, comprimere e dare URL rinominazioni ideali adatto per la cache HTTP aggressiva.

+0

Grazie mille! È stato un po 'complicato da configurare a causa della mancanza della documentazione, ma funziona. – alecxe

1

Per quanto ho capito da esaminando la open-source tornado progetti non v'è alcun modo standard e canonica di fare statici-files minimizzazione e la compressione nel "mondo tornado".

Le diverse opzioni che ho visto, sono:

Solo le prime due opzioni sono specifiche del tornado. Altri strumenti devono essere vincolati al rendering dei modelli di Tornado e ai file statici che servono i meccanismi manualmente.

2

L'opzione migliore che ho visto finora è WebAssets.

Dalla documentazione: webassets è una libreria generale, la dipendenza indipendente per la gestione il patrimonio della tua applicazione web. Può unire e comprimere i file CSS e JavaScript, supportando un'ampia varietà di filtri diversi, e supporta l'utilizzo di compilatori come CoffeeScript o Sass.

Si può usare in modalità standalone con tornado (si veda la specific documentation).

Set up è facile e abbastanza semplice:

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

Naturalmente è possibile personalizzare gran lunga migliore. Il resto è abbastanza ben spiegato nella documentazione.

Caratteristiche principali:

  • facile integrazione
  • possibile comprimere file statici in anticipo (strumento da riga di comando)
  • possibile comprimere file statici al volo
  • supporta la maggior parte Minimizzando/librerie di compressione (JS, CSS)
  • Supporta la compilazione di LESS/SASS all'interno del browser
  • supporta la compressione dei modelli di JS all'interno del browser (manubri ...)
  • Supporta CSS sprite mapper

Esempio di ciò che un modello (qui, Jinja2) si presenta come dopo una corretta configurazione:

# 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 %} 

Ho usato WebAssets legato a Flask per un anno senza problemi ed è perfettamente affidabile, oltre che ben mantenuto: è lì da diversi anni, e last commit to date was yesterday.

+0

@alecxe Precisione: so che è un framework completo di gestione delle risorse e non una semplice libreria come richiesto, ma penso che sia di qualità ed è un'alternativa che vale la pena scavare. Dimmi cosa pensi quando hai l'opportunità di approfondire. – Jivan

+1

Grazie per un'opzione interessante. Penso che possa essere usato in modalità standalone con tornado. Spero di avere il tempo di valutarlo oggi - tornerò da te. – alecxe

+0

Ho esaminato diversi progetti che usano 'tornado' +' webassets' (ad esempio, [questo] (https://github.com/bashwork/speleo/tree/master/speleo.service/service)). L'integrazione è abbastanza facile e trasparente. Buona opzione Grazie ancora! – alecxe