2009-11-07 50 views
3

我有一個Django的1.1.1應用程序,實際上是在研究與開發,在我跑了YSlow的測試最佳實踐思考(E級規則集適用於:YSlow的V2)它recomends:YSlow最佳實踐與Django應用程序,如何實現它們?

F級上添加到期頭文件

- 有37個靜態組件沒有遠期到期日期。

F級上使用的內容分發網絡(CDN)

- 有37個不在CDN靜態組件。

F級上壓縮部件用gzip

- 有應該壓縮

我如何使用Django實現它發送17個明文組件?

更多背景:Python 2.5中,部署在webfaction

例子:

F級上減少HTTP請求

此頁有14個外部JavaScript腳本的。嘗試將它們合併爲一個。 此頁面有4個外部樣式表。嘗試將它們合併爲一個。

可與Django-Compress

回答

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之類的人的東西。它也相當昂貴。

0

這些都沒有什麼關係的Django來解決,因爲YSlow的是指靜態資產在您的網站 - JS,CSS和圖像。通過開發服務器提供這些服務器肯定會導致失敗的成績,但做得更好取決於如何配置最終提供服務的真實服務器。

2

我非常同意你的追逐。我已經開發了一些基於Steve Souders和Nicholas Zakas的工作的django程序。

我的標準做法是:

  • 安裝Django-mediagenerator這對基:
    • 合併JS和CSS與mediagenerator束
    • 配置mediagenerator與谷歌閉合自動壓縮JS和帶有YUICompressor的CSS
    • 所有靜態媒體(未上傳)也都由媒體人管理。這使您可以使用像10年一樣的遠期過期標題。
  • 儘量減少圖像的使用,並嘗試僅在CSS中生成大部分網站。
  • 如果我必須用小圖片,BASE64內聯他們在CSS文件(使用mediagenerator)
  • 如果他們是大圖片,將它們組合成一個精靈(我用大圖片極少雖然)
  • 的Nginx和gunicorn部署

的Nginx在nginx.conf 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請求。