2011-05-11 18 views
1

我想實現這一點,以加快我的圖像加載。對於那些不知道這一點的人,請閱讀here並行化跨主機名和Django的下載

Django有什麼可以幫助我解決這個問題嗎?我主要考慮如何自動化我的靜態內容的URL創建。我按照下面的模式:

<script src="{{STATIC_URL}}scripts/jquery.js" type="text/javascript"></script> 

我首先想到的順序設置STATIC_URL爲「http://cdnX.mydomain.com/」,其中X將是數字1到4,但這樣會打破緩存,因爲我沒有保證,例如,jquery將始終由cdn2提供服務。或者我錯了?

任何想法的人?

回答

1

您可能需要一個custom template tag來照顧您的循環,並可能將信息存儲在用戶的會話中。您也可以使用緩存後端進行此操作,但這取決於您。它可能是這個樣子:

LAST_CDN=4 
cdn_format = "http://cdn%s.mydomain.com/%s" 
@register.simple_tag(takes_context=True) 
def cdn_url(context, url): 
    request = context['request'] ## Assumes that request is in your context. 
    current_cdn = request.session.get('current_cdn', 0) 
    current_cdn += 1 
    if current_cdn > LAST_CDN: 
     current_cdn=1 
    cdn_list = request.session.get('cdn_list', {}) 
    if cdn_list.get(url, None) is not None: 
     return cdn_format % (cdn_list.get(url), url,) 
    else: 
     cdn_list[url] = current_cdn 
     request.session['cdn_list'] = cdn_list 
    return cdn_format % (current_cdn, url,) 
+0

謝謝!我會做這樣的事情。我絕對會做的是直接在上下文中存儲信息,而不是會話。 – 2011-05-12 17:31:43

+0

每個請求都有不同的上下文,這意味着您失去了瀏覽器端緩存。您可能想要使用django緩存或會話來保持跨請求的同步。 – 2011-05-12 17:41:38

0

嗯,這是一個有點明顯,但如果你總是可以只「分配」資源轉移到一個域或另一個,通過建立STATIC_URL_1,STATIC_URL_2等,然後選擇一個手動爲模板中的每個資源使用。