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
This commit is contained in:
Benedikt Meurer 2019-01-15 14:55:39 +01:00 committed by Andrew Kushnir
parent bc02e31185
commit ce3a746644
1 changed files with 3 additions and 1 deletions

View File

@ -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<string, Renderer2>();
private defaultRenderer: Renderer2;
private schema = new DomElementSchemaRegistry();
private schema = DEFAULT_SCHEMA;
constructor(
private eventManager: EventManager, private ngZone: NgZone,