繁体   English   中英

缓存asp.net页面

[英]Caching asp.net pages

我正在开发一个应用程序,并且尝试了YSlow并在大多数实践中获得了F级。 我有正在减少的jscript负载。 我希望能够缓存其中一些,因为页面被调用了很多次。

我有一个主修年龄,我想缓存脚本和CSS文件。

我该如何实现? 有建议的最佳做法吗? 我还可以进行其他性能改进吗?

  1. 您今年是否重新阅读RFC 2616? 如果没有,请执行。 尝试在不非常熟悉HTTP的情况下构建网站,就像在极度醉酒时诱引某人一样。 仅仅因为其他许多人这样做并不意味着您将拥有出色的表现。

  2. 如果可以在给定的时间段内安全地重用资源(例如,对于下一个小时/天/月是安全的),请这样说。 使用缓存控制标头的max-age组件以及过期(max-age比过期更好,但是两者都不花钱)。

  3. 如果您知道上次更改的时间,请在“ Last-Modified”标题中注明(请参见下面的注释)。

  4. 如果您不知道上次更改的时间,但是可以添加知道的功能(例如UPDATE上的时间戳数据库行)。

  5. 如果您可以保留每次更改的记录,请这样做,并从中建立一个电子标签。 尽管电子标签不应该基于时间,但是有一个例外,那就是您是否知道它们不能以更高分辨率进行更改(如果您每隔0.5秒钟不能进行超过1次更改,那么精确到0.5秒的时间就可以了,等等。 )

  6. 如果收到带有If-Modified-Since的请求,且日期匹配上次更改时间,或者If-None-Match匹配电子标签,则发送304,而不是整个页面。

  7. 使用Gzip或Deflate压缩(当客户说可以同时处理这两种情况时,deflate会稍微好一些),但请注意,您必须更改e-tag。 为此发送正确的Vary标头会中断IE缓存,因此请改用User-Agent(对于不完美的世界而言,不完美的解决方案)。 如果在.NET中滚动自己的压缩,请注意,刷新压缩流会导致bug,请编写一个包装程序,仅在对Close()进行最终刷新之前对Flush()的输出进行刷新。

  8. 不要击败为您完成的缓存。 关闭静态文件上的电子标签会给您带来更好的YSlow评级和更差的性能(网络农场除外,应使用YSlow建议的更复杂的解决方案)。 除非您处在网络农场中,不同的服务器类型可以处理相同的请求(例如IIS和IIS),否则请忽略YSlow关于关闭电子标签的说法(也许他们已经修复了该错误,不再赘述)。 Apache处理相同的URI; Yahoo这就是为什么它对他们有效的原因,但大多数人不是这样)。

  9. 除非不适当,否则要优先于公众而不是私人。

  10. 避免做任何依赖于会话的事情。 如果您可以关闭会话,那就更好了。

  11. 避免发送大量的viewstate。 如果您可以在没有viewstate的情况下执行某些操作,那就更好了。

  12. 进入IIS,然后查看“ HTTP标头”部分。 为静态文件设置适当的值。 请注意,这可以在每个站点,每个目录和每个文件的基础上完成。

  13. 如果您有一个真正大文件(.js,.css),请给它一个版本号,然后将该版本放入用于访问它的URI中(blah.js /?version = 1.1.2)。 然后,您可以设置一个非常长的有效期(一年)和/或一个硬编码的电子标签,而不必担心缓存陈旧,因为您下次将更改版本号,而在网络上的其他地方,它是一种新资源比更新的

编辑:

我说“请参阅下面的注释”,但没有添加注释。

任何资源的最后修改时间是以下最近的时间:

  1. 用于创建发送的实体的任何内容(脚本,代码后置)。

  2. 任何用作它一部分的东西。

  3. 用作其中一部分的任何内容现在都已删除。

其中,数字3可能是最难计算的,因为毕竟它已被删除。 一种解决方案是跟踪资源本身的更改,并在删除用于创建资源的任何内容时对其进行更新,另一种解决方案是在您仍然拥有该项目的情况下进行“软删除”,但是将其标记为已删除且未在其中使用任何其他方式。 跟踪这些内容的最佳方法是什么,取决于应用程序。

您应该只创建单独的.js和.css文件,然后浏览器会为您进行缓存。 使用js最小化器从js文件中删除所有空白也是一个好主意。

如果您有一个大于100Kb的大型ViewState,请尝试将其减小。 如果ViewState仍然很大,则可以将ViewState作为文件存储在服务器上...

http://aspalliance.com/472

如果页面不是太动态,您也可以在页面上使用缓存...

http://msdn.microsoft.com/zh-CN/library/06bh14hk.aspx

您还可以将常见的js和CSS库引用到受信任的在线商店。 例如,如果将jquery添加为<script src="http://code.jquery.com/jquery-latest.js"></script>则jquery文件可能已由客户端的浏览器缓存,原因是另一个以前引用此地址的网站,即使由于您的网站而被缓存。 这种方式可能有利有弊,但确实存在。 我也不知道YSlow的响应是否以此方式改变。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM