【发布时间】:2014-10-29 22:27:36
【问题描述】:
我有一个基于 ASP.NET MVC 的电子商务解决方案,由于不压缩图像而受到 YSlow、PageSpeed 等的影响。如果我运行自己的 IIS 服务器,我会将其设置为使用 gzip 压缩。但是,我在共享主机上运行我的站点并且无权访问 IIS。有没有使用共享主机完成这项任务的直接方法? 谢谢, 太平绅士
【问题讨论】:
标签: asp.net-mvc shared-hosting
我有一个基于 ASP.NET MVC 的电子商务解决方案,由于不压缩图像而受到 YSlow、PageSpeed 等的影响。如果我运行自己的 IIS 服务器,我会将其设置为使用 gzip 压缩。但是,我在共享主机上运行我的站点并且无权访问 IIS。有没有使用共享主机完成这项任务的直接方法? 谢谢, 太平绅士
【问题讨论】:
标签: asp.net-mvc shared-hosting
JP - 这是共享主机的一个非常大的问题,您绝对不能在根配置上聚会。但是,好消息是您可以申请ActionFilters 让您摆脱困境。因此,您可以应用一点 GZIP 柔化来确保您的页面以最紧凑的格式传输。
不久前我在 SO 上回答了一个与此非常相似的问题,详细信息在这里:how to gzip content in asp.net MVC?
回顾一下,这是我在这个场合的建议。
public class CompressAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var encodingsAccepted = filterContext.HttpContext.Request.Headers["Accept-Encoding"];
if (string.IsNullOrEmpty(encodingsAccepted)) return;
encodingsAccepted = encodingsAccepted.ToLowerInvariant();
var response = filterContext.HttpContext.Response;
if (encodingsAccepted.Contains("deflate"))
{
response.AppendHeader("Content-encoding", "deflate");
response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
}
else if (encodingsAccepted.Contains("gzip"))
{
response.AppendHeader("Content-encoding", "gzip");
response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
}
}
}
在控制器中的使用:
[Compress]
public class BookingController : BaseController
{...}
对于您正在使用的图像类型,它可能适用于您的用例,也可能不适用,但请试一试。尽管如此,有证据表明图像并没有真正从 GZIP 中受益:https://webmasters.stackexchange.com/questions/8382/gzipped-images-is-it-worth
我认为课程的马,虽然 YSlow 和 PageSpeed 等工具可以指示问题,但最终结果通常最好留给众多设备和格式处理程序进行本地协调(可以肯定的是,某些压缩可能已经无论如何都已被服务器应用,即使这些工具报告了一个问题)。
回顾一下:
GZipping 图像不值得。收缩是微不足道的,甚至是负面的,因为图像格式已经做了非常好的压缩工作。尝试压缩 JPG 文件以了解我的意思。
此外,压缩难以压缩的数据会占用大量处理器资源,您最终可能会使用更多而不是更少的资源。
【讨论】: