2011-11-18 83 views
0

我有一个关于GZip的奇怪问题,我希望你能帮助我。为什么我在使用GZip缩小JS和CSS时会丢失数据?

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个字,我查了内部信息,它说,操作不支持,我对此感到十分困惑,我不知道为什么?

回答

1

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

+1

打开IIS中的静态和动态压缩并不总是一个选项。例如,如果他在共享主机上,某些托管公司会在共享计划上禁用它。为此减少我仍然使用我的自定义库进行压缩/缩小。 –

+0

好点。你知道任何受欢迎的托管服务提供商不允许IIS压缩吗? –

+0

如果托管服务提供商不允许您打开gzip,则更改托管提供商是我的观点... –

0

但你为什么困惑?压缩脚本不是压缩脚本 - 因此gzip流将占用几个字节并压缩它们 - 因此结果数据将比输入数据小。所以你的6000字节被压缩成2334字节。

相关问题