我们在斯巴达克斯的前端激活了SSR,并试图测试它是否有效。为此,我们将步进SSR并在生产模式下运行。之后,我们使用JMeter创建了10个同时请求两个简单CMS站点的用户的负载。还添加了一项检查,以验证答案实际上是SSR响应,而不是CSR“空索引html”。大约80%的请求没有进行SSR,而是退回到CSR响应。如果我们将同时使用的用户数量减少到只有2,那么它大部分时间都能工作。
为了防止这种情况是由我们的自定义之一造成的,我们对Spartacus代码进行了相同的实验,并产生了相同的结果。
我们的SSR优化方案如下:
const engineConfig: SsrOptimizationOptions = {
timeout: 5000, // spartacus default: 3000
maxRenderTime: 300_000, // spartacus default: 300_000 (5min)
concurrency: 20, // spartacus default: 20
cache: false,
cacheSize: 20,
debug: false,
};SSR引擎是否能够提供这样数量的同时请求?如果缓存被激活,它就能正常工作。但是我们有成千上万的页面,而且我们很可能无法缓存每一页。
发布于 2022-06-14 11:03:45
单个活动的SSR服务器无法处理大量负载。为了缓解性能问题,您可能需要一组Node.js进程和2层缓存:用于呈现的html (在CDN上)和OCC调用。
如果您拥有的页面数量并不多,或者您可以考虑提前录制/SSG(服务器端生成)所有页面,并将输出的html文件放入CDN中,而不是实时的SSR。
作为核心团队,我们将很快发布关于Spartacus的最佳SSR设置的新文档。但是,在它们发布之前,让我分享一些可能已经对您有帮助的早期草稿(来自按下):
发布于 2022-06-13 10:43:58
我们使用(无文档的) SsrOptimizationOption参数reuseCurrentRendering解决了这个问题。如果未设置此参数,则如果同一URL的另一个呈现同时进行,SSR呈现程序将中止SSR。
由于我们希望确保请求得到一个针对Crawler的SSR回复(SEO原因),我们需要确保SSR真的完成了,如果其他一些客户同时请求相同的URL的话。
我不确定这是否会产生任何副作用,或者为什么默认情况下reuseCurrentRendering没有设置为true .
https://stackoverflow.com/questions/72598894
复制相似问题