当我用GZip缩小JS和CSS时,为什么会丢失数据?

时间:2011-11-18 03:40:54

标签: c# asp.net gzip minify

我有一个关于GZip的奇怪问题,我希望你能帮助我。

using (MemoryStream memoryStream = new MemoryStream(10240))
{
   //isCompressed will be true if the browser accepts gzip
   using (Stream writer = isCompressed ?
                    (Stream)(new GZipStream(memoryStream, CompressionMode.Compress)) :
                    memoryStream)
   {
      StringBuilder sb = new StringBuilder();

      //filenames is collection of multi js files need to be minify
      foreach (string fileName in fileNames)
      {
         sb.Append(File.ReadAllText(context.Server.MapPath(fileName)));
      }

      //minifier is an instance of Microsoft.Ajax.Utilities.Minifier
      string minifiedString = minifier.MinifyJavaScript(sb.ToString());

      byte[] bts = Encoding.UTF8.GetBytes(minifiedString);
      writer.Write(bts, 0, bts.Length);
   }
}

bts的长度实际上超过了6000,但是,当writer.Write(bts, 0, bts.length)被执行时,编写者只能写2334个字符,我检查了内部信息,它说,操作不支持,我很困惑,而且我不知道为什么?

2 个答案:

答案 0 :(得分:1)

如果我理解这个场景,那么Vinay是正确的,因为6k正在被压缩。但是,为什么使用自定义代码来压缩您的内容?为什么不在IIS中打开静态和动态压缩并让IIS完成工作?此外,使用像http://RequestReduce.com这样的库,可以动态地自动组合和缩小你的css和js,没有代码,可能没有配置,也没有精灵你的图像。

答案 1 :(得分:0)

但你为什么感到困惑?这里不是压缩脚本 - 所以gzip流需要几个字节并将它们压缩 - 因此结果数据的大小将小于输入数据。所以你的6000字节被压缩成2334字节。