gpt4 book ai didi

caching - 如何以编程方式为 Drupal 8 中的模块设置缓存期限?

转载 作者:行者123 更新时间:2023-12-04 15:54:55 25 4
gpt4 key购买 nike

Drupal 8:

我有一个 block 的代码成功地完成它的工作并返回它。该 block 称为“RacerProfile”,它将其所有内容转储到变量“$pageContent”中。最后它返回#markup。行。现在我如何告诉它每六个小时失效一次?

/**
* Provides a 'Racer Profile' Block
*
* @Block(
* id = "racer_profile",
* admin_label = @Translation("Slider v1 block")
* )
*/
class RacerProfile extends BlockBase {
/**
* {@inheritdoc}
*/
public function build()
{
// does all the work to make $pageContent via non-drupal
// database queries. However, for this example, let's just
// just imagine it gets the time of day. Then, let's set
// let's set the cache age to 5 seconds so F5-F5-F5-F5... should
// show 12 changes per minute on a repeatable schedule

$pageContent.= "<p> Date and Time: " . date("F jS Y h:i:s A");
return array(
'#markup' => $pageContent,
'#cache' => ['max-age' => 5 ,],
);

}
}

在其他 Drupal 答案中,我已经看到“D8 具有缓存标记和上下文,如果发生变化,它们会自动使 block 失效。”很好,但我的代码正在检查第二个数据库。 Drupal 无法知道那里发生了什么变化。 (显然没有检查。)那么如何添加具有指定超时的缓存标签? (或者缓存标签甚至这样做?)我找不到例子。

笔记:

- 上面的代码不会产生预期的结果。该页面对于匿名用户是静态的。只有当用户/管理员通过网络管理员清除缓存时,它才会改变。

- 显然,这与配置 > 性能 > 缓存 > 页面缓存最长期限的管理区域中的最长缓存期限无关。我不希望这适用于整个网站,只是这个 block 。此外,该设置显然无论如何都不会控制缓存的这一方面,而是会控制出现在呈现页面标题中的缓存信息。

- 显然,这也与 settings.php 没有任何关系,因为我不想再将它应用于整个站点,并且各种模块将有不同的超时要求。

- 网站的流量相对较低,所以如果一个东西一天渲染四次,即使一天只需要渲染一次也不是问题。每六个小时意味着它会在人们跨越四个时区醒来之前发生变化。大多。 ;) 我在这里明确表示,在我担心优化负载或使用之前,我完全有兴趣进行这项工作。

-我有多个具有不同有效期的自定义 block 。

-我当然已经用谷歌搜索了很多,但还没有找到为模块 block 指定特定(以单位时间测量)超时的示例。甚至在 drupal.org 上的 D8 模块示例中

- 重要的是,该 block 需要为匿名用户控制其缓存。没有帐户的人,“公众”浏览网站。

最佳答案

您可以在 block 的渲染数组中添加缓存设置:

'#cache' => [
'max-age' => 60 * 60 * 24,
],

这里的时间以秒为单位。另见: https://www.drupal.org/developing/api/8/cache/max-age

如果您确实有关于需要触发重置的提示,您可以使用其他一些 caching controls .听起来您非常清楚要在何时何地缓存什么,因此探索缓存 API 上的资料可能值得您花时间。

鉴于您正在从第二个数据库中提取数据,您可能还想探索 BigPipe ,这不是您询问的内容,但适用于需要一段时间才能收集给定页面的所有信息的用例。与在 Drupal 中缓存固定时间的数据相比,使用通过 BigPipe 构建的 block 可能会提供更好的用户体验(整个缓存引擎被重建以允许我们摆脱这种模式)。

关于caching - 如何以编程方式为 Drupal 8 中的模块设置缓存期限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37822250/

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