用SquishIt最小化Css與Javascript檔案

來源:互聯網
上載者:User

       SquishIt 是一個輕易壓縮與合并CSS與JavaScript檔案的組件。同時它還使用dotless處理css. 它相依元件是:

Dependencies

Id
Version Range

YUICompressor.NET
(≥ 1.7.0.0)

dotless
(≥ 1.2.2.0)

AjaxMin
(≥ 4.46.4422.26284)

Jurassic
(≥ 2.1.1)

 

不過不用擔心,依賴會自動安裝的,你可以使用Command-Line安裝它。

PM> Install-Package SquishIt -Version 0.8.6

使用起來也很方便。修改web.config其中 debug 為 false

  <compilation debug="false" targetFramework="4.0">

在Asp.net MVC 3 中的View 可以這麼用,最後將產生一個合并前所以有JS的名為combine開頭的檔案。

   @Html.Raw(Bundle.JavaScript().Add("~/Scripts/jquery-1.5.1.js").Add("~/Scripts/jquery.validate.js").Add("~/Scripts/jquery.validate.unobtrusive.js")        .Render("~/Scripts/combined#.js"))


通過FireBug可以看到只有一個Js的請求,這個檔案合并了其它檔案。

http://localhost:6060/Scripts/combined4A287FF65BFD05F0B0BC2F292D0C8258.js


對比之前需要3個js的請求,現在只需要一個了,並且還壓縮過。

CSS檔案可以這樣:

@Html.Raw(Bundle.Css()      .Add("~/Content/Site.css")      .Add("~/Content/RiskSite.css")  .Render("~/Content/combined#.css"))

 

最後頁面只請求 http://localhost:6060/Content/combinedCBBF63B8C0EF232103C23C953C336D54.css 

同樣這個檔案是合并了其它css檔案,並壓縮了它們。

如果想避免產生這些檔案在磁碟上,讓它們運行時產生。 以CSS為例,需要做一些擴充。官方已經開始做了,以後會有的。

需要在Global.asax中:

    protected void Application_Start()    {        AreaRegistration.RegisterAllAreas();        RegisterGlobalFilters(GlobalFilters.Filters);        RegisterRoutes(RouteTable.Routes);        Bundle.Css()    .Add("~/Content/Site.css")    .Add("~/Content/RiskSite.css").AsCached("main","~/Security/Css/main");    }
然後在建立一個BaseController,增加兩個Action,類似這樣:
public class BaseController : Controller{    public ActionResult Js(string id)    {        // Set max-age to a year from now        Response.Cache.SetMaxAge(TimeSpan.FromDays(365));        // In release, the cache breaker is appended, so always return 304 Not Modified        Response.StatusCode = 304;        return Content(Bundle.JavaScript().RenderCached(id), "text/javascript");    }    public ActionResult Css(string id)    {        // Set max-age to a year from now        Response.Cache.SetMaxAge(TimeSpan.FromDays(365));        // In release, the cache breaker is appended, so always return 304 Not Modified        Response.StatusCode = 304;        return Content(Bundle.Css().RenderCached(id), "text/css");    }}

在實際Controller繼承這個BaseController:
public class SecurityController : BaseController {    //...}
接下來在View中,MvcRenderCachedAssetTag方法在SquishIt.Mvc.dll裡, 改寫為:
 
@Bundle.Css().MvcRenderCachedAssetTag("main")


有興趣還可寫一個Razor擴充,類似的代碼像這樣


//Rzr.cshtml

@helper Css(string key) {  @Bundle.Css().MvcRenderCachedAssetTag(key)}@helper Js(string key) {  @Bundle.Javascript().MvcRenderCachedAssetTag(key)}// In a view...@Rzr.Css("main")@Rzr.Js("main")

 

完了,然後運行頁面:

http://localhost:6060/security/LoginWithModel
 
在Html中,顯示:
<link rel="stylesheet" type="text/css" href="/Security/Css/main?r=CBBF63B8C0EF232103C23C953C336D54" />

這是一個動態產生的Css,完了,就這麼簡單。您可根據自己的情況修改組件。
希望對您Web開發有協助。您可以感興趣的文章:

Asp.net使用HttpHandler最佳化Css樣式檔案
Asp.net使用HttpModule壓縮並刪除空白Html請求
 
 


作者:Petter Liu

出處:http://www.cnblogs.com/wintersun/

本文著作權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文串連,否則保留追究法律責任的權利。

該文章也同時發布在我的獨立部落格中-Petter Liu Blog。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.