如何呈现和缓存特定于用户的页面?

时间:2013-06-24 21:40:41

标签: javascript caching web-applications web.py

我正在web.py,postgres和redis之上建立一个网站。在我的应用程序的一些视图中,有一些用户特定的信息。例如,如果用户登录,则顶部栏上的链接将与非登录用户的视图或“welcome $ 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如何实现这一点?当我没有登录时,我看到顶栏中的信息是不同的,并确定我知道每个用户的视图都不同......

1 个答案:

答案 0 :(得分:0)

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