您的位置:首页 > 产品设计 > UI/UE

使用Yahoo.Yui.Compressor实现自己的Css&JS压缩工具

2012-10-13 11:17 399 查看
网上压缩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:         }


以上代码只是测试代码,用于生产环境需要简单修改,很多可以改进的我已经在注释里面标记出来了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: