2011-07-18 129 views
3
JavaScript文件

我在戰略工作在Azure上(ASP.NET Web角色) 存儲和部署JavaScript文件我的要求是:策略在Azure上

  1. 要在生產中使用精縮版
  2. 使用在開發環境原始版本(即不精縮)本地版(簡化調試)
  3. 簡單的構建/部署過程(VS2010)
  4. 簡單的更新過程
  5. (我的文件從時間到時間變化)

這裏有一個很好的討論Visual Studio 2010: Publish minified javascript files instead of the original ones但是這沒有考慮到Azure可以提供或使用多個實例的好處。

我正在考慮將我縮小的JavaScript文件部署到blob存儲並在生產版本中使用這些文件。這些將與一個大的最大年齡緩存控制存儲客戶端緩存和文件名將存儲的版本(所以我可以輕鬆更新)。我歡迎有關此策略的反饋意見。

因此,在發展中呈現的HTML將指向本地腳本文件,即:

<script src="Scripts/myjavascript-0.0.1.js" type="text/javascript"></script> 

但是產量的結果應使用以下方法來指代的縮小版。

<script src="http://myblob.blob.core.windows.net/Scripts/myjavascript-0.0.1.js" type="text/javascript"></script> 

但我的主要問題是如何最好地實現路徑在開發和生產中的自動切換。或者一個自定義處理程序是正常路線(如果是這樣的話,將如何工作 - 我不希望每個實例都在每個請求上從blob重新加載)。

回答

4

關於#1 & 2:

我討論這個here的策略。基本的想法是使用一個輔助函數來發出腳本標籤。該功能可以在調試模式下構建到調試文件的鏈接,另外還可以縮小文件(這也使得用縮小文件在本地進行測試變得容易)。同樣的功能可以處理增加了版本爲緩存失效的路徑等

關於#3:

添加微小作爲後生成步驟。我說這個我csproj(這只是一個MSBuild文件),它使用YUI壓縮機:分別

<Target Name="AfterBuild" Condition="'$(Configuration)' != 'Debug'"> 
    <!-- remove previous minified files --> 
    <Exec Command="del $(ProjectDir)Styles\*-min.css" /> 
    <Exec Command="del $(ProjectDir)Scripts\*-min.js" /> 
    <!-- Minify javascript and css, unless we're in Debug --> 
    <Exec Command="java -jar $(ProjectDir)..\yuicompressor\build\yuicompressor-2.4.6.jar -o .css$:-min.css --charset utf-8 $(ProjectDir)Styles\*.css" /> 
    <Exec Command="java -jar $(ProjectDir)..\yuicompressor\build\yuicompressor-2.4.6.jar -o .js$:-min.js --charset utf-8 $(ProjectDir)Scripts\*.js" /> 
</Target> 

這將創建一個精縮在〜*-min.js*-min.css文件\腳本和〜\樣式。

警告 B/YUI的壓縮機的bug in version 2.4.6的C,上述不會如果僅存在一個.css.js文件目錄中的工作。

+0

我不能得到這個工作。它在本地運行良好,但是當我將它發佈到Azure時,縮小的內容不包含在包中,因爲它們不在項目文件中。我該怎麼做才能做到這一點? – iboware

1

要從Azure運行時動態切換腳本鏈接的URL,您應該將所有腳本塊放在usercontrol中,並在所有頁面中使用該usercontrol。您不應將腳本鏈接直接放在aspx/master頁面上,而應該放在ascx上並使用ascx。這有助於將常用腳本鏈接保存在單個文件中,並且當您需要進行網站範圍更改時,只需更改ascx即可。 另一種方法是使用我的httphandler,它可以相對於絕對地更改腳本的URL,以便從不同站點下載腳本的腳本。您當然可以使用它來預先設置Azure站點的絕對URL。 http://omaralzabir.com/loading_static_content_in_asp_net_pages_from_different_domain_for_faster_parallel_download/

2

您的基本計劃聽起來不錯。它甚至可以使您輕鬆使用CDN(您只需用CDN路徑替換存儲帳戶的路徑)即可。

我不認爲我會試着想太多。正如其他地方所建議的,控制是一個好方法。只需使用此控件查找web.config設置,即可獲取腳本的根目錄並將其前置到腳本的路徑中(您的本地版本此設置將爲空)。爲了確保您不必爲每次部署更改配置,我會使用config transformations,因此它會自動發生。