From 38a058d7af6e43eb27bb3b8ce34472a0235085fd Mon Sep 17 00:00:00 2001
From: Yury Bondarenko <ybnd@tuta.io>
Date: Wed, 1 Feb 2023 13:10:37 +0100
Subject: [PATCH 1/2] Add configuration option to disable inlined CSS in SSR
 HTML

When inlining CSS, Angular Universal needs to extract critical styles.
This seems to take up a significant chunk of processing time.

However, loading may appear less smooth when this feature is disabled.

Added to the configuration to make it easier to A/B test this without a full re-build.
---
 server.ts                                  | 1 +
 src/config/universal-config.interface.ts   | 9 +++++++++
 src/environments/environment.production.ts | 3 ++-
 src/environments/environment.ts            | 3 ++-
 4 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/server.ts b/server.ts
index 81137ad56a8..b65fb177b7e 100644
--- a/server.ts
+++ b/server.ts
@@ -116,6 +116,7 @@ export function app() {
   server.engine('html', (_, options, callback) =>
     ngExpressEngine({
       bootstrap: ServerAppModule,
+      inlineCriticalCss: environment.universal.inlineCriticalCss,
       providers: [
         {
           provide: REQUEST,
diff --git a/src/config/universal-config.interface.ts b/src/config/universal-config.interface.ts
index c088dcd6579..3ff68fea664 100644
--- a/src/config/universal-config.interface.ts
+++ b/src/config/universal-config.interface.ts
@@ -4,4 +4,13 @@ export interface UniversalConfig extends Config {
   preboot: boolean;
   async: boolean;
   time: boolean;
+
+  /**
+   * Whether to inline "critical" styles into the server-side rendered HTML.
+   *
+   * Determining which styles are critical is a relatively expensive operation;
+   * this option can be disabled to boost server performance at the expense of
+   * loading smoothness.
+   */
+  inlineCriticalCss?;
 }
diff --git a/src/environments/environment.production.ts b/src/environments/environment.production.ts
index 09b5f19ade6..7dd9bd2aa3b 100644
--- a/src/environments/environment.production.ts
+++ b/src/environments/environment.production.ts
@@ -7,6 +7,7 @@ export const environment: Partial<BuildConfig> = {
   universal: {
     preboot: true,
     async: true,
-    time: false
+    time: false,
+    inlineCriticalCss: true,
   }
 };
diff --git a/src/environments/environment.ts b/src/environments/environment.ts
index dc0e808be0d..10f71618e1b 100644
--- a/src/environments/environment.ts
+++ b/src/environments/environment.ts
@@ -12,7 +12,8 @@ export const environment: Partial<BuildConfig> = {
   universal: {
     preboot: false,
     async: true,
-    time: false
+    time: false,
+    inlineCriticalCss: true,
   }
 };
 

From 4a39f33006e07da2286551010839ba32d5175a41 Mon Sep 17 00:00:00 2001
From: Yury Bondarenko <ybnd@tuta.io>
Date: Fri, 22 Mar 2024 16:23:09 +0100
Subject: [PATCH 2/2] Add to config.example.yml

---
 config/config.example.yml                | 7 +++++++
 src/config/universal-config.interface.ts | 2 +-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/config/config.example.yml b/config/config.example.yml
index 36d6a009d35..407b5b958ed 100644
--- a/config/config.example.yml
+++ b/config/config.example.yml
@@ -17,6 +17,13 @@ ui:
   # Trust X-FORWARDED-* headers from proxies (default = true)
   useProxies: true
 
+universal:
+  # Whether to inline "critical" styles into the server-side rendered HTML.
+  # Determining which styles are critical is a relatively expensive operation;
+  # this option can be disabled to boost server performance at the expense of
+  # loading smoothness.
+  inlineCriticalCss: true
+
 # The REST API server settings
 # NOTE: these settings define which (publicly available) REST API to use. They are usually
 # 'synced' with the 'dspace.server.url' setting in your backend's local.cfg.
diff --git a/src/config/universal-config.interface.ts b/src/config/universal-config.interface.ts
index 3ff68fea664..eb89264e37f 100644
--- a/src/config/universal-config.interface.ts
+++ b/src/config/universal-config.interface.ts
@@ -12,5 +12,5 @@ export interface UniversalConfig extends Config {
    * this option can be disabled to boost server performance at the expense of
    * loading smoothness.
    */
-  inlineCriticalCss?;
+  inlineCriticalCss?: boolean;
 }