在Asp.Net WebForm中压缩JavaScript和CSS

时间:2011-10-06 12:59:15

标签: c# asp.net gzip

我使用C#Asp.net 4, 我在Global.asax中有这个脚本。我能够gzip所有的asp.net页面,但不是JavaScripts和CSS。 我想知道是否有可能直接在我的网络应用程序中压缩CSS和JS,或者它可能只在IIS中。如果可能,请指出我在我的代码中遗漏的内容。 感谢

protected void Application_PreRequestHandlerExecute(object sender, EventArgs e)
    {
        HttpApplication app = sender as HttpApplication;
        string acceptEncoding = app.Request.Headers["Accept-Encoding"];
        Stream prevUncompressedStream = app.Response.Filter;

        if (!(app.Context.CurrentHandler is Page ||
            app.Context.CurrentHandler.GetType().Name == "SyncSessionlessHandler") ||
            app.Request["HTTP_X_MICROSOFTAJAX"] != null)
            return;

        if (acceptEncoding == null || acceptEncoding.Length == 0)
            return;

        acceptEncoding = acceptEncoding.ToLower();

        // if (acceptEncoding.Contains("deflate") || acceptEncoding == "*")
        if (acceptEncoding.Contains("gzip") || acceptEncoding == "*")
        {
            // gzip
            app.Response.Filter = new GZipStream(prevUncompressedStream,
                CompressionMode.Compress);
            app.Response.AppendHeader("Content-Encoding", "gzip");

        }
        // else if (acceptEncoding.Contains("gzip"))
        else if (acceptEncoding.Contains("deflate"))
        {
            // defalte
            app.Response.Filter = new DeflateStream(prevUncompressedStream,
            CompressionMode.Compress);
            app.Response.AppendHeader("Content-Encoding", "deflate");
        }
    }

4 个答案:

答案 0 :(得分:1)

您确定* .css和* .js是由ASP.NET运行时处理的吗?默认情况下,您不必在runAllManagedModulesForAllRequests中将true设置为web.config

另外,为什么不依赖IIS内置压缩?

答案 1 :(得分:1)

提前缩小和压缩你的CSS和JS,同时将所有JS合并到一个文件中,将所有CSS合并到一个文件中:

Online JavaScript/CSS Compression Using YUI Compressor

如果你搜索一下,你会发现各种方法可以自动化压缩和缩小到构建后的过程或CI构建过程。

答案 2 :(得分:0)

您可以而且应该设置IIS来压缩静态文件。让IIS在它到达你的应用程序之前处理它。

您可以在IIS管理控制台中手动设置,也可以使用web.config中的<httpCompression>设置。

答案 3 :(得分:0)

是的,我们可以利用IIS 7.0压缩的恐惧。你也非常关心性能,在你的应用程序中创建一个JS和一个CSS总是更好,如果不可能的话,最好将这些JS和CCS合并到一个Js和CSS中。并且我们一直向我们推荐AJAX Minifier。

http://www.mindfiresolutions.com/How-to-merge-your-Javascript-files-in-ASPNET-1221.php

http://www.mindfiresolutions.com/How-to-merge-CSS-files-in-ASPNET-1230.php

如果您需要进一步的帮助,请随时与我联系。

谢谢, Himanshu Shekhar Sahu www.mindfiresolutions.com