我制作了一个使用REST服务的Angular 5应用程序(Spring Java)。 REST服务和Web应用程序位于不同的服务器上,位于不同的网络中。
我希望为每个Web应用程序添加一个维护模式,不仅可以在我打算在服务器端工作,而且还可以在其他原因需要时使用。 我希望Angular应用程序拦截所有请求并将它们路由到维护页面。
我是以这种方式实现的。我在启动时创建了一个AppConfig,它加载了一个带有应用程序配置的json文件。
@Injectable()
export class AppConfig {
public config: any = null;
constructor(private http: Http) { }
/**
* Use to get the data found in the file (config file)
*/
public getConfig(key: any) {
return this.config[key];
}
public load() {
return new Promise((resolve, reject) => {
this.http.get('assets/config.json').map(res => res.json()).catch((error: any): any => {
console.log('Configuration file could not be read');
resolve(true);
return Observable.throw(error.json().error || 'Server error');
}).subscribe((responseData) => {
this.config = responseData;
resolve(true);
});
});
}
}
在json文件中,我有一个名为" maintenance"我检查了我的Http拦截器并且我路由到一个特定的页面:
@Injectable()
export class CustomHttpInterceptor implements HttpInterceptor {
private jwtHelper = new JwtHelper();
constructor(private injector: Injector, private authenticationService: AuthenticationService) { }
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
let clonedRequest = null;
const appConfig = this.injector.get(AppConfig);
appConfig.load();
if (appConfig.getConfig('maintenance').isactive === true) {
this.authenticationService.maintenance()
}
同样,它有效,但对我的具体用例有很大的不利。在磁盘上更改时,不会重新加载json文件的内容。 因此,如果我启用维护模式,则仅当用户重新加载网站时,重定向到维护页面才有效。 相反,我的目标是在发出http请求后立即重定向用户。
我想在每次在拦截器中发出http请求时重新加载config.json但是我关注性能以及它是否是最佳实践。此外,我还要添加避免浏览器缓存该配置文件。
一些数据:json文件为1kb,每次加载或多或少需要20-49ms。 Angular应用程序非常庞大,它会产生大量的HTTP请求。
有没有办法以一种好的方式处理这个用例,避免影响性能?