gpt4 book ai didi

ruby-on-rails - 网站的 Web 前端缓存最佳实践?

转载 作者:行者123 更新时间:2023-12-04 03:45:38 27 4
gpt4 key购买 nike

概括

当我查看 stackoverflow 和网络时,我发现普遍缺乏关于缓存使用 session 的高性能站点的最佳实践的良好文档。如果我们可以围绕一些基本构建 block 分享一些想法,尤其是在缓存方面,那将会很有帮助。出于本次讨论的目的,我将避免使用 memcache,而是专注于静态和完全生成的页面的缓存。

所以要设置场景,想象一个 Web 服务器(比如 nginx)、反向代理(比如 varnish)、应用服务器(随便)、数据库服务器(比如 mysql)。

匿名的

  • 静态项目(gif/jpg 等)
  • 半动态 (js/css)
  • 动态

  • 登录
  • 静态
  • 半动态 (js/css)
  • 动态

  • 一般来说,所有的 Anon 都应该是可缓存的,并且大部分都是 Logged In(忽略动态,暂时没有 ESI)。

    匿名 #1
  • 设置遥远的过期
  • 尽可能设置 ETag
  • 缓存控制:max-age=315360000

  • 匿名 #2
    (如果动态生成,则反向代理缓存结果,否则 Anon #1 规则适用)
  • 缓存控制:公共(public),s-maxage=3000

  • 匿名 #3
  • 缓存控制:公共(public),s-maxage=300

  • 登录 #1
  • 设置遥远的过期
  • 尽可能设置 ETag
  • 缓存控制:max-age=315360000

  • 登录 #2
    (如果动态生成,则让反向代理缓存结果,否则登录 #1 规则适用)
  • 缓存控制:公共(public),s-maxage=3000

  • 登录 #3
  • 缓存控制:s-maxage=0,必须重新验证

  • 你有什么建议?当答案出现时,我会更新帖子。

    最佳答案

    我对缓存一无所知,但这里有一些建议:

    Anon #1,2:(静态、半动态项目)
    您可以将它们设置为永不过期。如果您需要更改它们,请更改它们的 URL。 If-modified-since 检查很便宜,但不是免费的。

    Anon #3:(动态项目)
    这就是 ETags 和/或 Last-Modified 派上用场的地方。根据您提供的服务,您可以生成一个好的 Last-Modified header 。如果您的数据库存储了您计划显示的所有项目的修改日期,您可以使用 SELECT MAX(last_updated) FROM items_to_show 的效果。 .警告:这考虑了数据的年龄,而不是模板的年龄,所以如果你改变了你的
    django 模板,你会不知如何在
    标题。

    或者你可以用 ETag 做类似的事情。它可能是内容的校验和
    被生成。这将考虑到模板的更改。

    这两种缓存动态内容的方法需要注意的是
    他们真的
    比网络节省更多带宽
    服务器/数据库负载。您始终可以明智地使用 Expires
    标题虽然有助于在页面更改是周期性的并且
    可预见的。

    我对登录内容的建议是相似的,除了我会查看 Vary 标题。这可以向缓存代理发出信号,表明不会为不同的登录用户提供相同的内容。

    一般来说,我会使用 ETag 或 Last-modified,但不会同时使用两者。

    关于ruby-on-rails - 网站的 Web 前端缓存最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/729259/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com