我目前在托管虚拟服务器上,我想为我的Asp.Net 3.5网站启用GZip压缩,我该如何开始?
我尝试使用'打包'的JS文件,但它们不起作用,我假设它是因为它们没有正确处理......?
答案 0 :(得分:19)
GZIP应由IIS处理,您运行的是哪个版本的IIS?
客户端负责向服务器询问GZiped版本。服务器将寻找两件事,请求是http 1.1,以及Accept-Encoding:gzip的头。查找这些标头的简便方法是使用firebug
IIS6 - 可以使用iis管理单元启用GZip。 Microsofts MSDN Topic On Gzip With IIS6
IIS7 - 可以使用httpCompression xml标记Nick Berardi's Getting IIS 7 to Compress JavaScript
使用web.config启用GZip通过缩小和打包javascript文件,您可以通过删除空格和缩短变量名来减少JavaScript的总大小。
答案 1 :(得分:7)
我这样做的首选方法是使用像YUI Compressor这样的压缩工具并使其成为构建过程的一部分(缩小后,压缩率不会那么高。或者你可以使用两者。重点是你不应该错过下面给出的更大的性能问题。)
IIS压缩的一个主要问题是它没有将所有JS / CSS文件打包到一个文件中。因此,如果您的站点有7个JS文件和20个CSS(令人惊讶的是这很常见),它将需要27次HTTP往返才能获取您的数据。编写HTTP处理程序来执行此操作对于具有共享托管的人来说是一个好主意。
一个简单的构建算法是在JS / CSS根目录中有一个 make 文件
If(build.config == release) {
Add your js file in order to the make files.
e.g. jQuery.js jQuery.form.js jQuery.container.js custom.js
Split and pass it as params to YUI
Compress
O/P to site.js
Delete all the above files.
}
在发布模式中,您的页面主页应该只引用site.js
修改:这是link以获得YUI和nant的集成。
编辑:Justin Etheredge发布了一个很棒的工具来组合和压缩名为SquishIt的css / js文件。
答案 2 :(得分:1)
我认为IIS是配置它的地方。如果您无法直接更改IIS,则可以为检查Accept-Encoding的所有请求添加处理程序:gzip或deflate设置。然后使用SharpZipLib之类的东西进行正确的压缩。然而,这很快就会出现问题。
您会发现手动压缩静态文件(如css或js)的成功有限。假设您在html中包含styles.css.gz
和scripts.js.gz
,并将gz扩展名映射到gzip文本的mimetype(是application/x-gzip
吗?)很多浏览器(即firefox,safari) ,也许铬)将处理它就好了。但有些浏览器不会,而你会把它们遗忘(链接,也许是较旧的歌剧)。
答案 3 :(得分:1)
您也可以使用代码来GZip脚本。它的工作方式是使用ASP.NET页面传递压缩文件和正确的标题(告诉浏览器该流是否已压缩)。我写了一篇文章,如何利用GZip压缩以及缩小(使用YUI)和捆绑脚本(减少到服务器的往返次数),你会在http://www.codeproject.com/KB/custom-controls/smartinclude.aspx找到它
答案 4 :(得分:1)
我一直在使用一个方便的小服务器控件进行CSS缩小,称为StyleManager。它使用YUI Compressor引擎盖。
添加到您的网站比手动添加YUI C更容易,它的用法很像asp.net的ScriptManager,所以很快就习惯了。
最重要的是 - 它也结合了您的CSS文件。因此,不需要下载10个CSS文件,它只是1,也将被压缩等。
查看 - gStyleManager.com
答案 5 :(得分:1)
我会考虑使用“deflate”,因为它比GZip更有效。我已为两者添加了代码。
要将此添加到您的站点,请创建一个文本文件并将未经授权的代码复制粘贴到该文件,然后将其另存为Global.asax。现在,将此文件添加到您网站的根目录。
<%@ Application Language="C#" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.IO.Compression" %>
<script runat="server">
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 == "*")
{
// defalte
app.Response.Filter = new DeflateStream(prevUncompressedStream,
CompressionMode.Compress);
app.Response.AppendHeader("Content-Encoding", "deflate");
}
else if (acceptEncoding.Contains("gzip"))
{
// gzip
app.Response.Filter = new GZipStream(prevUncompressedStream,
CompressionMode.Compress);
app.Response.AppendHeader("Content-Encoding", "gzip");
}
}
</script>
答案 6 :(得分:0)
上一篇文章适用于aspx页面,但不适用于css和js文件。在压缩中包含css
和js
文件的技巧是:
.css
和.js
个文件的文件扩展名更改为.css.aspx
和.js.aspx
<%@ Page ContentType="text/css" %>
和<%@ Page ContentType="text/javascript" %>
个文件中插入.css.aspx
和.js.aspx
.css.aspx
和.js.aspx
个文件,而不是.css
和.js
个文件