Python/Tornado - 压缩静态文件

14
对于Django项目,有一个很棒的工具叫做django-compressor。它将所有js或css文件组合在compress模板标签下,形成单个缓存文件,像这样:
{% 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上找到了this项目,但它已不再维护。

3个回答

7
看看 tornado_utils,它应该能够满足你的需求。特别要看一下 tornado_static.py
tornado_static 是一个用于在 Tornado web 应用程序中显示静态资源的模块。它可以处理合并、压缩和提供 URL 的理想重命名,适合于积极的 HTTP 缓存。

非常感谢您!由于缺乏文档,配置有点棘手,但它能正常工作。 - alecxe

3
到目前为止,我看到的最好的选择是WebAssets
引用文档中说: webassets是一个通用的、独立于依赖关系的库,用于管理您的 Web 应用程序的资源。它可以合并和压缩您的 CSS 和 JavaScript 文件,支持各种不同的过滤器,并支持使用像 CoffeeScript 或 Sass 这样的编译器。
您可以在tornado中使用独立模式 (请参阅具体文档)。
设置很容易,而且非常直观。
from webassets import Environment
static_directory = "../static"
output_directory = "/static"
my_env = Environment(static_directory, output_directory)

当然,你可以更好地自定义它。其余的在文档中已经很好地解释了。
主要特点:
- 易于集成 - 可以提前压缩静态文件(命令行工具) - 可以动态压缩静态文件 - 支持大多数JS、CSS压缩库 - 支持浏览器内部LESS/SASS编译 - 支持浏览器内部JS模板压缩(Handlebars...) - 支持CSS sprite映射器
以下是配置正确的模板(这里是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 %}

我已经使用与Flask绑定的WebAssets一年了,没有任何麻烦,它非常可靠,而且维护得很好:它已经存在了几年,最后一次提交是昨天


@alecxe 精度:我知道它是一个完整的资产管理框架,而不是你所要求的简单库,但我认为它是质量上乘的选择,值得深入挖掘。当你有机会进一步了解时,请告诉我你的想法。 - Jivan
1
谢谢你提供这个有趣的选项。我认为它可以与tornado一起在独立模式下使用。希望今天我有时间评估它 - 我会回复你的。 - alecxe
我已经查看了几个使用 tornado + webassets 的项目(例如,这个)。集成非常简单和透明。是一个不错的选择。再次感谢! - alecxe

2
据我了解,从查看开源项目“tornado”来看,在“龙卷风世界”中没有标准和规范的静态文件缩小和压缩的方法。
我看到的不同选项有:
  • tornado_utils(请参见其他答案)
  • 最新的{{link2:torminify模块}}
  • Douglas Crockford的jsmin.c移植到Python,参见:
  • YUI CSS压缩器的Python移植版:
  • {{link6:slimit.minify()}} {{link7:slimit JavaScript解析器}}
只有前两个选项是针对龙卷风的。其他工具需要手动与Tornado模板渲染和静态文件服务机制绑定。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接