You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django-compressor CACHE/js目录占用空间过大 重复生成JS文件求助

问题根因

  1. 未开启COMPRESS_OFFLINE离线压缩模式,默认使用在线实时压缩。如果你的{% compress js %}模板块中包含动态可变内容(比如嵌入了用户ID、请求时间戳、单次有效的随机值、动态拼接的脚本路径,或者存在和用户/请求上下文相关的条件判断逻辑,如{% if user.is_authenticated %}等),每次请求的压缩源内容不一致,compressor会计算不同的哈希值,每次都生成新的output js文件,这是核心问题。
  2. 没有执行离线压缩预生成静态资源,所有压缩操作都在用户请求时触发,高并发场景下如果多个请求同时命中未缓存的资源,也可能出现重复生成的情况,但该场景不会生成几十万量级的文件。
  3. 虽然你配置了memcached作为默认缓存,但如果memcached内存占满触发LRU淘汰,compressor的缓存key被清理后会重复生成已有的资源文件,放大存储空间占用。

修复步骤

  1. 首先排查模板压缩块:把{% compress js %}块里的所有动态内容、和请求/用户上下文相关的逻辑全部移到压缩块外面,压缩块内仅保留完全静态的JS文件引用、固定不变的JS代码,确保所有请求命中的压缩源内容完全一致,不会生成不同哈希的资源文件。
  2. 开启离线压缩模式:在生产环境配置中增加以下配置:
COMPRESS_OFFLINE = True

开启后django-compressor只会读取预先生成的压缩文件,不会在用户请求时实时生成新文件,从根源上避免动态生成文件的问题。
3. 调整部署流程:每次上线部署时,在执行完python manage.py collectstatic命令后,新增执行python manage.py compress命令,预生成所有需要的压缩静态资源,生成的文件会直接存入CACHE/js目录,运行时直接读取不会再生成新文件。
4. 临时紧急处理:当前先删除CACHE/js下的所有文件,执行完预生成压缩文件的命令后,可临时将CACHE/js目录权限设为只读,防止程序写入新文件,避免磁盘再次被快速打满。
5. 如果你确实需要保留在线压缩模式,可增加以下优化配置:

# 压缩文件缓存过期时间设为30天,避免缓存key频繁被淘汰
COMPRESS_REBUILD_TIMEOUT = 2592000
# 开启旧缓存文件自动清理
COMPRESS_CLEANUP_OLD = True
# 旧压缩文件保留时长,默认30天
COMPRESS_CLEANUP_AGE = 2592000

内容的提问来源于stack exchange,提问作者user12758446

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 23:24:02