我不确定动态组件 https://v2.vuejs.org/v2/guide/components-dynamic-async.html可以帮助你的情况,但我想你的公司网站 https://www.credy.es/不会真正从中受益。事实上,在我看来,内容跳跃的问题仍然存在。
<component :is="currentTabComponent"></component>
我仍然认为您的内容在我看来是高度静态的,您甚至可以切换到全静态 https://nuxtjs.org/blog/going-full-static/获得最佳性能优势,而不必在 SPA 加载所有内容时等待很长时间 (TTFB)。当然,让一切看起来都很好(补水之前/之后)可能更具挑战性。
另外,您应该了解容器的大致尺寸。在这种情况下,你可以使用一些骷髅 https://buefy.org/documentation/skeleton/甚至可能是原型字体 http://danross.co/flow以视觉方式填充块。
如果您不同意或认为这不可行,您仍然可以这个解决方案 https://stackoverflow.com/a/55080141/8816585任你处置
<child-component @hook:mounted="makeSomeStuff"></child-component>
这样您就可以显示全尺寸的加载程序,直到您的内容加载完毕。你可以添加a mixin https://v2.vuejs.org/v2/guide/mixins.html与较长的mounted
每个组件中的语法以避免过多的样板代码,但这一个已被弃用并且确实有各种问题 https://css-tricks.com/how-the-vue-composition-api-replaces-vue-mixins/.
但在我看来,问题更多在于你获取数据的方式(asyncData
and fetch
钩子很好)以及当没有特定需要时一切都是动态的。如果保留动态部分更重要,我想您可以认真进行代码审查或插入一些 git hook 或类似的内容来扫描代码并查看是否需要mounted
发射到位。
对于您的情况,没有理想的解决方案,但请记住,Lighthouse 总是更喜欢一些 JS 量较少的 SSR 内容。这是我的个人圣经 https://www.smashingmagazine.com/2021/01/front-end-performance-2021-free-pdf-checklist/对于任何与性能相关的事情,您可能可以在这篇非常深入的文章中掌握一些不错的技巧。
Vue3 更新
Vue3 的语法已更改:https://v3-migration.vuejs.org/writing-changes/vnode-lifecycle-events.html#_2-x-syntax https://v3-migration.vuejs.org/breaking-changes/vnode-lifecycle-events.html#_2-x-syntax