代码之家  ›  专栏  ›  技术社区  ›  Churchill

缓存asp.net页

  •  0
  • Churchill  · 技术社区  · 14 年前

    我正在构建一个应用程序,我尝试了YSlow,并在我的大多数实践中获得了F级。我有大量的jscript正在致力于减少。我希望能够缓存其中的一些,因为这些页面会被多次调用。

    我如何做到这一点? 有什么推荐的最佳实践吗? 我还有其他的性能改进吗?

    3 回复  |  直到 13 年前
        1
  •  4
  •   Jon Hanna    14 年前
    1. 今年你重读过RFC2616了吗?如果没有,就这样做。尝试在不熟悉HTTP的情况下建立网站就像在你喝得酩酊大醉的时候试图勾引某人一样;仅仅因为很多人这么做并不意味着你会有很好的表现。

    2. 如果你知道最后一次更改的时间,在最后一次修改的标题中这样说(见下面的注释)。

    3. 如果您不知道某个内容最后一次更改的时间,但可以添加知道的功能,请这样做(例如,更新时的时间戳数据库行)。

    4. 如果您收到一个请求,其中的If Modified Since日期与上次更改时间匹配,或者If None与e-tag匹配,则发送304而不是整个页面。

    5. 不要打败为你所做的一切。关闭静态文件上的e-tags会使您获得更好的YSlow评级和更差的性能(除了在web场上,应该使用YSlow推荐的更复杂的解决方案)。忽略YSlow关于关闭e-tags的说法(也许他们现在已经修复了这个bug,不要再说了),除非你在一个不同服务器类型可以处理相同请求的web场上(例如,IIS和Apache处理相同的URI;Yahoo是,这就是为什么这对他们有效,而大多数人不是)。

    6. 公之于私,除非不恰当。

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

    8. 如果你有一个非常大的文件(.js,.css),那么给它一个版本号,并把这个版本放在用来访问它的URI中(诸如此类?版本=1.1.2)。然后,您可以设置一个很长的到期日期(1年)和/或硬编码的电子标签,而不必担心缓存过时,因为您下次将更改版本号,而对web的其他部分来说,它是一个新的资源,而不是更新的资源。

    编辑:

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

    1. 用于创建发送的实体的任何内容(脚本、代码隐藏)。

    2. 任何被用作其中一部分的东西,现在都被删除了。

    其中,3号可能是最难解决的问题,因为它毕竟已经被删除了。一种解决方案是跟踪资源本身的更改,并在删除用于创建资源的任何内容时更新此内容;另一种解决方案是使用“软删除”功能,即您仍保留该项目,但标记为已删除,并且不以任何其他方式使用。跟踪这些信息的最佳方式取决于应用程序。

        2
  •  1
  •   Yves M.    14 年前

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

    http://aspalliance.com/472

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

    http://msdn.microsoft.com/en-us/library/06bh14hk.aspx

        3
  •  1
  •   Musa Hafalir    14 年前

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