日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2021-10-28 SAP Spartacus SSR 性能方面的一些学习笔记

發(fā)布時(shí)間:2023/12/19 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2021-10-28 SAP Spartacus SSR 性能方面的一些学习笔记 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

如果客戶已經(jīng)擁有 CDN 緩存,可以不啟用 cache:true, cacheSize:xxx 。 這種內(nèi)存緩存功能僅適用于沒有生產(chǎn)就緒 CDN 的簡(jiǎn)單店面。也就是說,如果客戶沒有任何外部緩存服務(wù)(akamai / cloudflare / 其他),他們可以嘗試,至少暫時(shí),使用 SSR 服務(wù)內(nèi)存緩存和 cache: true (最好也使用 cacheSize)。

concurrency 值設(shè)置得過大也不合適,這樣會(huì)導(dǎo)致額外的性能下降。當(dāng)太多請(qǐng)求同時(shí)命中一個(gè) Pod 時(shí),請(qǐng)求可能會(huì)超時(shí)。

我們引入了一個(gè)數(shù)組,用來記住 callbacks.

我們僅在渲染完成或 maxRenderTime 到達(dá)時(shí)清除數(shù)組。

如果單個(gè) URL 的渲染任務(wù)花費(fèi)大量時(shí)間(例如一分鐘),則對(duì)該 URL 的所有請(qǐng)求顯然都會(huì)超時(shí)。 但是我們將存儲(chǔ)它們的回調(diào)直到 maxRenderTime 過去。 這意味著對(duì)于 1.5 分鐘,數(shù)組可能會(huì)隨著單個(gè) URL 的增長(zhǎng)而增長(zhǎng)。 只有在 1.5 分鐘后,我們才放棄并清除數(shù)組。 您可以同時(shí)渲染 50 個(gè) URL。
我們可以在補(bǔ)丁中潛在地改進(jìn)/優(yōu)化:立即從數(shù)組中刪除任何超時(shí)回調(diào)。 [由于所需額外重構(gòu)的復(fù)雜性,我們決定不這樣做]。
除此之外,根據(jù)流量,增加 Pod 中的內(nèi)存限制可能會(huì)有所幫助。
此外,如果渲染任務(wù)真的(由于任何原因)“永遠(yuǎn)”掛起,無論如何都可能導(dǎo)致內(nèi)存泄漏。

請(qǐng)注意 concurrency: 50(在 SsrOptimizationOptions 中)意味著 OptimizedSsrEngine 最多將執(zhí)行 50 個(gè)并行渲染任務(wù)。
啟用 reuseCurrentRendering,這意味著:一次最多可以渲染 50 個(gè)不同的 URL(不管并行請(qǐng)求的數(shù)量)。
這意味著:如果您一次發(fā)送 51 個(gè)或更多不同 URL 的并行請(qǐng)求,則第 51 個(gè) URL(以及更多)的請(qǐng)求將立即回退到 CSR。 這是設(shè)計(jì)使然。

此外,如果您啟用 debug:true,那么您將看到控制臺(tái)消息 CSR fallback: Concurrency limit exceeded (edited)

一般來說,并發(fā)請(qǐng)求越多,無論是否緩存 OCC,平均響應(yīng)越慢。

當(dāng) OCC 響應(yīng)沒有被緩存時(shí),PDP 的 SSR 響應(yīng)時(shí)間可能會(huì)有所不同,但當(dāng)只有 1 個(gè)并發(fā)請(qǐng)求時(shí),Maximum 甚至可以達(dá)到 7 秒。

與未緩存 OCC 時(shí)相比,緩存 OCC 時(shí) SSR 響應(yīng)時(shí)間平均快約 3 秒。

如果 OCC 未緩存,但使用靜態(tài)基站配置而不是動(dòng)態(tài)配置 - 平均響應(yīng)時(shí)間更快,例如 從 1 到 15 個(gè)并發(fā)請(qǐng)求,我們使用靜態(tài) basesite 配置節(jié)省了 0.1-0.5 秒

理想情況下,如果可能,盡量避免 SSR 服務(wù)器過載。 相反,您應(yīng)該在 SSR 之前設(shè)置一個(gè)帶有緩存的 CDN。 并且您應(yīng)該巧妙地對(duì)緩存進(jìn)行部分預(yù)熱,這樣 SSR 服務(wù)器就不會(huì)因?yàn)樗蓄A(yù)熱請(qǐng)求而立即受到攻擊。 緩存失效和重新預(yù)熱也應(yīng)該在某些部分巧妙地發(fā)生。

給 SSR 添加 OCC API 本地緩存用于測(cè)試的代碼:

// 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,},

總結(jié)

以上是生活随笔為你收集整理的2021-10-28 SAP Spartacus SSR 性能方面的一些学习笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。