使用Django将资产高效传输到CDN的最佳方法是什么?

5 投票
2 回答
2005 浏览
提问于 2025-04-17 00:05

在部署的时候,有一个很好的做法就是压缩静态资源(比如js和css),然后把它们放到CDN上。Django有一些应用可以处理这方面的事情,比如django-compressordjango-pipeline,但它们各自都有一些问题。例如:

  • django-compressor在处理请求和响应的时候,想要生成内容,即使你已经开启了离线压缩。
  • django-pipeline没有存储哈希值的地方,所以它需要遍历写入压缩文件的路径,使用正则表达式匹配文件名,排序那些可能的匹配项,然后返回列表中的最后一个。这种方式在CDN上是无法做到的!这是什么情况?

我想要的(看起来很合理的)工作流程是这样的:

  1. 压缩资源,使用内容的哈希值作为文件名
  2. 把这些文件名存储在一个缓存、模块或者其他可以在渲染HTML时轻松引用的地方。

我不应该在所有的前端节点上都放置每一个静态文件——只需要在CDN上就可以了。

现在,我觉得我最好的选择是给django-pipeline加点代码来支持缓存文件名的哈希值,但我希望能有一个现成的解决方案。

在Django中,我有哪些最佳选择?有没有呢?

谢谢!

2 个回答

1

你在使用Django 1.3吗?如果是的话,你可以自己写一个自定义文件存储后端,这样就可以把文件上传到CDN(内容分发网络)。幸运的是,如果你想用亚马逊的S3服务,那么django-storages已经帮你实现了这个功能!

6

django-pipeline 1.1.12 现在可以缓存哈希值了,所以你应该没问题,具体可以查看 更新日志

声明: 我是 django-pipeline 的作者之一。

撰写回答