标签: http-compression

合并和缩小多个CSS/JS文件

我试图通过合并和压缩CSS和JS文件来优化网站性能.我的问题更多的是关于如何实现这一目标的(具体)步骤,考虑到我所面临的真实情况(尽管如此,应该是其他开发人员中的典型情况).

我的页面引用了几个CSS和JS文件,如下所示:

<!--
  It's easier to work on smaller files during development.
  Hence, the multiple CSS and JS files.
-->
<link type="text/css" rel="stylesheet" href="/css/main.css" />
<link type="text/css" rel="stylesheet" href="/css/secondary-1.css" />
<link type="text/css" rel="stylesheet" href="/css/secondary-2.css" />

<script type="text/javascript" src="/scripts/js/main.js"></script>
<script type="text/javascript" src="/scripts/js/adapter/adapter.js"></script>
<script type="text/javascript" src="/scripts/js/adapter/title-adapter.js"></script>
Run Code Online (Sandbox Code Playgroud)

对于生产版本,我想将3个CSS文件合并为一个并使用例如YUI Compressor缩小它.但是,我需要更新所有需要这3个文件的页面来引用新近缩小的CSS.这似乎容易出错(例如,您正在删除并在许多文件中添加一些行).还有其他风险较小的方法吗?JS文件也存在同样的问题.

javascript css optimization http-compression yui-compressor

89
推荐指数
8
解决办法
17万
查看次数

HttpWebRequest和Native GZip压缩

当请求具有Gzip压缩的页面时,我收到了很多以下错误:

System.IO.InvalidDataException:GZip页脚中的CRC与从解压缩数据计算的CRC不匹配

我正在使用本机GZipStream进行解压缩,正在寻找解决此问题的方法.考虑到这一点,是否有解决这个或另一个GZip库(免费?)的工作,它将正确处理这个问题?

我正在验证webResponse ContentEncoding是否为GZIP

更新5/11 简化的snippit

//Caller
public void SOSampleGet(string url) 
{
    // Initialize the WebRequest.
    webRequest = (HttpWebRequest)WebRequest.Create(url);
    webRequest.Method = WebRequestMethods.Http.Get;
    webRequest.KeepAlive = true;
    webRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
    webRequest.Headers.Add("Accept-Encoding", "gzip,deflate");
    webRequest.Referer = WebUtil.GetDomain(url);

    HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();    

    using (Stream stream = GetStreamForResponse(webResponse, READTIMEOUT_CONST))
    {
        //use stream
    }
}

//Method
private static Stream GetStreamForResponse(HttpWebResponse webResponse, int readTimeOut)
{
    Stream stream;
    switch (webResponse.ContentEncoding.ToUpperInvariant())
    {
        case "GZIP":
            stream = new GZipStream(webResponse.GetResponseStream(), CompressionMode.Decompress);
            break;
        case "DEFLATE":
            stream = new DeflateStream(webResponse.GetResponseStream(), CompressionMode.Decompress);
            break;

        default: …
Run Code Online (Sandbox Code Playgroud)

.net c# gzip stream http-compression

59
推荐指数
3
解决办法
5万
查看次数

如何在Windows Azure动态内容上启用gzip HTTP压缩

我一直尝试在我的Windows Azure托管的WCF Restful服务上启用gzip HTTP压缩失败,该服务仅从GET和POST请求返回JSON.

我已经尝试了很多东西,我很难列出所有这些东西,我现在意识到我一直在处理相互矛盾的信息(关于旧版本的天蓝色等),所以最好从干净的石板开始吧!

我正在使用Visual Studio 2008,使用2010年2月的Visual Studio工具.

所以,根据以下链接 ..

..现在已启用HTTP压缩.我已经使用了以下页面中的建议(仅限URL压缩建议).

http://blog.smarx.com/posts/iis-compression-in-windows-azure

<urlCompression doStaticCompression="true" 
         doDynamicCompression="true"
         dynamicCompressionBeforeCache="true" 
/>
Run Code Online (Sandbox Code Playgroud)

..但我没有压缩.我不知道urlCompressionhttpCompression之间的区别是没有用的.我试图找出但无济于事!

可能,Visual Studio的工具是在支持压缩的Azure版本之前发布的,这是一个问题吗?我已经阅读过某些地方,使用最新的工具,您可以选择在发布时使用哪个版本的Azure OS ...但我不知道这是否属实,如果是,我找不到哪里选择.我可以使用预启用http的版本吗?

我也试过了吹嘘的http压缩模块,但没有结果.

有没有人有关于如何实现这一目标的最新建议?即与当前版本的Azure OS相关的建议.

干杯!

史蒂芬

更新:我编辑了上面的代码来修复web.config片段中的类型.

更新2:测试使用下面的答案显示的URL whatsmyip的答复是表示在没有经过任何压缩正在返回从我service.svc我的JSON响应,但静态的HTML页面ARE被用gzip压缩返回.任何关于如何获得压缩的JSON响应的建议都将非常感谢!

更新3:尝试了大于256KB的JSON响应,以查看问题是否是由于JSON响应小于此,如下面的评论中所述.不幸的是,响应仍然没有被压缩.

json gzip http-compression azure

57
推荐指数
2
解决办法
2万
查看次数

如何使用IIS 7.5从ASP.NET MVC压缩Json结果

我很难让IIS 7正确压缩来自ASP.NET MVC的Json结果.我在IIS中启用了静态和动态压缩.我可以向Fiddler验证正常的text/html和类似的记录是否被压缩.查看请求时,会出现accept-encoding gzip标头.响应具有mimetype"application/json",但未压缩.

我发现问题似乎与MimeType有关.当我包含时mimeType="*/*",我可以看到响应是正确的gzip压缩.如何在不使用通配符mimeType的情况下使用IIS进行压缩?我假设这个问题与ASP.NET MVC生成内容类型头的方式有关.

CPU使用率远低于动态限制阈值.当我从IIS检查跟踪日志时,我可以看到它由于找不到匹配的mime类型而无法压缩.

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files" noCompressionForProxies="false">
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
    <dynamicTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="application/x-javascript" enabled="true" />
        <add mimeType="application/json" enabled="true" />
    </dynamicTypes>
    <staticTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="application/x-javascript" enabled="true" />
        <add mimeType="application/atom+xml" enabled="true" />
        <add mimeType="application/xaml+xml" enabled="true" />
        <add mimeType="application/json" enabled="true" />
    </staticTypes>
</httpCompression>
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-mvc iis-7 json http-compression

56
推荐指数
4
解决办法
3万
查看次数

什么是gZip压缩?

我听说过很多人应该将gZip用于他们的网页,以便更快地访问和下载,并且还可以节省带宽.

那么这个gZip压缩是什么?它如何使下载速度更快?它是压缩HTML和图像还是仅压缩HTML.

如果我要在我的webapps中开始使用gZip,我需要考虑哪些因素?是否有任何服务器或浏览器限制,或它是否仅支持特定编码.

html browser gzip http-compression

50
推荐指数
2
解决办法
2万
查看次数

36
推荐指数
1
解决办法
5074
查看次数

从MVC中生成的HTML中删除额外的空格

我有一个MVC应用程序视图,生成相当大的HTML值表(> 20MB).

我正在使用压缩过滤器压缩控制器中的视图

 internal class CompressFilter : ActionFilterAttribute
 {
     public override void OnActionExecuting(ActionExecutingContext filterContext)
     {
         HttpRequestBase request = filterContext.HttpContext.Request;
         string acceptEncoding = request.Headers["Accept-Encoding"];
         if (string.IsNullOrEmpty(acceptEncoding))
             return;
         acceptEncoding = acceptEncoding.ToUpperInvariant();
         HttpResponseBase response = filterContext.HttpContext.Response;
         if (acceptEncoding.Contains("GZIP"))
         {
             response.AppendHeader("Content-encoding", "gzip");
             response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
         }
         else if (acceptEncoding.Contains("DEFLATE"))
         {
             response.AppendHeader("Content-encoding", "deflate");
             response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
         }
     }
 }
Run Code Online (Sandbox Code Playgroud)

有没有办法在运行压缩过滤器之前消除视图中生成的(非常大)冗余空白量(以减少压缩工作量和大小)?

编辑: 我使用下面的Womp建议的WhiteSpaceFilter技术.

感兴趣的是Firebug分析的结果:

1)没有压缩,没有空白条 - 21MB,2.59分钟
2)使用GZIP压缩,没有空白条 - 2MB,17.59s
3)使用GZIP压缩,空白条--558kB,12.77s

所以当然值得.

html compression asp.net-mvc whitespace http-compression

30
推荐指数
2
解决办法
2万
查看次数

在IIS7上托管WCF的GZip压缩

每个人,就我而言,这个问题都是在EDIT 2中进行的.尽管这只是问题的IIS方面的部分解决方案,但这正是我所寻求的.


因此,我将把我的问题添加到有关该主题的小问题上.

我正在尝试对来自WCF服务的大型soap响应启用GZip压缩.到目前为止,我已经按照这里和其他各种地方的说明在IIS上启用动态压缩.这是applicationHost.config中的dynamicTypes部分:

<dynamicTypes>
    <add mimeType="text/*" enabled="true" />
    <add mimeType="message/*" enabled="true" />
    <add mimeType="application/x-javascript" enabled="true" />
    <add mimeType="application/atom+xml" enabled="true" />
    <add mimeType="application/xaml+xml" enabled="true" />
    <add mimeType="application/xop+xml" enabled="true" />
    <add mimeType="application/soap+xml" enabled="true" />
    <add mimeType="*/*" enabled="false" />
</dynamicTypes>
Run Code Online (Sandbox Code Playgroud)

并且:

<urlCompression doDynamicCompression="true" doStaticCompression="true" />
Run Code Online (Sandbox Code Playgroud)

虽然我不清楚为什么需要这样做.

为了以防万一,在那里扔了一些额外的哑剧类型.我已经实现了IClientMessageInspector来添加Accept-Encoding:gzip,deflate到我的客户端的HttpRequests.这是一个从fiddler获取的请求标头的示例:

POST http://[omitted]/TestMtomService/TextService.svc HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Accept-Encoding: gzip, deflate
Host: [omitted]
Content-Length: 542
Expect: 100-continue
Run Code Online (Sandbox Code Playgroud)

现在,这不起作用.无论消息大小如何(尝试高达1.5Mb),都不会发生压缩.我看过这篇文章,但没有像他描述的那样遇到异常,所以我没有尝试过他提出的CodeProject实现.此外,我已经看到许多其他实现应该让它工作,但无法理解它们(例如,msdn的GZip编码器).为什么我需要实现编码器或代码项目解决方案?IIS不应该负责压缩吗?

那么我需要做些什么才能让它发挥作用?

乔尼

编辑:我认为WCF绑定可能值得发布,但我不确定它们是否相关(这些是来自客户端):

<system.serviceModel>
<bindings>
    <wsHttpBinding>
    <binding name="WsTextBinding" closeTimeout="00:01:00" openTimeout="00:01:00"
      receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" …
Run Code Online (Sandbox Code Playgroud)

wcf iis-7 http-compression

24
推荐指数
2
解决办法
1万
查看次数

配置IIS 7.5以发送jzipped的JSON响应,NO_MATCHING_CONTENT_TYPE

所以我试图让我的应用程序使用动态压缩和gzip发送其JSON响应.不幸的是,这不起作用.服务器上的所有静态压缩都运行正常,但不是动态的.

我通过添加以下内容来设置:

<add mimeType="application/json" enabled="true" />
<add mimeType="application/json; charset=utf-8" enabled="true" />
Run Code Online (Sandbox Code Playgroud)

到applicationHost.config文件中的<dynamicTypes>部分<httpCompression>.我正在使用Charles检查HTTP请求,我可以验证我是否使用Accept-Encoding: gzip, deflate标头集发送请求.我已经试过这两个Accept: */*Accept: application/json.当它不工作时,我启用了"失败请求"跟踪日志记录来查找错误代码DYNAMIC_COMPRESSION_NOT_SUCCESS,这是NO_MATCHING_CONTENT_TYPE.

我一直在尝试研究论坛和谷歌,但我所能看到的是人们说使用指定的字符集的mimeType修复了他们的问题,但在我的情况下,它仍然无法正常工作,我可以验证响应来了回头说头 Content-Type: application/json; charset=utf-8

为JSON响应提供服务的端点是[ScriptService()]在类和[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]方法上注释的标准.NET ASMX WebServices .他们返回JSON很好,但我不能让动态压缩为我的生活工作.

由于这些是常规的Web方法,我还添加了:

<add mimeType="text/xml" enabled="true" />
<add mimeType="text/xml; charset=utf-8" enabled="true" />
Run Code Online (Sandbox Code Playgroud)

尝试gzip XML响应.令人沮丧的是,这种压缩在从同一方法发送JSON时不起作用.在这一点上,我很茫然.

.net iis-7 json http-compression

23
推荐指数
1
解决办法
1万
查看次数

节点的SDCH压缩?

Node上是否有SDCH (HTTP上的共享字典压缩)库?(或者其他任何实现?)

在npm上快速搜索没有产生任何结果.

performance http-compression node.js

21
推荐指数
1
解决办法
1409
查看次数