IIS 7.5 不一致地 Gzip 文件(使用 PHP 和 ASP.NET)

IIS 7.5 不一致地 Gzip 文件(使用 PHP 和 ASP.NET)

我对运行 IIS 7.5 的服务器做了一些更改,web.config以提高性能(主要是前端)。

第三方测试工具显示该网站运行的是“PHP/5.3.10,ASP.NET”,如果我没记错的话,它是 ASP.NET 4.5

我认为这是由于技术的奇怪混合(例如在 IIS 上运行 PHP)但接触任何东西都会让我感到紧张。

我添加了(仅)来自 expires 标头和 gzip 的指令H5BP IIS 服务器配置

我记得我是在 2013 年 1 月 15 日下午添加了这些指令。Pingdom 性能测试工具对该网站的测试历史记录如下:可在此处获得

您可以看到传输大小急剧下降的位置(单击历史记录选项卡)。

从那时起,似乎每次我测试时,不同的文件(通常是 CSS 和 JS 等资源)都会毫无理由地使用或不使用 gzip。有时似乎所有内容都使用 gzip 提供,有时几乎没有任何内容似乎使用压缩提供,但通常介于两者之间(如您在历史记录中看到的那样)。

到底是怎么回事?

我该如何修复它?

该网站并未处于积极开发之中,虽然在 15 日之后向页面添加了一些额外数据(我添加的 Google Analytics 插件脚本以改进跟踪),但没有什么可以解释如此大的变化和不一致性。

我最好的猜测是它与用于压缩的 CPU 资源有关,并且这个问题看起来很接近:为什么 gzip 压缩在 IIS 中的效率有所不同?

答案1

我在这个页面的评论中发现了一个可能的罪魁祸首; weblog.west-wind.com

本质上,OOTB,仅当文件在 10 秒内被请求至少两次时,IIS 才会进行 gzip 压缩。

这是通过 web.config 进行调整的 - 不幸的是默认情况下它是锁定的,所以您必须编辑 applicationhost.config 以将 overrideModeDefault="DENY" 更改为 ALLOW。

参考资料在这里:论坛

相关配置片段如下。您将看到我还弄乱了 SVG 字体的内容类型,因为默认情况下 IIS 不会对它们进行 gzip 压缩,因此通过强制将它们转换为 text/xml,它们也会被压缩。(Google PageSpeed抱怨这个)

网页配置

  <system.webServer>
        <serverRuntime frequentHitThreshold="1" enabled="true" />
        <staticContent>
              <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="30.00:00:00" />
              <remove fileExtension=".svg" />
              <mimeMap fileExtension=".svg" mimeType="text/xml" />
        </staticContent>
        <httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
            <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
            <dynamicTypes>
                <add mimeType="*/*" enabled="true" />
            </dynamicTypes>
            <staticTypes>
                <add mimeType="image/svg+xml" enabled="true" />
                <add mimeType="text/xml" enabled="true" />
                <add mimeType="*/*" enabled="true" />
            </staticTypes>
        </httpCompression>
        <urlCompression doStaticCompression="true" doDynamicCompression="true"/>
    </system.webServer>

应用程序主机配置

      <section name="serverRuntime" overrideModeDefault="Allow" />

相关内容