【发布时间】:2019-03-03 12:51:45
【问题描述】:
我目前正在处理项目是 Angular 6、Ionic 4 混合的遗留代码。所有功能模块都在延迟加载。
问题是导航到另一个页面后,我可以在导航工具的内存选项卡上看到前一页仍然存在,ngOnDestroy 并没有真正被触发。
为了给你更多细节,我的 app-routing-module 是:
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { routes } from './app.routes';
@NgModule({
imports: [RouterModule.forRoot(routes, { enableTracing: false, useHash: false
})],
exports: [RouterModule],
})
export class AppRoutingModule { }
我的路线是:
export const routes: Routes = [
{
path: '', redirectTo: '/home',
pathMatch: 'full'
},
{
path: 'accounts',
loadChildren:
'../pages/accounts/accounts.page.module#AccountsPageModule',
canActivate: [AuthGuardService]
},
{
path: 'administration',
loadChildren:
'../pages/administration/administration.page.module#AdministrationPageModule'
},
{
path: 'bookings',
loadChildren:
'../pages/bookings/bookings.page.module#BookingsPageModule',
canActivate: [AuthGuardService],
},
在 app.component.html 中,加上一个ion-menu 结构的路由器:
<ion-router-outlet id="content" swipeBackEnabled="false"></ion-router-outlet>
最后在每个链接的导航栏组件中,我使用路由器的[routerLink]="['/something']" 指令。
导航工作正常。问题是,一段时间后,网站速度非常慢,因为即使用户被导航到另一个页面并且 Angular 应该已经破坏了之前的页面,它仍然在内存中保留了每个组件、页面和模块。
我正在使用:
- 角度:6.1.7
- 离子:4.1.2
【问题讨论】:
-
嗯不完全是。我尝试使用路由器事件并调用 ngOnDestroy 但页面组件和功能模块仍将在内存中
-
是的,这很有趣。因为我在浏览器上,所以我不需要“清理”或删除加载的模块和组件。您是否对组件和模块都尝试过 OnDestroy?
-
我也在浏览器上。你的意思是你把所有的东西都保存在内存中?这不会导致性能问题吗?我也对模块进行了尝试,但不幸的是那里也没有调用 ngOnDestroy。
-
老实说,我没有内存问题。将 preloadingStrategy 更改为 NoPreloading 后,应用程序的初始加载时间显着减少。我在我的应用程序中使用了很多选项卡,每个选项卡都是一个组件。好吧,如果单击选项卡,我将 *ngIf 添加到组件中,这将是真实的。这将从 DOM 中删除模板,并允许垃圾收集在当前不在视图中的所有其他选项卡上执行其操作。