ASP.NET MVC - 共享主机环境中的图像压缩

时间:2014-10-29 22:27:36

标签: asp.net-mvc shared-hosting

我有一个基于ASP.NET MVC的电子商务解决方案,它被YSlow,PageSpeed等用于不压缩图像。如果我运行自己的IIS服务器,我会将其设置为使用gzip压缩。但是,我在共享主机上运行我的站点,并且无法访问IIS。有没有直接的方法来使用共享主机完成此任务? 谢谢, JP

1 个答案:

答案 0 :(得分:2)

JP-这对于共享主机来说是一个非常大的问题,你肯定无法参与root配置。然而,好消息是你可以申请ActionFilters让你走出困境。因此,您可以应用一点GZIP柔情,以确保您的页面以最紧凑的格式传输。

我回答了一个非常类似于这个问题的问题,其中的详细信息如下: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文件以查看我的意思。

此外,压缩难以压缩的数据非常耗费处理器,您最终可能会使用更多资源而不是更少资源。