2012-07-02 76 views
1

有沒有在一個請求中從S3(或任何CDN)獲取多個文件的方法?請求多個S3文件到一個請求中

例如,我對S3四個文件:

  • example.com/cdn/one.js
  • example.com/cdn/two.js
  • example.com/cdn/ three.js所
  • example.com/cdn/four.js

我希望能夠在同一時間,要求他們的任意組合。我現在有分別包括他們:

<script src="example.com/cdn/one.js" /> 
<script src="example.com/cdn/two.js" /> 

但我想它們作爲一個請求:

example.com/cdn/code.js?one&two 

我認爲需要的組合合併成單一的文件,但會有辦法太多的組合可以說是現實的。我也考慮過將所有這些文件合併成一個文件,但那會很大。

+0

S3和大多數CDN的嘗試和提供內容不變,如果您需要即時更改內容,即將需要從您的服務器(即EC2)提供的文件合併在一起。 然而,在這種情況下,除了額外HTML的小開銷之外,實際的HTTP傳輸可能會在一個連接中獲取所有文件(至少對於相對較新的瀏覽器而言)。 –

回答

1

首先:你的問題更多的是一件JS事情,而不是與S3/CDN相關的一般情況。並回答你的問題:你不能在一個http請求中「結合」它們。

如果你不想連接和縮小它們,你應該看看RequireJS,它可以處理腳本的加載 - 它是異步的並且不會阻止瀏覽器渲染。

這是一篇關於異步加載的非常棒的文章:css-tricks.com - Thinking Async這會給你一個更好的見解。評論後

編輯:

可以在事實上使用PHP來連接&運行如下的飛行您的JS文件,但這樣會帶來額外的負載在服務器上,你會失去你得到的好處一個CDN ......另一種方法是使用構建系統,它在產品投入生產之前將所有內容打包。

有關此主題的更多信息,看看下面的鏈接:

要做到對飛minifaction你的開發系統(如果它是Mac),您可能需要嘗試CodeKit

+0

我看到你在說什麼,但我真的想知道是否有一種特定的技術讓服務器根據URL實時組合文件。 – cjroth

+0

看看我的編輯... – dom

0

這裏是你能做到這一點的一種方法(假設你只需要使用一個三個記事本文件=一個&文件=兩個&文件= 3):

function getJs() { 
    var url = window.location.toString(); 
    var query = url.split("?"); 
    var params = query.split("&"); 

    // iterate through array of params and write JS 
    for (i=0; i<params.length; i++) { 
    var name = params[i] + ".js"; 
    document.write("<script defer language='javascript' type='text/javascript' src='" + name + "'><\/sc" + "ript>"); 
    } 
} 

這應該頁面後加載被加載。然後在你的HTML也許。我沒有測試過,但應該是你想要的我估計。

+0

它從我的上一個語句中刪除了[body onload =「getJs()」]部分,所以您想要在加載時調用此函數。現在假設URL中的參數與您發佈的參數和您正在查看的頁面的URL一致,但您可以根據需要自定義此參數。 –

+0

當然,您也可以將example.com url添加到上面的src路徑中(我只是用http://example.com/cdn/ +名稱部分寫出了文件名) –

+0

感謝Mike。這將工作,但我實際上正在尋找一種方法來做到這一點,而不會爲每個項目提出單獨的請求。 – cjroth