Skip to content

Commit 5a4f8b9

Browse files
committed
feat(module-loader): preload modules based on priority
1 parent f43444b commit 5a4f8b9

File tree

3 files changed

+31
-13
lines changed

3 files changed

+31
-13
lines changed

src/components/nav/test/basic/app/app.module.ts

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,16 @@ import { MyCmpTest2 } from '../pages/first-page/my-component-two';
2020
IonicModule.forRoot(E2EApp, { swipeBackEnabled: true, preloadModules: true }, {
2121
links: [
2222
{ name: 'first-page', component: FirstPage },
23-
{ name: 'another-page', loadChildren: '../pages/another-page/another-page.module#AnotherPageModule' },
24-
{ name: 'full-page', loadChildren: '../pages/full-page/full-page.module#FullPageModule', defaultHistory: ['first-page', 'another-page'] },
25-
{ name: 'primary-header-page', loadChildren: '../pages/primary-header-page/primary-header-page.module#PrimaryHeaderPageModule' },
26-
{ name: 'redirect-page', loadChildren: '../pages/redirect-page/redirect-page.module#RedirectPageModule' },
27-
{ name: 'tab-item-page', loadChildren: '../pages/tab-item-page/tab-item-page.module#TabItemPageModule' },
28-
{ name: 'tabs', loadChildren: '../pages/tabs/tabs.module#TabsPageModule' },
29-
{ name: 'tab-one', loadChildren: '../pages/tab-one/tab-one.module#Tab1Module' },
30-
{ name: 'tab-two', loadChildren: '../pages/tab-two/tab-two.module#Tab2Module' },
31-
{ name: 'tab-three', loadChildren: '../pages/tab-three/tab-three.module#Tab3Module' },
23+
{ name: 'another-page', priority: 'low', loadChildren: '../pages/another-page/another-page.module#AnotherPageModule' },
24+
{ name: 'full-page', priority: 'low', loadChildren: '../pages/full-page/full-page.module#FullPageModule', defaultHistory: ['first-page', 'another-page'] },
25+
{ name: 'primary-header-page', priority: 'high', loadChildren: '../pages/primary-header-page/primary-header-page.module#PrimaryHeaderPageModule' },
26+
{ name: 'redirect-page', priority: 'low', loadChildren: '../pages/redirect-page/redirect-page.module#RedirectPageModule' },
27+
{ name: 'tab-item-page', priority: 'high', loadChildren: '../pages/tab-item-page/tab-item-page.module#TabItemPageModule' },
28+
{ name: 'another-one', priority: 'off', loadChildren: '../pages/tab-item-page/tab-item-page.module#TabItemPageModule' },
29+
{ name: 'tabs', priority: 'high', loadChildren: '../pages/tabs/tabs.module#TabsPageModule' },
30+
{ name: 'tab-one', priority: 'off', loadChildren: '../pages/tab-one/tab-one.module#Tab1Module' },
31+
{ name: 'tab-two', priority: 'low', loadChildren: '../pages/tab-two/tab-two.module#Tab2Module' },
32+
{ name: 'tab-three', priority: 'low', loadChildren: '../pages/tab-three/tab-three.module#Tab3Module' },
3233
]
3334
})
3435
],

src/navigation/nav-util.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ export class DeepLinkMetadata implements DeepLinkMetadataType {
125125
name?: string;
126126
segment?: string;
127127
defaultHistory?: string[];
128+
priority?: string;
128129
}
129130

130131
export interface DeepLinkDecorator extends TypeDecorator {}

src/util/module-loader.ts

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,26 @@ export interface LoadedModule {
7979
export function setupPreloading(config: Config, deepLinkConfig: DeepLinkConfig, moduleLoader: ModuleLoader) {
8080
return function() {
8181
if (config.getBoolean('preloadModules')) {
82-
const linksToLoad = deepLinkConfig.links.filter(link => !!link.loadChildren);
83-
for (const link of linksToLoad) {
84-
moduleLoader.load(link.loadChildren);
85-
}
82+
const linksToLoad = deepLinkConfig.links.filter(link => !!link.loadChildren && link.priority !== 'off');
83+
84+
// Load the high priority modules first
85+
const highPriorityPromises = linksToLoad.map(link => {
86+
if (link.priority === 'high') {
87+
return moduleLoader.load(link.loadChildren);
88+
}
89+
});
90+
91+
Promise.all(highPriorityPromises).then(() => {
92+
// Load the low priority modules after the high priority are done
93+
const lowPriorityPromises = linksToLoad.map(link => {
94+
if (link.priority === 'low') {
95+
return moduleLoader.load(link.loadChildren);
96+
}
97+
});
98+
return Promise.all(lowPriorityPromises);
99+
}).catch(err => {
100+
console.error(err.message);
101+
});
86102
}
87103
};
88104
}

0 commit comments

Comments
 (0)