有谁知道如何在MVC 3中启用gzip压缩?我正在使用IIS7.
Google Chrome Audit的结果:
- 启用gzip压缩(4)
- 使用gzip压缩以下资源可以将传输大小减少大约三分之二(~92.23KB):
- / mydomain /可以节省~1.53KB
- jquery-1.4.4.min.js可以节省~51.35KB
- Cufon.js可以节省~11.89KB
- Futura.js可以节省~27.46KB
我之前看到过一些类似的问题,但我还没有找到一个完全描述我当前问题的问题,所以这里有:
我有一个页面,通过AJAX加载一个大的(介于0.5和10 MB之间)JSON文档,以便客户端代码可以处理它.加载文件后,我没有任何我不期望的问题.但是,下载需要很长时间,因此我尝试利用XHR Progress API呈现进度条,以向用户指示文档正在加载.这很好用.
然后,为了加快速度,我尝试通过gzip和deflate压缩服务器端的输出.这也很有效,但是,我的进度条停止了工作.
我已经研究了一段时间的问题,发现如果Content-Length没有使用请求的AJAX资源发送正确的头文件,onProgress事件处理程序就无法按预期运行,因为它不知道它在下载中有多远.发生这种情况时,lengthComputable会false在事件对象上设置一个名为call的属性.
这是有道理的,所以我尝试使用未压缩和压缩的输出长度显式设置标头.我可以验证是否正在发送标头,我可以验证我的浏览器知道如何解压缩内容.但onProgress处理程序仍然报告lengthComputable = false.
所以我的问题是:有没有办法使用AJAX Progress API来压缩/缩小内容?如果是这样,我现在做错了什么?
这是资源在Chrome网络面板中的显示方式,表明压缩正在运行:
这些是相关的请求标头,显示请求是AJAX并且Accept-Encoding设置正确:
GET /dashboard/reports/ajax/load HTTP/1.1
Connection: keep-alive
Cache-Control: no-cache
Pragma: no-cache
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.99 Safari/537.22
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Run Code Online (Sandbox Code Playgroud)
这些都是相关的响应报头,显示出Content-Length和Content-Type被正确设置:
HTTP/1.1 200 …Run Code Online (Sandbox Code Playgroud) 我刚刚搜索了gzip和Deflate,发现Deflate更好.
但是,当我检查Google,Facebook和StackExchange的响应标题时,他们都在使用GZIP.为什么他们使用gzip而不是Deflate?
有人能告诉我以下脚本在CPU负载性能和压缩方面的区别吗?
<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$ mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>
<ifModule mod_deflate.c>
<filesMatch "\.(js|css)$"> SetOutputFilter DEFLATE </filesMatch>
</ifModule>
Run Code Online (Sandbox Code Playgroud) 大多数网站都希望压缩其内容以节省带宽.但是,对于运行PHP的apache服务器,有两种方法可以实现 - 使用PHP或使用apache.那么哪一个在您的服务器上更快或更容易?
例如,在PHP中,我在页面的开头运行以下函数来启用它:
/**
* Gzip compress page output
* Original function came from wordpress.org
*/
function gzip_compression() {
//If no encoding was given - then it must not be able to accept gzip pages
if( empty($_SERVER['HTTP_ACCEPT_ENCODING']) ) { return false; }
//If zlib is not ALREADY compressing the page - and ob_gzhandler is set
if (( ini_get('zlib.output_compression') == 'On'
OR ini_get('zlib.output_compression_level') > 0 )
OR ini_get('output_handler') == 'ob_gzhandler' ) {
return false;
}
//Else if zlib is …Run Code Online (Sandbox Code Playgroud) 我有一个asp.NET 4(C#)的网站.
我正在努力寻找一种方法来更好地优化我的网站带宽.
我读了许多文章说DEFLATE比GZIP更快更小,因为GZIP(基于DEFLATE)增加了一些额外的数据.
检查bing.com和google.com的标题,它们似乎都发送了GZIP编码的数据.
假设我读到的是真的,我在这种情况下错过了GZIP的优势.所以我怀疑应该有一个很好的理由来选择GZIP来解决.
我的问题:
这是我用来发送DEFLATE的代码(来自Global.asax):
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 == "*")
{
// defalte
app.Response.Filter = new DeflateStream(prevUncompressedStream,
CompressionMode.Compress);
app.Response.AppendHeader("Content-Encoding", "deflate");
}
else if (acceptEncoding.Contains("gzip"))
{
// gzip
app.Response.Filter …Run Code Online (Sandbox Code Playgroud) 我们最近将一些网站从deflate切换到gzip,并注意到我们的服务器上的CPU负载显着增加.
我正在创建一个基于Pyramid框架的移动服务.因为它是移动的,所以减少带宽使用的一切都是加分.我正在考虑gzipping所有流量,甚至动态HTML页面.
Pyramid框架为此提供了什么样的钩子?或者是否有WSGI中间件用于任务?我想在Python级别上做这个,而不是Nginx/Apache,所以我可以更好地统计gzip带来多少好处.
我可以同时使用.htaccess:
DEFLATE
Run Code Online (Sandbox Code Playgroud)
在PHP,图像,HTML文件等+ php标题:
ob_start("gzhandler") ?
Run Code Online (Sandbox Code Playgroud)
如果不是,最好的机会是什么?我只是担心它是否会发生冲突.
gzip ×8
compression ×5
deflate ×3
apache ×2
http ×2
iis ×2
php ×2
asp.net ×1
asp.net-mvc ×1
encoding ×1
html ×1
http-headers ×1
javascript ×1
jquery ×1
mod-deflate ×1
optimization ×1
pyramid ×1
python ×1
sysadmin ×1