为什么我丢失数据时,我缩小与GZip的JS和CSS

本文关键字:GZip JS CSS 数据 为什么 缩小 | 更新日期: 2023-09-27 18:15:15

我遇到了一个关于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个字符,我检查了内部信息,它说,不支持操作,我很困惑,我不知道为什么?

为什么我丢失数据时,我缩小与GZip的JS和CSS

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

你为什么会困惑呢?这里的想法是不压缩脚本-所以gzip流将占用几个字节并将压缩它们-因此生成的数据将比输入数据小。所以你的6000字节被压缩成了2334字节。