2021-10-28 SAP Spartacus SSR 性能方面的一些学习笔记
如果客戶已經擁有 CDN 緩存,可以不啟用 cache:true, cacheSize:xxx 。 這種內存緩存功能僅適用于沒有生產就緒 CDN 的簡單店面。也就是說,如果客戶沒有任何外部緩存服務(akamai / cloudflare / 其他),他們可以嘗試,至少暫時,使用 SSR 服務內存緩存和 cache: true (最好也使用 cacheSize)。
concurrency 值設置得過大也不合適,這樣會導致額外的性能下降。當太多請求同時命中一個 Pod 時,請求可能會超時。
我們引入了一個數組,用來記住 callbacks.
我們僅在渲染完成或 maxRenderTime 到達時清除數組。
如果單個 URL 的渲染任務花費大量時間(例如一分鐘),則對該 URL 的所有請求顯然都會超時。 但是我們將存儲它們的回調直到 maxRenderTime 過去。 這意味著對于 1.5 分鐘,數組可能會隨著單個 URL 的增長而增長。 只有在 1.5 分鐘后,我們才放棄并清除數組。 您可以同時渲染 50 個 URL。
我們可以在補丁中潛在地改進/優化:立即從數組中刪除任何超時回調。 [由于所需額外重構的復雜性,我們決定不這樣做]。
除此之外,根據流量,增加 Pod 中的內存限制可能會有所幫助。
此外,如果渲染任務真的(由于任何原因)“永遠”掛起,無論如何都可能導致內存泄漏。
請注意 concurrency: 50(在 SsrOptimizationOptions 中)意味著 OptimizedSsrEngine 最多將執行 50 個并行渲染任務。
啟用 reuseCurrentRendering,這意味著:一次最多可以渲染 50 個不同的 URL(不管并行請求的數量)。
這意味著:如果您一次發送 51 個或更多不同 URL 的并行請求,則第 51 個 URL(以及更多)的請求將立即回退到 CSR。 這是設計使然。
此外,如果您啟用 debug:true,那么您將看到控制臺消息 CSR fallback: Concurrency limit exceeded (edited)
一般來說,并發請求越多,無論是否緩存 OCC,平均響應越慢。
當 OCC 響應沒有被緩存時,PDP 的 SSR 響應時間可能會有所不同,但當只有 1 個并發請求時,Maximum 甚至可以達到 7 秒。
與未緩存 OCC 時相比,緩存 OCC 時 SSR 響應時間平均快約 3 秒。
如果 OCC 未緩存,但使用靜態基站配置而不是動態配置 - 平均響應時間更快,例如 從 1 到 15 個并發請求,我們使用靜態 basesite 配置節省了 0.1-0.5 秒
理想情況下,如果可能,盡量避免 SSR 服務器過載。 相反,您應該在 SSR 之前設置一個帶有緩存的 CDN。 并且您應該巧妙地對緩存進行部分預熱,這樣 SSR 服務器就不會因為所有預熱請求而立即受到攻擊。 緩存失效和重新預熱也應該在某些部分巧妙地發生。
給 SSR 添加 OCC API 本地緩存用于測試的代碼:
// global static reference - so it's shared among all rendered apps in SSR: const CACHE = new Map<string, any>();@Injectable() export class CustomCacheInterceptor implements HttpInterceptor {intercept(request: HttpRequest<unknown>,next: HttpHandler): Observable<HttpEvent<unknown>> {const { method, urlWithParams } = request;if (!['GET', 'HEAD'].includes(method)) {console.log('🙁 CANNOT cache:', method, urlWithParams);return next.handle(request);}const cached = CACHE.get(`${method}_${urlWithParams}`);if (cached) {return of(cached);}console.log('ADD to cache:', method, urlWithParams);return next.handle(request).pipe(switchMap((response) => {if (response.type === HttpEventType.Response &&response instanceof HttpResponse &&response.status >= 200 &&response.status < 400) {CACHE.set(`${method}_${urlWithParams}`, response);}return of(response);}));} }然后在 app.module.ts 里添加:
{provide: HTTP_INTERCEPTORS,multi: true,useClass: CustomCacheInterceptor,},總結
以上是生活随笔為你收集整理的2021-10-28 SAP Spartacus SSR 性能方面的一些学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 航海王热血航线黄金果实如何得
- 下一篇: st股新规