Angular 伺服器端渲染應用的開箱即用的快取功能問題

注销發表於2022-05-19

關於透過 Angular Universal 渲染出的頁面原始碼,我們有兩種快取方式:

  1. HTTP cache

使用網路快取時,一切都是為了在伺服器上設定正確的響應標頭。 它們指定快取生存期和快取策略。一個例子如下:

Cache-Control: max-age = 31536000

此選項適用於未經授權的區域和存在長時間不變資料的情況。

  1. In Memory cache

記憶體快取可用於應用程式本身的渲染頁面和 API 請求。 兩種使用場合都透過開發包 @ngx-ssr/cache 提供。

將 NgxSsrCacheModule 模組新增到 AppModule 以快取 API 請求並在瀏覽器中的伺服器上。

maxSize 屬性負責最大快取大小。 值 50 表示快取將包含超過 50 個來自應用程式的最後 GET 請求。

maxAge 屬性負責快取生命週期。 以毫秒為單位指定。

使用程式碼如下:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { NgxSsrCacheModule } from '@ngx-ssr/cache';
import { environment } from '../environments/environment';

@NgModule({
  declarations: [AppComponent],
  imports: [
    BrowserModule,
    NgxSsrCacheModule.configLruCache({ maxAge: 10 * 60_000, maxSize: 50 }),
  ],
  bootstrap: [AppComponent],
})
export class AppModule {}

例如,同一包@ngx-ssr/cache 中的所有內容都有一個子模組@ngx-ssr/cache/express。 它匯入一個 withCache 函式。 該函式是渲染引擎的包裝器。使用方法如下:

import { ngExpressEngine } from '@nguniversal/express-engine';
import { LRUCache } from '@ngx-ssr/cache';
import { withCache } from '@ngx-ssr/cache/express';

server.engine(
  'html',
  withCache(
    new LRUCache({ maxAge: 10 * 60_000, maxSize: 100 }),
    ngExpressEngine({
      bootstrap: AppServerModule,
    })
  )
);

雖然可以從伺服器渲染靜態網站,但這種方法有很多限制,包括程式碼重複和缺乏靈活性——尤其是在從資料庫讀取資料時。 幸運的是,Express.js 提供了一種透過模板引擎從伺服器端應用程式建立動態 HTML 頁面的方法。

模板引擎以一種相當簡單的方式工作:建立一個模板,並使用適當的語法將變數傳遞給它。 然後,在渲染模板的適當路徑上,將值分配給模板檔案中宣告的變數。 這些是在模板渲染時實時編譯的。

模板引擎的一個基本特徵是它們允許我們建立稱為部分的可重用元件,這些元件可以在其他檔案中重用。 這有助於防止程式碼重複並使更改更易於實施。

有各種各樣的模板引擎可以與 Express 一起使用。 Express 中的預設模板引擎是 Jade,現在稱為 Pug。 但是,Express 中預設安裝的 Jade 仍然使用舊版本。

相關文章