单页应用其一个问题是首屏屏渲染速度较慢。这是因为页面首次加载时服务器将向客户端发送大量JavaScript在屏幕上显示任何内容之前必须下载并解析。可以想象,随着应用程序规模的扩大,这个问题对用户体验的影响也会越来越突出。
现在幸运的是,当使用Vue CLI构建Vue应用程序时(使用webpack),可以采取一些措施来抵消这种情况。在本文中,我将演示如何在应用程序的初始渲染之后使用<代码>异步组件> 代码和webpack的代码分割功能加载到页面的某些部分。这将使初始加载时间降至最低,并为您的应用程序提供更好的用户体验。
在我们开始创建异步组件之前,让我们看一下我们通常如何加载组件。为此,我们将使用一个非常简单的消息组件作为例子:
& lt; !——消息。vue——比; & lt; template> & lt; h2>新消息! & lt;/h2> & lt;/template>
现在我们已经创建了我们的<代码>消息> 代码组件,让我们将它加载到我们的文件中并显示它。我们可以导入组件并将其添加到组件选项中,以便我们可以在模板中使用它:
& lt; !——App.vue祝辞 & lt; template> & lt; div> & lt; message> & lt;/message> & lt;/div> & lt;/template> & lt; script> 从“进口信息。/信息”; 出口默认{ 组件:{ 消息 } }; & lt;/script>
但现在发生了什么?只要应用程序加载,就会加载<代码> 代码>消息组件,因此它包含在初始加载过程中。
对于一个简单的应用程序来说,这看起来可能不是一个大问题,但可以考虑像电商网站这样复杂的场景。想象一下,用户将项目添加到购物车,然后想要结的帐,因此单击结帐按钮会生成一个包含所选商品的所有详细信息的框。使用上述方法,此结帐框将包含在初始包中,但我们只需在用户单击结帐按钮时使用该组件。用户甚至可以在不点击结账按钮的情况下浏览网站,这意味着在加载这个可能不会使用的组件时浪费资源是没有意义的。
为了提高应用程序的效率,我们可以结合延迟加载和代码分割技术。
Webpack提供的代码拆分功能允许您将代码拆分为各种捆绑包,然后可以按需加载或稍后并行加载。它只能在需要或使用时加载特定的代码片段。
Vue使用进口动态解决这种情况。此功能引入了一种新的类似函数的导入形式,它将返回包含(Vue)组件的承诺。由于进口是一个接收字符串的函数,我们可以做一些强大的事情,比如使用表达式加载模块。自版61本以来,Chrome中已提供动态导入。有关这些内容的详细信息,请访问谷歌开发者网站。
代码拆分由webpack,汇总或包裹等捆绑器处理,它们解析动态导入语法并为每个动态导入的模块创建单独的文件。稍后我们将在控制台的网络选项卡中看到这一点。但首先,我们来看看静态和动态导入之间的区别:
//静态导入 从“进口信息。/信息”;//动态导入 进口(“。/消息”)。然后(消息=比;{//消息模块可以在这里… }); >之前现在,让我们将这些知识应用到我们的<代码>消息> 代码组件中,我们将得到一个如下所示的组件:<代码> App.vue 代码>
& lt; !——App.vue祝辞 & lt; template> & lt; div> & lt; message> & lt;/message> & lt;/div> & lt;/template> & lt; script> 从“进口信息。/信息”; 出口默认{ 组件:{ 信息:()=比;进口(“。/消息”) } }; & lt;/script>如你所见,函数导入()将解析返回组件的承诺,这意味着我们已成功异步加载组件。如果您查看<代码> devtools 代码>的<代码>网络> 代码选项卡,您会注意到一个名为<代码> 0。js> 代码包含异步组件的文件。