2011-01-30 50 views
1

我一直想知道是否有正確的方法來做到這一點:當我使用AJAX動態加載腳本時,我可以選擇將URL傳遞迴服務器上的腳本,然後運行:<script src = response.url ></script>或只是傳回腳本本身。動態加載:將url傳回腳本或傳回腳本本身?

我採取了傳回內容腳本本身的方法,因爲我想我只做一次往返而不是兩次。也因爲我想回傳一些CSS或其他資產。不過,我注意到Facebook會將網址傳回CDN資源,所以我想知道我的方法是否會產生一些我忽略的後果。

謝謝! Matt

回答

2

當你是Facebook的時候,你正在看一些相當獨特的流量模式。發送20KB腳本與從動態服務器發送30個字符可能會在這些服務器上產生更多的負載。此外,他們可能無法快速提供大量內容。

相比之下,CDN服務器是榮耀的靜態代理,專爲速度和規模而設計。所以從facebook的角度來看,額外往返是有意義的,因爲它仍然可以提高整體頁面速度,並且它肯定會改善他們的服務器流量模式。

現在回到你身邊。如果您要從網站的其餘部分從相同的服務器加載腳本,則此方法無效。如果您確實可以訪問CDN,那麼您必須使用有關您的用戶的各種假設(延遲,位置),關於您的站點的事實(腳本的大小,腳本加載的時間)來計算數學,並比較讓您的主服務器爲這些腳本提供服務,而不是額外的往返服務和您的CDN服務器分發這些腳本。

有關往返的另外一個想法:如果我是Facebook,我可能會在頁面實際需要加載腳本之前儘早發佈這些CDN URL。理想情況下,我會捎帶另一個請求,以便偷走一點額外的數據。這會使額外的往返問題大部分無關緊要。

+0

偉大的寫作。你是不是故意說:「如果你不*要......」這種方法是沒有意義的?或者我錯過了什麼? – Matt 2011-01-31 00:21:54

0

嗯,好吧,我很確定AJAX存在一些跨域安全問題,這意味着如果您嘗試從外部CDN動態加載腳本內容,則需要解決這樣的問題問題..

+0

感謝您的回覆。對不起,我應該更清楚一點:它是Facebook的子域名,但這不是問題的相關部分。編輯:他們也使用iframe加載而不是AJAX,以便解決我很確定的問題。 – Matt 2011-01-30 23:05:28