【问题标题】:SSR issue in 3.x version3.x 版本中的 SSR 问题
【发布时间】:2021-10-20 17:52:02
【问题描述】:

最近我们将 Spartacus 从 2.0 升级到 3.4 版本,以修复我们在早期版本的 Spartacus 中看到的 SSR 问题。但是,我们发现 SSR 优化存在一个非常严重的问题,此升级仅在生产环境中发现,我们于 2021 年 10 月 5 日上线。

根据文档,如果 SSR 无法在特定时间段内呈现页面,Spartacus 会回退到 CSR(内容侧呈现)。在后台,SSR 服务器继续渲染页面的 SSR 版本。此渲染完成后,页面将被放置在本地缓存中,以便在下次请求时返回。

在解释了 Spartacus 正在做什么 OOTB 之后,现在在生产环境中发生了什么?

如果用户 A 正在访问网站 www.freedom.com.au(澳大利亚网站),假设 Spartacus 回退到 CSR,因为 SSR 无法呈现页面。现在,如果同一个用户或另一个用户假设用户 B 请求 www.freedomfurniture.co.nz(新西兰站点),并且如果此请求转到缓存 AU 站点页面的同一节点,即使用户请求 NZ 站点,SSR 也会返回 AU 渲染页面.

为解决此问题,我们将渲染策略用作 ALWAYS_SSR,这样它就不会回退到 CSR,因此不会生成此缓存,并且客户不会看到此问题。这是我们正在采取的正确方法吗?这会影响性能还是会与 Spartacus 的 2.0 版相同?我们能够在本地开发框中轻松复制此问题,因为只有一个节点存在,并且在此修复后,它不会被复制。

如果不是问题,请告诉我们,我们正在围绕它进行一些错误的分析。

文档链接:https://sap.github.io/spartacus-docs/server-side-rendering-optimization/

【问题讨论】:

    标签: spartacus-storefront


    【解决方案1】:

    感谢您提出这个问题,我们会解决的。

    您看到此问题是因为默认的 renderKeyResolver 函数未在最终键中包含域,从而使对 https://example1.au/product/1https://example2.com/product/1 的请求相同。这意味着它们被缓存为同一个键 /product/1,而不是两个不同的键。

    作为临时解决方法,您可以在代码中执行以下操作:

    const domainIncludedRenderingKey = (req: Request): string => {
      return getRequestUrl(req); // the function you copied from our source code
    };
    

    注意:要解决 TS 错误,请确保从 express 导入 Request(如果尚未导入)。

    【讨论】:

      猜你喜欢
      • 2022-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-23
      • 2019-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多