zoukankan      html  css  js  c++  java
  • 在HttpModule中使用gzip,deflate协议对aspx页面进行压缩(转)

    现在浏览器一般都支持gzip,deflate压缩协议 , 也就是说当服务器返回的是用gzip或deflate协议进行压缩过的内容, 浏览器将自动的进行解压缩 . 这样做可以节省大量的网络带宽,负面影响是加重了服务器的负担.

    我们只是对aspx页面进行压缩 ,当然也可以压缩js和css . 但你也想用来对图片也进行压缩的话就错了 ,效果和用winzip压缩图片一样, 只能增大体积.

    首先来看看一个实例 aspx页面压缩前和压缩后的页面信息
    压缩前

    压缩后

    可以看到压缩到原来页面大小的27% 效果还是可以的.
    看看具体代码

    #region Using

    using System;
    using
     System.Web;
    using
     System.IO.Compression;

    #endregion


    namespace BlogEngine.Core.Web.HttpModules
    {
      
    /// <summary>

      
    /// Compresses the output using standard gzip/deflate.
      
    /// </summary>

      public class CompressionModule : IHttpModule
      {

        
    #region IHttpModule Members


        
    /// <summary>
        
    /// Disposes of the resources (other than memory) used by the module 
        
    /// that implements <see cref="T:System.Web.IHttpModule"></see>
    .
        
    /// </summary>

        void IHttpModule.Dispose()
        {
          
    // Nothing to dispose; 

        }

        
    /// <summary>

        
    /// Initializes a module and prepares it to handle requests.
        
    /// </summary>

        
    /// <param name="context">An <see cref="T:System.Web.HttpApplication"></see> 
        
    ///
     that provides access to the methods, properties, and events common to 
        
    ///
     all application objects within an ASP.NET application.
        
    /// </param>

        void IHttpModule.Init(HttpApplication context)
        {
          
    if
     (BlogSettings.Instance.EnableHttpCompression)
            context.BeginRequest 
    += new
     EventHandler(context_BeginRequest);
        }

        
    #endregion


        
    #region Compression

        
    private const string GZIP = "gzip";
        
    private const string DEFLATE = "deflate"
    ;

        
    /// <summary>

        
    /// Handles the BeginRequest event of the context control.
        
    /// </summary>

        
    /// <param name="sender">The source of the event.</param>
        
    /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
        void context_BeginRequest(object sender, EventArgs e)
        {
          HttpApplication app 
    = sender as
     HttpApplication;
          
    //压缩aspx页面

          if (app.Request.Url.OriginalString.ToUpperInvariant().Contains(".aspx"))
          {
            
    //是否支持压缩协议

            if (IsEncodingAccepted(DEFLATE))
            {
              app.Response.Filter 
    = new
     DeflateStream(app.Response.Filter, CompressionMode.Compress);
              SetEncoding(DEFLATE);
            }
            
    else if
     (IsEncodingAccepted(GZIP))
            {
              app.Response.Filter 
    = new
     GZipStream(app.Response.Filter, CompressionMode.Compress);
              SetEncoding(GZIP);
            }
          }
        }

        
    /// <summary>

        
    /// Checks the request headers to see if the specified
        
    ///
     encoding is accepted by the client.
        
    /// </summary>

        private static bool IsEncodingAccepted(string encoding)
        {
          
    return HttpContext.Current.Request.Headers["Accept-encoding"!= null && HttpContext.Current.Request.Headers["Accept-encoding"
    ].Contains(encoding);
        }

        
    /// <summary>

        
    /// Adds the specified encoding to the response headers.
        
    /// </summary>

        
    /// <param name="encoding"></param>
        private static void SetEncoding(string encoding)
        {
          HttpContext.Current.Response.AppendHeader(
    "Content-encoding"
    , encoding);
        }

        
    #endregion


      }
    }
  • 相关阅读:
    faster with MyISAM tables than with InnoDB or NDB tables
    w-BIG TABLE 1-toSMALLtable @-toMEMORY
    Indexing and Hashing
    MEMORY Storage Engine MEMORY Tables TEMPORARY TABLE max_heap_table_size
    controlling the variance of request response times and not just worrying about maximizing queries per second
    Variance
    Population Mean
    12.162s 1805.867s
    situations where MyISAM will be faster than InnoDB
    1920.154s 0.309s 30817
  • 原文地址:https://www.cnblogs.com/kokoliu/p/1711213.html
Copyright © 2011-2022 走看看