我有一个django 1.1.1应用程序,实际上是在开发中,在最佳实践中思考我运行了YSlow测试(E级规则集应用:YSlow V2)它建议:
添加过期标题上的F级
- 有37个静态组件没有远期到期日。
使用内容分发网络(CDN)F级
- 有37个静态组件不在CDN上。 的
使用gzip压缩组件的等级
- 有17个纯文本组件应该压缩发送
如何使用Django实现它?
更多上下文:Python 2.5,webfaction部署
示例:
F级以减少HTTP请求
此页面有14个外部Javascript脚本。尝试将它们合二为一。 此页面有4个外部样式表。尝试将它们合并为一个。
可以使用Django-Compress
解决
答案 0 :(得分:3)
在您列出的三个中,有两个可在Web服务器级别进行寻址。例如,在Linux / Apache中:
对于gzip,请编辑/etc/apache2/mods-available/deflate.conf
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-javascript text/javascript text/css application/javascript
</IfModule>
对于Expires标头,首先需要启用mod_expires:
>cd /etc/apache2
>sudo ln -s ../mods-available/expires.load mods-enabled/expires.load
然后,您需要为所需的MIME类型配置它:
# edit /etc/apache2/sites-available/default
ExpiresActive On
ExpiresByType text/css "access plus 12 hours"
ExpiresByType application/javascript "access plus 12 hours"
ExpiresByType image/png "access plus 12 hours"
ExpiresByType image/gif "access plus 12 hours"
撰写关于为什么我推荐12小时here的原因。
最后一项(CDN)通常是您外包给Akamai之类的人。它也很贵。
答案 1 :(得分:2)
我非常同意Chase。我基于Steve Souders和Nicholas Zakas的工作开发了一些django程序。
我的标准做法是:
nginx.conf中的Nginx gzip配置:
gzip_http_version 1.1;
gzip_vary on;
gzip_comp_level 6;
gzip_proxied any;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_buffers 64 16k;
gzip_disable “MSIE [1-6].(?!.*SV1)”;
Nginx远期期货到期头:
location /media/ {
alias /home/domains/example.com/project/_generated_media/;
expires 10y;
add_header Cache-Control public;
}
他们只留下的项目是图片上传,但仍可以在将来过期时使用,因为当图片发生变化时,文件名也应该改变。
使用这些技术,我制作了包含3个http请求的网站。 html文件,标题中的一个CSS请求,以及页面呈现后页脚中的一个JS请求。
答案 2 :(得分:0)
这些都与Django无关,因为YSlow指的是您网站上的静态资产 - JS,CSS和图像。通过开发服务器提供这些服务肯定会导致成绩不合格,但做得更好将取决于您如何配置最终提供服务的真实服务器。