Python/Tornado - сжатие статических файлов
Для проектов django существует удивительный инструмент django-compressor. Он объединяет все js или css файлы в теге compress
template в отдельный кешированный файл, например:
{% 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 %}
Мне интересно, есть ли что-то подобное для проектов торнадо? Или, может быть, какое-либо решение/альтернативное решение?
Я нашел этот проект на github, но он больше не поддерживается.
Ответы
Ответ 1
Посмотрите tornado_utils, он должен делать то, что вы хотите. Особенно обратите внимание на tornado_static.py
tornado_static - это модуль для отображения статических ресурсов в сети Tornado приложение.
Он может заботиться о слиянии, сжатии и предоставлении URL-адресов для идеальных переименований подходит для агрессивного HTTP-кэширования.
Ответ 2
Лучший вариант, который я видел до сих пор, - WebAssets.
Из документации: webassets - это общая, независимая от зависимостей библиотека для управления активы вашего веб-приложения. Он может объединять и сжимать ваш CSS и файлы JavaScript, поддерживающие широкий спектр различных фильтров, и поддерживает работу с компиляторами, такими как CoffeeScript или Sass.
Вы можете использовать его в автономном режиме с торнадо (см. специальную документацию).
Настроить легко и довольно просто:
from webassets import Environment
static_directory = "../static"
output_directory = "/static"
my_env = Environment(static_directory, output_directory)
Конечно, вы можете настроить его гораздо лучше. Остальное хорошо объяснено в документации.
Основные возможности:
- Простая интеграция
- Можно заранее сжать статические файлы (инструмент командной строки)
- Возможность сжатия статических файлов на лету
- Поддерживает большинство библиотек для минимизации/сжатия (JS, CSS)
- Поддержка LESS/SASS компиляции внутри браузера
- Поддерживает сжатие JS-шаблонов внутри браузера (Handlebars...)
- Поддержка CSS-спрайта
Пример того, как выглядит шаблон (здесь, Jinja2), после правильной конфигурации:
# 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 %}
Я использую WebAssets, привязанный к Flask в течение года без всяких хлопот, и он отлично надежен, а также хорошо поддерживается: он существует уже несколько лет и последняя фиксация на сегодняшний день была вчера.
Ответ 3
Насколько я понимаю из поиска проектов с открытым исходным кодом tornado
нет стандартного и канонического способа минимизации и сжатия статических файлов в "мире смерча".
Различные варианты, которые я видел, следующие:
Только первые два варианта зависят от торнадо. Другие инструменты необходимо связать с механизмом рендеринга шаблонов Tornado и механизмами работы статических файлов вручную.