使用Django将资产高效传输到CDN的最佳方法是什么?
在部署的时候,有一个很好的做法就是压缩静态资源(比如js和css),然后把它们放到CDN上。Django有一些应用可以处理这方面的事情,比如django-compressor
和django-pipeline
,但它们各自都有一些问题。例如:
django-compressor
在处理请求和响应的时候,想要生成内容,即使你已经开启了离线压缩。django-pipeline
没有存储哈希值的地方,所以它需要遍历写入压缩文件的路径,使用正则表达式匹配文件名,排序那些可能的匹配项,然后返回列表中的最后一个。这种方式在CDN上是无法做到的!这是什么情况?
我想要的(看起来很合理的)工作流程是这样的:
- 压缩资源,使用内容的哈希值作为文件名
- 把这些文件名存储在一个缓存、模块或者其他可以在渲染HTML时轻松引用的地方。
我不应该在所有的前端节点上都放置每一个静态文件——只需要在CDN上就可以了。
现在,我觉得我最好的选择是给django-pipeline
加点代码来支持缓存文件名的哈希值,但我希望能有一个现成的解决方案。
在Django中,我有哪些最佳选择?有没有呢?
谢谢!
2 个回答
1
你在使用Django 1.3吗?如果是的话,你可以自己写一个自定义文件存储后端,这样就可以把文件上传到CDN(内容分发网络)。幸运的是,如果你想用亚马逊的S3服务,那么django-storages
已经帮你实现了这个功能!
6
django-pipeline
1.1.12 现在可以缓存哈希值了,所以你应该没问题,具体可以查看 更新日志。
声明: 我是 django-pipeline
的作者之一。