【问题标题】:How to render and cache user-specific pages?如何渲染和缓存用户特定的页面?
【发布时间】:2013-06-24 21:40:41
【问题描述】:

我正在 web.py、postgres 和 redis 之上构建一个网站。在我的应用程序的某些视图中,有一些特定于用户的信息。例如,如果用户登录,顶部栏上的链接将不同于非登录用户的视图或“欢迎 $username”之类的内容。我可以通过渲染每个页面来响应每个请求来实现它。除了用户特定的信息外,某些视图的其他部分完全相同。所以我想缓存渲染的页面。我想出了一些实现方法,但我不知道该使用哪个,因为我有点自学Web开发,所以我想知道专业的Web开发人员如何处理这个问题。

这是我的方法:

  • 在 cookie 中保存一些数据并编写一段 javascript 脚本来在页面到达用户浏览器后操作 HTML DOM。这样,在我的应用程序的某些视图中,所有用户都获得完全相同的页面,但存储在 cookie 中的数据不同,然后使用 javascript 呈现的页面不同
  • 为每个用户渲染和缓存某些页面的每个版本,但我认为这不是一个好主意....
  • 渲染和缓存部分页面,并在请求进来时构建页面。我正在使用 web.py 的 Templetor 来渲染页面。现在有一个基本的站点范围模板可以用作包装器。如果我使用这种构造方法,而不是使用基本模板,我可能必须渲染和连接页面的不同部分。然后为每个用户缓存适当的片段。

我该怎么办?有更好的解决方案吗?对不起我糟糕的英语写作技巧:( 希望它能表达我想问的。任何帮助将不胜感激并提前感谢!谢谢! :D

编辑:包含用户特定信息的代码是这样的

<nav>
  <div class="wrapper">
    <div class="primary">
      <ul class="nav">
        <li><span>Home</span></li>
        <li><span>About</span></li>
        <li><span>Contact</span></li>
      </ul>
    </div>

    <div class="secondary">
      $if session.logged_in:
          <span>Welcome, $session.username</span>
          <a href="/new">new post</a>
          <a href="/logout">logout</a>
      $else:
          <a href="/register">register</a>
          <a href="/login">login</a>
    </div>
  </div>
</nav>

我现在正在使用会话,这意味着我不能只为每个用户缓存一个版本。 stackoverflow.com 如何实现这一点?当我未登录时,我看到顶部栏中的信息有所不同,并且确定我知道每个用户的视图都不同...

【问题讨论】:

  • 你的意思是缓存 HTML页面渲染后在服务器端吗?
  • @Febien 是的!确切地。在redis中缓存渲染页面
  • 你可以看看Varnish
  • @Febien 谢谢。我正在检查它。好像又是一个缓存软件……

标签: javascript caching web-applications web.py


【解决方案1】:

事实证明,大多数网站只是缓存数据而不是最终的 html 文件。这更容易管理,实施起来也更灵活。虽然仍然需要在每个请求上渲染页面,但可以减少数据库的负载。对于未登录的用户,app可以选择缓存最终的html页面。我一直在考虑缓存最终的 html 文件。我真是个白痴……

【讨论】:

  • 那么,你在 web.py 中是怎么做的呢?你能用你发现的内容更新你的答案吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-02
  • 2015-01-12
  • 2022-01-15
  • 2020-10-30
  • 2011-02-18
相关资源
最近更新 更多