ASP.NET MVC 3 网站优化总结(三)Specify Vary: Accept-Encoding header

本文探讨了在ASP.NET MVC3网站优化过程中遇到的问题,即当对CSS和JS文件开启Gzip后,出现两份文件导致加载速度反而减慢的情况。通过解析Vary:Accept-Encoding header的作用,本文提供了解决方案,并演示了如何在configuration节点下添加代码片段以解决此问题,从而使得Gzip真正发挥作用,提升了网站性能。

来源:http://www.lidongkui.com/asp-net-mvc-3-website-optimization-summary-accept-encoding-header


继续进行 ASP.NET MVC 3 网站优化工作,使用 Google Page 检测发现提示 You should Specify Vary: Accept-Encoding header,The following publicly cacheable, compressible resources should have a "Vary: Accept-Encoding" header。

相信很多人遇到过这个问题,它是什么意思呢?网上找到的资料为:

原来对CSS和JS文件开启Gzip后,会输出两份文件:Gzip压缩过的、未经Gzip压缩的,这样一来不仅没加快网页加载速度,反而更慢了;而 Vary: Accept-Encoding header 的作用就是指定输出压缩过的那部分文件。这样一来,Gzip压缩才算是真正起了作用。

解决的方法为在 configuration 节点下添加下边的代码片断即可:

<configuration>
    <system.webServer>
        <httpProtocol>
            <customHeaders>
                <remove name="Vary"></remove>
                <add name="Vary" value="Accept-Encoding"></add>
            </customHeaders>
        </httpProtocol>
    </system.webServer>
</configuration>

重新运行网站,发现此问题已经解决,如下图:

Specify a Vary: Accept-Encoding header

这样我们的 ASP.NET MVC 3 网站性能又提升了一下,下篇我们会看看 ASP.NET MVC 3 中缓存的使用。


<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" exclude-result-prefixes="fo"> <!-- 根元素 --> <xsl:template match="/"> <xsl:apply-templates select="Root"/> </xsl:template> <!--主模板//--> <xsl:template match="Root"> <!--在此可以定义一些全局的风格信息,如字体等--> <fo:root font-family="Microsoft YaHei" xmlns:fo="http://www.w3.org/1999/XSL/Format"> <!--版面定义//--> <fo:layout-master-set> <fo:simple-page-master master-name="A4" page-width="21cm" page-height="29.7cm"> <fo:region-body margin-top="1.5cm" margin-bottom="1cm" margin-left="5%" extent="1cm"/> <!--页眉//--> <fo:region-before extent="1cm"/> <!--页脚//--> <fo:region-after extent="1cm"/> </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-reference="A4"> <!--页眉显示内容--> <fo:static-content flow-name="xsl-region-before"> <!--页眉显示图片内容--> <fo:block text-align="center" margin-top="0.5cm" margin-bottom="0.5cm" font-weight="bold" font-size="5mm" wrap-option="no-wrap"> <xsl:value-of select="title"/> </fo:block> </fo:static-content> <!--页脚显示内容--> <fo:static-content flow-name="xsl-region-after"> <fo:block text-align="center" font-size="10pt"> <xsl:value-of select="concat(&#39;页码设置:&#39;)"/> <fo:page-number/>OF <fo:page-number-citation ref-id="end"/> </fo:block> </fo:static-content> <fo:flow flow-name="xsl-region-body"> <xsl:apply-templates select="headList" /> </fo:flow> </fo:page-sequence> </fo:root> </xsl:template> <xsl:template match="headList"> <fo:block font-size="4mm"> <fo:table text-align="center" border-collapse="collapse" letter-spacing="1px" width="100%" border-width="1pt"> <fo:table-column border-style="solid" border-width="1pt" column-width="20%"/> <fo:table-column border-style="solid" border-width="1pt" column-width="20%"/> <fo:table-column border-style="solid" border-width="1pt" column-width="10%"/> <fo:table-column border-style="solid" border-width="1pt" column-width="10%"/> <fo:table-column border-style="solid" border-width="1pt" column-width="8%"/> <fo:table-column border-style="solid" border-width="1pt" column-width="20%"/> <!--表头--> <fo:table-header> <fo:table-row display-align="center" border-style="solid" font-weight="bold" border-width="1pt" padding="10px"> <fo:table-cell> <fo:block>物料编码</fo:block> </fo:table-cell> <fo:table-cell> <fo:block>物料说明</fo:block> </fo:table-cell> <fo:table-cell> <fo:block>子库存</fo:block> </fo:table-cell> <fo:table-cell> <fo:block>货位</fo:block> </fo:table-cell> <fo:table-cell> <fo:block>数量</fo:block> </fo:table-cell> <fo:table-cell> <fo:block>说明</fo:block> </fo:table-cell> </fo:table-row> </fo:table-header> <!--表明细--> <fo:table-body> <xsl:apply-templates select="lineList"/> </fo:table-body> </fo:table> </fo:block> <fo:block id="end"/> </xsl:template> <xsl:template match="lineList"> <fo:table-row border-style="solid"> <fo:table-cell> <fo:block> <xsl:value-of select="itemCode"/> </fo:block> </fo:table-cell> <fo:table-cell> <fo:block> <xsl:value-of select="itemDesc"/> </fo:block> </fo:table-cell> <fo:table-cell> <fo:block> <xsl:value-of select="supplySubinv"/> </fo:block> </fo:table-cell> <fo:table-cell> <fo:block> <xsl:value-of select="supplyLocatorCode"/> </fo:block> </fo:table-cell> <fo:table-cell> <fo:block> <xsl:value-of select="needQty"/> </fo:block> </fo:table-cell> <fo:table-cell> <fo:block> <xsl:value-of select="specify"/> </fo:block> </fo:table-cell> </fo:table-row> </xsl:template> </xsl:stylesheet> 有什么问题
最新发布
10-11
你的 XSL-FO 文件整体结构是完整的,能够生成一个基本的 PDF 报表,但存在一些潜在问题和优化空间,特别是在样式、布局、兼容性等方面。以下是详细分析和建议: --- ### ✅ **优点** - 使用了标准的 XSL-FO 结构; - 页面设置清晰(A4、页边距、页眉页脚); - 表格结构完整,包含表头和明细; - 通过 `xsl:apply-templates` 实现了良好的模板分离。 --- ### ⚠️ **问题与建议** #### 1. **`<fo:region-body>` 中的 `extent="1cm"` 设置错误** ```xml <fo:region-body margin-top="1.5cm" margin-bottom="1cm" margin-left="5%" extent="1cm"/> ``` - **问题**:`fo:region-body` 不应设置 `extent` 属性,该属性用于 `fo:region-before` 和 `fo:region-after`。 - **建议**:移除 `extent="1cm"`: ```xml <fo:region-body margin-top="1.5cm" margin-bottom="1cm" margin-left="5%"/> ``` --- #### 2. **表格 `border-collapse="collapse"` 可能不被支持** ```xml <fo:table text-align="center" border-collapse="collapse" ...> ``` - **问题**:Apache FOP 对 `border-collapse="collapse"` 的支持有限,可能导致边框显示异常。 - **建议**:使用默认边框处理,或使用 `border-style="solid"` 明确设置每个单元格边框。 --- #### 3. **`font-size="4mm"` 太小,可能导致内容显示不清晰** ```xml <fo:block font-size="4mm"> ``` - **建议**:一般建议使用 `pt` 单位,如 `font-size="10pt"`,更符合打印文档的阅读习惯。 --- #### 4. **`letter-spacing="1px"` 不推荐用于 Apache FOP** ```xml <fo:table text-align="center" ... letter-spacing="1px" ...> ``` - **问题**:FOP 对 `letter-spacing` 的支持有限,可能导致无效或异常显示。 - **建议**:如非必要,删除该属性;如需调整间距,可使用 `padding` 或 `margin` 替代。 --- #### 5. **`fo:table-column` 的 `border-style` 和 `border-width` 是多余的** ```xml <fo:table-column border-style="solid" border-width="1pt" ... /> ``` - **问题**:`fo:table-column` 不支持 `border-style` 和 `border-width` 属性。 - **建议**:将边框设置移到 `fo:table-cell` 上。 --- #### 6. **`fo:page-number-citation` 需要 `id="end"` 的位置准确** ```xml <fo:block id="end"/> ``` - **建议**:确保 `fo:block id="end"` 放在文档最后,以正确引用总页数。目前位置基本正确。 --- #### 7. **未处理数据为空的情况** 如果 `lineList` 为空,表格将不显示任何数据行。 - **建议**:添加空数据提示: ```xml <xsl:if test="not(lineList)"> <fo:table-row> <fo:table-cell number-columns-spanned="6"> <fo:block>暂无数据</fo:block> </fo:table-cell> </fo:table-row> </xsl:if> ``` --- ### ✅ **优化建议** 1. **使用变量统一控制样式**,提高可维护性; 2. **添加分页控制**,避免内容跨页断裂; 3. **使用 `keep-together.within-page`** 防止表格行跨页断开; 4. **为表格添加背景色或交替行样式**,提升可读性; 5. **确保字体兼容性**,如中文字体是否在 FOP 中正确配置。 --- ### ✅ 示例优化后的 `fo:table-body` 模板 ```xml <xsl:template match="lineList"> <fo:table-body> <xsl:if test="not(lineList)"> <fo:table-row> <fo:table-cell number-columns-spanned="6"> <fo:block>暂无数据</fo:block> </fo:table-cell> </fo:table-row> </xsl:if> <xsl:for-each select="lineList"> <fo:table-row border-style="solid" border-width="1pt"> <fo:table-cell padding="5px"> <fo:block><xsl:value-of select="itemCode"/></fo:block> </fo:table-cell> <fo:table-cell padding="5px"> <fo:block><xsl:value-of select="itemDesc"/></fo:block> </fo:table-cell> <fo:table-cell padding="5px"> <fo:block><xsl:value-of select="supplySubinv"/></fo:block> </fo:table-cell> <fo:table-cell padding="5px"> <fo:block><xsl:value-of select="supplyLocatorCode"/></fo:block> </fo:table-cell> <fo:table-cell padding="5px" text-align="right"> <fo:block><xsl:value-of select="needQty"/></fo:block> </fo:table-cell> <fo:table-cell padding="5px"> <fo:block><xsl:value-of select="specify"/></fo:block> </fo:table-cell> </fo:table-row> </xsl:for-each> </fo:table-body> </xsl:template> ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值