2013-04-04 116 views
0

我读过所有的地方,我想弄清楚,如果我理解缓存的方式发生在Drupal 6,我们有一个具有实时股票行情的一个网站。我们启用了Drupal缓存功能,因此股票价格最终会被缓存并冻结在特定位置。我想我可以处理它的一种方式是将自动收报器放在我在自定义模块中创建的块中,并设置BLOCK_NO_CACHE,但是如果我正确理解这一点,如果启用了站点缓存,则会将整个页面缓存起来,包括无论其各自的缓存设置如何,它上面的任何和所有块。它是否正确?那么,我无法利用网站缓存,如果我有某些不应该缓存的点?有谁知道我可能能够用来获得两全其美的另一种解决方案吗?为了能够进行网站缓存,但也有实时股票行情?顺便说一下,股票代码正在向雅虎财务API发出JSON请求以获取报价。Drupal的6缓存和块

+0

也许我失去了一些东西,但如果你的股票是将请求发送到雅虎这种情况发生在用户的浏览器和雅虎API服务器之间。 Drupal在这种情况下没有任何缓存,您的问题可能在其他地方... – pamatt 2013-04-04 22:40:43

+0

对不起,pamatt,我不清楚。它实际上是通过使用page.tpl.php文件中的file_get_contents()来完成的,但是你是对的,如果我将它移动到可能使用jQuery并执行.ajax调用,这可能不会受到缓存的影响。我会测试一下。 – 2013-04-04 23:48:44

回答

1

你是正确的,该指令BLOCK_NO_CACHE只适用于块级。但是,当启用页面缓存时,Drupal会缓存整个页面(其中也包含该块)。但是这只适用于匿名用户。 Drupal的理念是匿名用户的内容总是相同的,所以他们得到了缓存页面。但是这不适用于经过验证的用户。由于不同的用户可能对页面的某些部分具有不同的访问权限(例如,对于管理员来说,链接块的外观与普通用户不同)。

你可能想看看这个讨论:BLOCK_NO_CACHE not working for anonymous users

而且还有一个解决方案,你会在这个讨论绊倒。这是这个模块:Ajax Blocks。从模块中提取的描述:

允许当页面被匿名用户观看装载 后通过附加的AJAX请求加载一些块整个缓存页面。它是 适合于大多数情况下是静态的网站,匿名用户的页面缓存是一个很大的好处,但有一些 信息必须是动态的。

+0

太棒了,听起来很完美。谢谢! – 2013-04-04 23:44:45