網上壓縮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: }
以上代碼只是測試代碼,用於生產環境需要簡單修改,很多可以改進的我已經在注釋里面標記出來了