【问题标题】:Django compressor takes too much time to response (15 seconds)Django 压缩器响应时间过长(15 秒)
【发布时间】:2014-10-15 09:51:03
【问题描述】:

我有 app.html 页面,其中包含许多咖啡脚本(58 个文件)。 我使用 django-compressor 来编译它们:

{% compress js %}
<script type="text/coffeescript" src="/static/scripts/commons/commons.coffee"></script>
<script type="text/coffeescript" src="/static/scripts/app/model/Storage.coffee"></script>
<script type="text/coffeescript" src="/static/scripts/app/model/Unit.coffee"></script>
....
{% endcompress %}

一切都编译并工作,但页面响应需要 15 秒。我认为第一次请求应该没问题(应该编译咖啡),但第二次、第三次和所有进一步的请求都需要 15 秒。

输出总是一样的:

<script type="text/javascript" src="/static/CACHE/js/commons.33f0b9628e28.js"></script>
<script type="text/javascript" src="/static/CACHE/js/Storage.924e88456824.js"></script>
<script type="text/javascript" src="/static/CACHE/js/Unit.0fdebfecb96b.js"></script>
....

我不更改文件,我只是刷新页面。

似乎 django-compressor 在每次请求时都会重新编译所有文件(但编译后的 js 文件的名称不会改变,这很奇怪)。

有什么方法可以加速 django-compressor?

附言

  • 我通过 manage.py runserver 在本地运行 django。
  • DEBUG = True(我的 DEBUG 选项在 settings.py 中设置为 True)

【问题讨论】:

    标签: django django-compressor


    【解决方案1】:

    django-compressor 现在有一个缓存预编译器和加速咖啡编译的系统,只编译已经改变的文件。这加快了开发响应时间。

    https://github.com/django-compressor/django-compressor/pull/650

    只需添加到您的压缩器设置:

    COMPRESS_CACHEABLE_PRECOMPILERS = (
        'text/coffeescript',
    )
    

    【讨论】:

      【解决方案2】:

      我猜你已经设置了这个COMPRESS_ENABLED = True。设置为假。 也可以看看COMPRESS_OFFLINE,这样可以离线手动压缩静态:

      $ python manage.py compress
      

      这也会删除缓存键。顺便检查一下你的COMPRESS_CACHE_BACKEND

      【讨论】:

      • 如果我设置COMPRESS_ENABLED = True,我所有的咖啡都会合并到一个js文件中(这不是我想要的开发,我想要单独的文件),页面刷新现在很快,但是当我修改其中一个文件,再次刷新页面需要15秒。 python manage.py compress 不方便开发。 COMPRESS_CACHE_BACKEND 可以改变这种情况吗?我已经阅读了文档,上面写着The backend to use for caching, in case you want to use a different cache backend for Django Compressor. 但这是什么意思?缓存在 django 压缩器的上下文中到底做了什么?
      • 如果您使用DummyCache,它根本不会缓存,这就是我的意思。是的,您应该设置 COMPRESS_ENABLED = False 以使其不会在每个使用 DummyCache 的请求时压缩您的脚本。 “但是当我修改其中一个文件时,页面刷新再次需要 15 秒”那么这就是问题所在。您的脚本编译时间过长。
      • 那么,Django 压缩器不能只重新编译自上次页面刷新后更改的那些脚本?只能全部编译?
      • 可惜我没有用coffescript,所以不知道它是怎么编译的。可能有更好的实例编译工具,所以你可以这样做 {% if DEBUG %}path to compiled script{% else %}{% compress js %}{% endif %}。看看这个answer
      • 是的,似乎使用带有--watch 参数的coffee 命令工具在页面刷新速度方面会更有效。所以 django-compressor 不适合开发(如果你有很多咖啡文件)。谢谢你,穆拉德
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-24
      • 2016-07-20
      • 2018-11-19
      • 1970-01-01
      相关资源
      最近更新 更多