2014-12-04 68 views
0

我不知道是否有辦法爲我做MVC5包括我在正在返回頁面中的縮小的形式所有的JavaScript ..插入JavaScript的縮小的在返回的HTML頁面

即代替瀏覽器作爲需要的allmyminifiedbundledjavascripts.js此內容加載外部文件等已經包含在我的網頁在<script>標籤

這樣做的benafits應該是:

  1. 的頁面加載速度更快,因爲請求較少
  2. 運行腳本之前無需真正等待文檔加載。
  3. 谷歌正在這樣做,我想看看我是否喜歡它(檢查google.com上的源代碼)。

我想不出任何原因,爲什麼這是一個可怕的想法..如果有任何請賜教。

+0

多個請求可以並行運行。我知道,你會說:「這一切都通過相同的線(除非JS代碼在不同的服務器上)」,但瀏覽器可能正忙着渲染下載的HTML,同時它仍在下載JS,所以你省了一點的時間,並獲得更好的響應。 – Floremin 2014-12-04 14:56:17

回答

1

在緩存文件和內聯文件之間有一個權衡。與每次下載內聯腳本標記相比,緩存的大文件在後續對同一頁面的請求中加載速度更快。

Html 5支持腳本文件的異步請求,所以如果您有有意義的內容顯示不依賴於腳本,您可以在標籤上指定async

Google is using some module for Apache and Nginx並演示它們如何以編程方式內聯它們。

否則這裏是一個小未經測試的一段代碼,完成你想要的...

var bundleURL = Scripts.Url("~/bundles/jquery"); 
var fullUrl = (Request.Url.GetLeftPart(UriPartial.Authority) + bundleURL.ToString()); 
var client = new WebClient(); 
var minJS = client.DownloadString(fullUrl); 

ViewBag.Javascript = minJS; 

<script type="text/javascript"> 
    @ViewBag.Javascript 
</script> 

呀,儘量減少請求的目標導致了另一個請求。由於綁定在MVC中的工作方式,這是一種失敗的原因。該包是一個虛擬文件,並且在請求它之前不存在。所以你必須嘲笑那種行爲才能找回合適的東西。可能更好的方式(儘管更單調)將獨立地縮小,然後打開並讀取文件而不是提出請求。