TransferState
— это ключевой механизм в Angular для оптимизации работы приложений с Server-Side Rendering (SSR). Он решает проблему двойной загрузки данных при переходе с серверного рендеринга на клиентский.
На сервере:
На клиенте:
Механизм состоит из трех этапов:
Данные сохраняются в специальный "ключ" при рендеринге на сервере:
import { TransferState, makeStateKey } from '@angular/platform-browser';
const DATA_KEY = makeStateKey('user-data');
// В серверном коде
this.http.get('/api/user').subscribe(data => {
this.transferState.set(DATA_KEY, data); // Сохраняем данные
res.render(indexHtml, { /* ... */ });
});
Данные автоматически встраиваются в HTML в теге <script>
:
<script id="transfer-state" type="application/json">
{"user-data":{"id":1,"name":"John"}}
</script>
На клиенте данные извлекаются вместо повторного запроса:
ngOnInit() {
const cachedData = this.transferState.get(DATA_KEY, null);
if (cachedData) {
this.data = cachedData;
this.transferState.remove(DATA_KEY); // Очищаем после использования
} else {
// Делаем запрос только если данных нет
this.http.get('/api/user').subscribe(/* ... */);
}
}
Эффективность:
Безопасность:
Гибкость:
Сценарий: Загрузка списка статей для блога.
Без TransferState:
С TransferState:
Размер данных:
Асинхронные операции:
resolve
в роутинге.TransferState
— это:
Используйте его для:
Без TransferState ваше SSR-приложение будет работать, но менее эффективно!