为什么要管理静态文件
Django官方教程说:
We recommend using a separate Web server – i.e., one that’s not also running Django – for serving media.
即建议用个额外的web服务器处理静态文件。实际部署过程中,常用Nginx作为反向代理服务器以及静态文件服务器。
对于静态文件的处理很麻烦,因为在开发模式和实际部署时还会有区别。很多教程上来就是怎么做,而不说为什么要那样做。
那么,到底为什么呢?
在Stack Overflow上找到的答案是:为了效率:
- 把静态文件放到另一个服务器,甚至另一个域/子域,能大幅优化对它们的处理(比如用Nginx)
- 能减少网络阻塞。如果静态文件和动态应用在同一个域内,浏览器访问静态文件时,就会把域的cookies也放到请求里,其实是没必要的;如果静态文件在另一个域内,该域就可以配置为无需cookies的域(cookieless domain)。
接下来问题又来了,为什么小小的cookies会这么影响效率呢?因为网络访问过程中,上传和下载是不对等的,至少是1:10,且一般只对下载做压缩,对上传不做。所以谷歌说了:
The best way to cut down on client request time is to reduce the number of bytes uploaded as request header data. So, minimize request size and serve static content from a cookieless domain. – developers.google.com
详见:Why you need a cookie-less domain
Django开发环境静态文件管理
开发模式下,有两种方法:使用 django.contrib.staticfiles
自动管理,或手工配置。
使用 django.contrib.staticfiles 自动管理
Djan