在每个页面上使用特定于会话的数据缓存Drupal站点

时间:2010-12-22 17:15:00

标签: drupal caching drupal-6 fragment-caching

我们有一个用Drupal 6编写的网站。

我们希望使用Drupal的缓存机制来提高性能,但是当我们打开它时,我们发现了问题,因为我们的站点在每个页面上都显示了会话数据。 Drupal的缓存系统仅适用于静态内容页面,而我们的会话数据实际上意味着我们的页面都不是静态的。

我们已经提出了两个解决方案:

  1. 重写显示会话数据的块,以便使用Ajax加载非静态数据,这样主HTML内容就是静态的。其缺点在于它将意味着相当多的工作,并且它将减少非Javascript用户和专业浏览器(即屏幕阅读器)的功能。

  2. 将会话数据移至iframe或类似内容。这听起来不对,我不想这样做,但我想这会解决问题。

  3. 或者找到一个替代的缓存系统,它允许我们以一种可以处理每个页面上有一小块动态数据的方式缓存网站。这是我们的首选方案,但我们无法在找到任何内容方面取得任何进展,因此这里有一个问题。

  4. 因此,如果有任何建议可以帮助我们选择3,请告诉我们。谢谢。

    (ps - 我知道Drupal 7确实有一个改进的缓存系统可以帮助解决这个问题,但我们还没有准备好转移到D7)

    [编辑] 在这方面没有取得多大进展,所以我会把它打开以获得赏金。

    我已经了解了Ubercart如何处理类似的情况(因为它是最流行的Drupal模块之一,并且基本上和我们一样解决了相同的问题)。当用户未登录时,他们通过购物车信息块显示静态文本(即“点击此处查看您的购物篮”),并在用户登录时仅在每个页面上显示动态购物车数据来解决问题。我们不觉得这实际上解决了这个问题;它只是回避它,这不是我们想要的。但我担心如果Ubercart采取这种方式,它可能会成为唯一的选择。

5 个答案:

答案 0 :(得分:3)

你看过Authenticated User Page Caching (Authcache) module了吗?它与您在上面的选项1中描述的内容类似。

答案 1 :(得分:2)

Ajax块。

比Authcache更简单的解决方案是Ajax块。

http://drupal.org/project/ajaxblocks

效果很好,从我记忆中它可以很好地处理没有js的用户。

答案 2 :(得分:1)

另一种解决方案是使用ESI门将页面呈现为块的集合。围绕这个有一些项目,我不是专家,但搜索谷歌可以给你一些想法。

PS:D7会遇到同样的问题,缓存大致相同。

答案 3 :(得分:0)

答案 4 :(得分:0)

我的问题非常相似。根据会话设置,正文背景会发生变化。我可以使用jQuery向body标签添加一个类,但不知道这个性能是否会好看。

我会测试并报告回来。