【问题标题】:Python/Tornado - compressing static filesPython/Tornado - 压缩静态文件
【发布时间】:2013-04-20 20:34:18
【问题描述】:

对于 django 项目,有一个很棒的工具叫做django-compressor。它将compress模板标签下的所有js或css文件合并到单个缓存文件中,如下所示:

{% 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 项目,但它不再维护。

【问题讨论】:

    标签: python django templates tornado django-compressor


    【解决方案1】:

    看看tornado_utils,它应该做你想做的事。尤其看看tornado_static.py

    tornado_static 是一个用于在 Tornado 网络中显示静态资源的模块 应用。

    它可以处理合并、压缩和为 URL 提供理想的重命名 适用于激进的 HTTP 缓存。

    【讨论】:

    • 非常感谢!由于缺少文档,配置起来有点棘手,但它可以工作。
    【解决方案2】:

    到目前为止我见过的最佳选择是 WebAssets

    来自文档: webassets 是一个通用的、独立于依赖的库,用于管理 Web 应用程序的资产。它可以合并和压缩你的 CSS 和 JavaScript 文件,支持各种不同的过滤器, 并支持使用 CoffeeScript 或 Sass 等编译器。

    您可以在 独立模式 中使用它与 tornado(请参阅 specific documentation)。

    设置简单直接:

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

    我已经使用与 Flask 绑定的 WebAssets 一年了,没有任何麻烦,它非常可靠,而且维护良好:它已经存在好几年了,last commit to date was yesterday

    【讨论】:

    • @alecxe Precision:我知道它是一个完整的资产管理框架,而不是你问的简单库,但我认为它质量上乘,是值得挖掘的替代方案。当你有机会进一步研究时,告诉我你的想法。
    • 感谢您提供有趣的选择。我认为它可以在龙卷风的独立模式下使用。我希望我今天有时间对其进行评估 - 会尽快回复您。
    • 我浏览了几个使用tornado + webassets(例如this one)的项目。集成非常简单和透明。不错的选择。再次感谢!
    【解决方案3】:

    据我了解,通过查看开源 tornado 项目,在“龙卷风世界”中没有标准和规范的静态文件压缩和压缩方式。

    我见过的不同选项是:

    只有前两个选项是特定于龙卷风的。其他工具需要手动绑定 Tornado 模板渲染和静态文件服务机制。

    【讨论】: