網上壓縮css和js工具很多,但在我們的系統中總有特殊的地方。也許你會覺得用第三方的壓縮公用程式很麻煩。我就遇到了這樣問題,我不想在本地壓縮,只想更新到伺服器上去壓縮,伺服器壓縮也不用備份之類的操作。於是我就想著自己實現壓縮公用程式。
初步需求如下:
- 使用Yahoo.Yui.Compressor 2.0版本
- 只對網站目錄下指定檔案夾中css和js進行壓縮
- 使用到了JQuery外掛程式,所以有很多都是壓縮過的js。所以對檔案名稱中儲存min的不進行壓縮
- 不需要備份檔案
- 如在第一次訪問檔案時候進行壓縮或應用程式啟動時候進行壓縮?
實現(應用程式啟動壓縮版本):
- 引用 Yahoo.Yui.Compressor.dll
- 在Global.asax的Application_Start事件中加入處理代碼--code:
var files = System.IO.Directory.GetFiles(Server.MapPath("~/"), "*.*", SearchOption.AllDirectories);foreach (var file in files){ FileInfo finfo = new FileInfo(file); //todo 你可以在檔案夾添加可以檔案記錄最後壓縮時間.再判斷檔案最後修改時間是在上一次壓縮時間之後的檔案.而且這裡還可以做非同步處理 string strContent = File.ReadAllText(file, Encoding.UTF8); //名稱不是min //todo 可能需要更完善的判斷 if (!file.Contains(".min.")) { //取消檔案唯讀 File.SetAttributes(file, FileAttributes.Normal); if (finfo.Extension.ToLower() == ".js") { //初始化JS壓縮類 var js = new JavaScriptCompressor(); js.CompressionType = CompressionType.Standard;//壓縮類型 js.Encoding = Encoding.UTF8;//編碼 js.IgnoreEval = false;//大小寫轉換 js.ThreadCulture = System.Globalization.CultureInfo.CurrentCulture; //壓縮該js strContent = js.Compress(strContent); File.WriteAllText(file, strContent, Encoding.UTF8); } else if (finfo.Extension.ToLower()==".css") { //進行CSS壓縮 CssCompressor css = new CssCompressor(); strContent = css.Compress(strContent); File.WriteAllText(file, strContent, Encoding.UTF8); } }}
完整代碼下載:http://files.cnblogs.com/xuchengzone/JS-CSS.Compressor.rar