使用Yahoo.Yui.Compressor實現自己的Css&JS壓縮工具


網上壓縮css和js工具很多,但在我們的系統中總有特殊的地方。也許你會覺得用第三方的壓縮工具很麻煩。我就遇到了這樣問題,我不想在本地壓縮,只想更新到服務器上去壓縮,服務器壓縮也不用備份之類的操作。於是我就想着自己實現壓縮工具。

 

初步需求如下:  

  • 使用Yahoo.Yui.Compressor 2.0版本
  • 只對網站目錄下指定文件夾中css和js進行壓縮
  • 使用到了JQuery插件,所以有很多都是壓縮過的js。所以對文件名稱中保存min的不進行壓縮
  • 不需要備份文件
  • 如在第一次訪問文件時候進行壓縮或應用程序啟動時候進行壓縮? 

  

實現(應用程序啟動壓縮版本): 

  • 引用 Yahoo.Yui.Compressor.dll
  • 在Global.asax的Application_Start事件中加入處理代碼--code:
   1:  
   2:         protected void Application_Start(object sender, EventArgs e)
   3:         {
   4:             var files = System.IO.Directory.GetFiles(Server.MapPath("~/"), "*.*", SearchOption.AllDirectories);
   5:             foreach (var file in files)
   6:             {
   7:                 FileInfo finfo = new FileInfo(file);
   8:                 //todo 你可以在文件夾添加可以文件記錄最后壓縮時間.再判斷文件最后修改時間是在上一次壓縮時間之后的文件.而且這里還可以做異步處理
   9:  
  10:                 string strContent = File.ReadAllText(file, Encoding.UTF8);
  11:                 //名稱不是min
  12:                 //todo 可能需要更完善的判斷
  13:                 if (!file.Contains(".min."))
  14:                 {
  15:                     //取消文件只讀
  16:                     File.SetAttributes(file, FileAttributes.Normal);
  17:                     if (finfo.Extension.ToLower() == ".js")
  18:                     {
  19:                         //初始化JS壓縮類
  20:                         var js = new JavaScriptCompressor();
  21:                         js.CompressionType = CompressionType.Standard;//壓縮類型
  22:                         js.Encoding = Encoding.UTF8;//編碼
  23:                         js.IgnoreEval = false;//大小寫轉換
  24:                         js.ThreadCulture = System.Globalization.CultureInfo.CurrentCulture;
  25:                         //壓縮該js
  26:                         strContent = js.Compress(strContent);
  27:  
  28:                         File.WriteAllText(file, strContent, Encoding.UTF8);
  29:                     }
  30:                     else if (finfo.Extension.ToLower()==".css")
  31:                     {
  32:                         //進行CSS壓縮
  33:                         CssCompressor css = new CssCompressor();
  34:                         strContent = css.Compress(strContent);
  35:                         File.WriteAllText(file, strContent, Encoding.UTF8);
  36:                     }
  37:                 }
  38:             }
  39:         }

以上代碼只是測試代碼,用於生產環境需要簡單修改,很多可以改進的我已經在注釋里面標記出來了

完整代碼下載

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM