2012-04-10 39 views
3

按照Disqus comment code instructions,你應該包括其JavaScript如下:爲什麼Disqus不使用全球CDN作爲評論代碼?

(function() { 
    var s = document.createElement('script'); 
    s.async = true; 
    s.type = 'text/javascript'; 
    s.src = 'http://' + disqus_shortname + '.disqus.com/count.js'; 
    (document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s); 
}()); 

JavaScript的的位置是基於短名稱特定於您的網站。爲什麼Disqus會這樣做,而不是爲其JavaScript使用一個全局位置(例如cdn.disqus.com/count.js)。如果每個站點的JavaScript都是相同的,那麼要求每個人都要爲他們訪問的每個啓用了Disqus的域重新下載JavaScript,似乎很愚蠢。如果基於短名稱的JavaScript不同,爲什麼不使用在加載全局js之前設置的shortname變量?

Disqus是一家相當大且成熟的公司,所以我假設這是一個有意識的,有目的的決定。他們爲什麼走這條路?

回答

8

其實他們使用CDN來提供count.js

如果<shortname>存在

http://<shortname>.disqus.com/count.js重定向到像

http://mediacdn.disqus.com/1334018047/build/system/count.js

爲了減少流量count.js(在CDN上)提供了Expires-Header,允許將其緩存一個月。

但是,想象他們需要更改代碼或阻止某些站點或向其他用戶提供特殊功能,直到所有客戶端都獲得更改爲止需要一個月的時間。爲了縮短這個時間段,他們可能使用這個重定向(它只緩存10分鐘),所以代碼/功能的改變將在10分鐘內到達每個客戶端。

它給了他們很大的靈活性,並且不需要用戶改變包含代碼。

+0

但我想客戶端將無法緩存不同站點之間的JS文件,因爲它是使用不同的子域請求的。 – David 2012-04-11 06:45:05

+0

JS文件本身將緩存在不同的域之間,唯一不在域之間緩存的是重定向。 – stewe 2012-04-11 13:52:58

+0

感謝您的解釋。我沒有意識到瀏覽器會在重定向之後緩存文件。 – 2012-04-11 16:05:39