From c4e6d0a1c12f3a7e02019e228eb45e0dff14bc86 Mon Sep 17 00:00:00 2001 From: Jan Vennemann Date: Tue, 4 Dec 2018 13:07:01 +0100 Subject: [PATCH 1/4] perf: improve ssr performance and resolve memory leak --- .../lib/app/root-mixins/updateLoadingState.js | 12 ++++++++++-- packages/@vuepress/theme-default/util/index.js | 16 ++++++++-------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/packages/@vuepress/core/lib/app/root-mixins/updateLoadingState.js b/packages/@vuepress/core/lib/app/root-mixins/updateLoadingState.js index 946f377064..0a6ae7ff76 100644 --- a/packages/@vuepress/core/lib/app/root-mixins/updateLoadingState.js +++ b/packages/@vuepress/core/lib/app/root-mixins/updateLoadingState.js @@ -2,6 +2,10 @@ import SmoothScroll from 'smooth-scroll/dist/smooth-scroll.js' export default { created () { + if (this.$ssrContext) { + return; + } + this.$vuepress.$on('AsyncMarkdownContentMounted', () => { this.$vuepress.$set('contentMounted', true) @@ -33,11 +37,15 @@ export default { watch: { '$route.path' () { this.$vuepress.$set('contentMounted', false) - this.$smoothScroll.destroy() + if (!this.$ssrContext) { + this.$smoothScroll.destroy() + } } }, beforeDestroy () { - this.$smoothScroll.destroy() + if (!this.$ssrContext) { + this.$smoothScroll.destroy() + } } } diff --git a/packages/@vuepress/theme-default/util/index.js b/packages/@vuepress/theme-default/util/index.js index 01937e9888..7cf67a5cad 100644 --- a/packages/@vuepress/theme-default/util/index.js +++ b/packages/@vuepress/theme-default/util/index.js @@ -58,13 +58,11 @@ export function resolvePage (pages, rawPath, base) { rawPath = resolvePath(rawPath, base) } const path = normalize(rawPath) - for (let i = 0; i < pages.length; i++) { - if (normalize(pages[i].regularPath) === path) { - return Object.assign({}, pages[i], { - type: 'page', - path: ensureExt(pages[i].path) - }) - } + if (path in pages) { + return Object.assign({}, pages[path], { + type: 'page', + path: ensureExt(pages[path].path) + }) } console.error(`[vuepress] No matching page found for sidebar item "${rawPath}"`) return {} @@ -128,12 +126,14 @@ export function resolveSidebarItems (page, regularPath, site, localePath) { } const sidebarConfig = localeConfig.sidebar || themeConfig.sidebar + let normalizedPagesMap = {} + pages.forEach(page => normalizedPagesMap[normalize(page.regularPath)] = page); if (!sidebarConfig) { return [] } else { const { base, config } = resolveMatchingConfig(regularPath, sidebarConfig) return config - ? config.map(item => resolveItem(item, pages, base)) + ? config.map(item => resolveItem(item, normalizedPagesMap, base)) : [] } } From 5d606fdadbed14225542c257f7576abe53aa8398 Mon Sep 17 00:00:00 2001 From: Jan Vennemann Date: Thu, 13 Dec 2018 14:54:58 +0100 Subject: [PATCH 2/4] reduce to normalized pages map --- packages/@vuepress/theme-default/util/index.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/@vuepress/theme-default/util/index.js b/packages/@vuepress/theme-default/util/index.js index 7cf67a5cad..94f748a24e 100644 --- a/packages/@vuepress/theme-default/util/index.js +++ b/packages/@vuepress/theme-default/util/index.js @@ -126,8 +126,7 @@ export function resolveSidebarItems (page, regularPath, site, localePath) { } const sidebarConfig = localeConfig.sidebar || themeConfig.sidebar - let normalizedPagesMap = {} - pages.forEach(page => normalizedPagesMap[normalize(page.regularPath)] = page); + const normalizedPagesMap = pages.reduce((map, page) => { map[normalize(page.regularPath)] = page }, {}) if (!sidebarConfig) { return [] } else { From 37b7d55ce0a00aec58b595f321872ac971acd2bb Mon Sep 17 00:00:00 2001 From: Jan Vennemann Date: Fri, 14 Dec 2018 00:07:15 +0100 Subject: [PATCH 3/4] assign and return map in reducer function --- packages/@vuepress/theme-default/util/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@vuepress/theme-default/util/index.js b/packages/@vuepress/theme-default/util/index.js index 94f748a24e..75627ccc3b 100644 --- a/packages/@vuepress/theme-default/util/index.js +++ b/packages/@vuepress/theme-default/util/index.js @@ -126,7 +126,7 @@ export function resolveSidebarItems (page, regularPath, site, localePath) { } const sidebarConfig = localeConfig.sidebar || themeConfig.sidebar - const normalizedPagesMap = pages.reduce((map, page) => { map[normalize(page.regularPath)] = page }, {}) + const normalizedPagesMap = pages.reduce((map, page) => (map[normalize(page.regularPath)] = page), {}) if (!sidebarConfig) { return [] } else { From f9f08b33d337ec093fa556adcf51e2908fce239b Mon Sep 17 00:00:00 2001 From: Jan Vennemann Date: Fri, 14 Dec 2018 11:23:50 +0100 Subject: [PATCH 4/4] return complete map from reduder function --- packages/@vuepress/theme-default/util/index.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/@vuepress/theme-default/util/index.js b/packages/@vuepress/theme-default/util/index.js index 75627ccc3b..192a9a4bcf 100644 --- a/packages/@vuepress/theme-default/util/index.js +++ b/packages/@vuepress/theme-default/util/index.js @@ -126,7 +126,10 @@ export function resolveSidebarItems (page, regularPath, site, localePath) { } const sidebarConfig = localeConfig.sidebar || themeConfig.sidebar - const normalizedPagesMap = pages.reduce((map, page) => (map[normalize(page.regularPath)] = page), {}) + const normalizedPagesMap = pages.reduce((map, page) => { + map[normalize(page.regularPath)] = page + return map + }, {}) if (!sidebarConfig) { return [] } else {