Roy*_*mir 13 javascript iis gzip angular
我准备了所有设置(在我家,Windows 10)来创建和js作为gz文件,但仍然 - 我只获得常规js文件(原始大小).
组态
- Angular的webpack文件:
new CompressionPlugin({
asset: "[path].gz[query]",
algorithm: "gzip",
test: /\.js$|\.css$|\.html$/,
threshold: 10240,
minRatio: 0.8
})
Run Code Online (Sandbox Code Playgroud)
- 该配置的输出文件:
- Index.html文件:
...
<body>
<app-root>Loading...</app-root>
<script src="/dist/polyfills.bundle.js"></script>
<script src="/dist/main.bundle.js"></script>
</body>
...
Run Code Online (Sandbox Code Playgroud)
诊断
当我导航到http://kkk.com/index.html,我得到完整大小的文件:
另外 - 查看请求标头,我发送Accept-Encoding:gzip, deflate 标头:
题
为什么不提供GZ文件?
附加信息 :
好.经过大量搜索 - 我已经设法URLREWRITE用一些IIS配置来完成它.
首先 - 我禁用了这个:
因为我这里不需要CPU.我已经有了预压缩文件.
好的 - 这里的关键是这两个部分:
1)设置contentType to application/javascript
2)设置contentEncoding为gzip.
所以我写了这两条 urlrewrite规则:
第一部分是将所有js文件重写为js.gz,第二部分outboundrule是用于添加content encoding带有gzip值的标题.
这是配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="https" enabled="true" stopProcessing="false">
<match url="(.*).js" />
<conditions></conditions>
<action type="Rewrite" url="{R:1}.js.gz" appendQueryString="true" logRewrittenUrl="true" />
</rule>
</rules>
<outboundRules>
<rule name="Rewrite content-encoding header" preCondition="IsGZ" stopProcessing="false">
<match serverVariable="RESPONSE_CONTENT_ENCODING" pattern=".*" />
<action type="Rewrite" value="gzip" />
</rule>
<preConditions>
<preCondition name="IsGZ">
<add input="{URL}" pattern="\.gz$" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>
<urlCompression doStaticCompression="false" />
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
只需将其粘贴到web.config文件中即使您不使用Asp.net也是如此.
另外 - 你必须将它添加到mime类型:
现在,正如您所看到的那样,我确实得到了正确的大小:
更深入:
这是我预先设定的那个:
就这样.