2009-08-06 21 views
2

我們爲一些使用真正非常差和間歇性連接的客戶主持django服務。非洲部分地區的衛星和GPRS連接尚未從最近登陸的光纜中受益。我有一個Django網站,有很多javascript,但我的客戶有可怕的連接 - 如何優化?

我已經鞏固了JavaScript和二手minificatied版本,試圖清理樣式表,並沒有什麼...

就像好Django的實施者,我讓Apache處理起來都像靜態信息CSS和JS等靜態媒體。我已經啓用apache模塊deflate(用於gzip)和expired來儘量減少javascript包的重新傳輸(主要是jQuery的巨大成本)。我也啓用了django的gzip中間件(但這與apache的deflate結合起來似乎沒有多大作用)。

主要問題 - 還有什麼可以優化帶寬利用率?

  • 在頭文件中是否存在django優化或不確保「已經看到的數據」不會通過網絡傳播?
  • Django緩存框架似乎是針對服務器優化量身定做的(最小化數據庫) - 這是如何轉化爲實際的帶寬利用率?
  • 對Apache有什麼其他的調整,以確保瀏覽器不會嘗試獲取它已有的數據?
+2

你用firebug或safari的開發者模式來分析頁面嗎?它們是確定不同元素(js/html/images/css/etc)的實際時間和帶寬成本的好工具。 Yslow螢火蟲插件也是一個方便的剖析工具。 – Mark 2009-08-06 02:30:23

回答

1

一些你自己的優化是絞更好的表現出你的服務器是重要的,但不要以優化帶寬利用率混淆。換句話說gzip/deflate是相關的,但是Apache服務靜態內容不是(儘管它很重要)。

現在,對於您的問題,您需要查看三件事情:發送多少數據,獲取數據需要多少連接以及連接有多好。

你大多有第一個使用deflate/gzip,過期,javascript等最小化的區域,所以我只能添加一兩個你可能不知道的東西。首先,如果你還沒有升級到Django 1.1,那麼你應該升級到Django 1.1,因爲它可以更好地支持Django視圖的ETags/Expires頭文件。你可能已經有了這些頭文件可以正確處理來自Apache的靜態數據,但是如果你使用的是舊Django,他們(可能)在動態視圖上沒有正確設置。

對於下一個區域的連接數量,您需要將您的javascript和css文件合併爲儘可能少的文件以減少連接數量。也可以將你的圖像文件整合到一個單獨的「精靈」圖像中。有幾個Django項目可以處理這方面的問題:django-compressdjango-media-bundler(這是唯一一個將創建圖像精靈的項目),您還可以看到this SO answer

對於連接有多好的最後一個領域,您應該像Alex所建議的那樣查看全球CDN,或者至少將您的站點託管在更靠近用戶的ISP處。這對非洲來說可能很艱難,根據我的經驗,甚至連歐洲ISP(至少南部非洲......北非都可能更好)都沒有體面的連接。

1

您可以將jQuery委託給可能與非洲有更好連接性的CDN,例如google(並且它是免費服務!)。除此之外,我推薦每一個書面作品(或視頻中說的都有很多這樣的作品) - Steve Souders,儘管他的談話,書籍和散文對每一位網絡開發人員都是無價的,但我認爲他們對低價服務帶寬受衆(例如,他的最新書籍和演講中提到的一個技巧是關於世界上很大一部分瀏覽器沒有從壓縮或gzip中獲得壓縮效益 - 這與瀏覽器本身無關,而是涉及到代理和防火牆事情錯了,所以「手動壓縮」仍然是重要的!)。

相關問題