Python/Tornado - сжатие статических файлов - программирование
Подтвердить что ты не робот

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, но он больше не поддерживается.

4b9b3361

Ответ 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 и механизмами работы статических файлов вручную.