From ce3a746644f228a9e43a33813b47d02f79ade3cf Mon Sep 17 00:00:00 2001 From: Benedikt Meurer Date: Tue, 15 Jan 2019 14:55:39 +0100 Subject: [PATCH] perf(platform-server): use shared `DomElementSchemaRegistry` instance (#28150) (#28151) Right now the `ServerRendererFactory2` creates a new instance of the `DomElementSchemaRegistry` for each and every request, which is quite costly (for the Tour of Heroes SSR this takes around **30%** of the overall execution time). Since the schema is never modified, but only used in a read-only fashion, it should be possible to re-use a single instance instead. Naive performance testing with 100 concurrent connections and 1000 requests in total shows an approximate **33%** improvement in Req/Sec on the Tour of Heroes SSR example. PR Close #28150 PR Close #28151 --- packages/platform-server/src/server_renderer.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/platform-server/src/server_renderer.ts b/packages/platform-server/src/server_renderer.ts index 9cd29cfa6a493..bf2ac6d21dab9 100644 --- a/packages/platform-server/src/server_renderer.ts +++ b/packages/platform-server/src/server_renderer.ts @@ -12,11 +12,13 @@ import {DOCUMENT, EventManager, ɵNAMESPACE_URIS as NAMESPACE_URIS, ɵSharedStyl const EMPTY_ARRAY: any[] = []; +const DEFAULT_SCHEMA = new DomElementSchemaRegistry(); + @Injectable() export class ServerRendererFactory2 implements RendererFactory2 { private rendererByCompId = new Map(); private defaultRenderer: Renderer2; - private schema = new DomElementSchemaRegistry(); + private schema = DEFAULT_SCHEMA; constructor( private eventManager: EventManager, private ngZone: NgZone,