是否可以使用 Angular 通用预渲染来防止重新获取?
Is it possible to prevent RE-fetching with Angular Universal Prerendering?
假设我们有这个 Post 组件:
@Component({
template: `
<div
*ngIf="post$ | async as post"
[innerHTML]="post.content">
</div>
`,
})
export class Post implements OnInit {
post$!: Observable<Post>;
constructor(private http: HttpClient, private route: ActivatedRoute) {}
ngOnInit(): void {
this.post$ = this.route.paramMap.pipe(
switchMap((params) => {
const slug = params.get('slug') ;
return this.http.get<Post>(`${env.apiUrl}/posts/${slug}`);
})
);
}
}
当我们预渲染帖子页面时:
ng run myapp:prerender --routes-file routes.txt
他们的数据被获取并且HTML成功生成。但是当我们启动生成的静态内容时,他们仍然重新获取数据。
是否可以阻止重新获取?或者不推荐?
是内置的,使用TransferHttpCacheModule
它允许在生成的 HTML 代码的 script
元素中序列化在服务器端获取的数据。然后在浏览器中,TransferHttpCacheInterceptor
拦截每个 HTTP 请求并检查该数据是否有相应的条目。它使用 <http_verb>.<url>
作为键。
每个缓存条目在使用后立即失效,以便将来使用相同 <http_verb>.<url>
键的请求发送到后端。
假设我们有这个 Post 组件:
@Component({
template: `
<div
*ngIf="post$ | async as post"
[innerHTML]="post.content">
</div>
`,
})
export class Post implements OnInit {
post$!: Observable<Post>;
constructor(private http: HttpClient, private route: ActivatedRoute) {}
ngOnInit(): void {
this.post$ = this.route.paramMap.pipe(
switchMap((params) => {
const slug = params.get('slug') ;
return this.http.get<Post>(`${env.apiUrl}/posts/${slug}`);
})
);
}
}
当我们预渲染帖子页面时:
ng run myapp:prerender --routes-file routes.txt
他们的数据被获取并且HTML成功生成。但是当我们启动生成的静态内容时,他们仍然重新获取数据。
是否可以阻止重新获取?或者不推荐?
是内置的,使用TransferHttpCacheModule
它允许在生成的 HTML 代码的 script
元素中序列化在服务器端获取的数据。然后在浏览器中,TransferHttpCacheInterceptor
拦截每个 HTTP 请求并检查该数据是否有相应的条目。它使用 <http_verb>.<url>
作为键。
每个缓存条目在使用后立即失效,以便将来使用相同 <http_verb>.<url>
键的请求发送到后端。