首页 > web前端 > js教程 > 优化使用异步组件的VUE应用程序的性能

优化使用异步组件的VUE应用程序的性能

Lisa Kudrow
发布: 2025-02-14 10:00:13
原创
663 人浏览过

优化使用异步组件的VUE应用程序的性能

钥匙要点

  • >异步组件和WebPack的代码拆分功能可以在VUE应用程序中使用,以在应用程序初始渲染后加载页面的一部分,减少初始加载时间并改善应用程序性能。
  • >
  • vue conters for动态导入,一种类似功能的导入形式,它返回包含所请求的(vue)组件的承诺,使模块可以使用表达式加载。
  • >
  • >异步组件可以有条件加载,只有在真正需要的时候加载它们,这可以通过设置参数来实现,以在用户执行特定操作时为真。
  • >可以定义加载和/或错误组件,以便何时async组件花费一些时间来加载或未加载,这对于显示加载动画或错误消息可能很有用。
  • >

想从头开始学习vue.js吗?通过SitePoint Premium获取全部涵盖基本面,项目,技巧和工具等的VUE书籍的集合。立即以每月的价格为$ 14.99。 >单页应用程序有时会使他们的初始负载缓慢一点。这是因为传统上,服务器将向客户端发送一大堆JavaScript,必须在屏幕上显示任何内容之前下载和解析。您可以想象,随着您的应用程序的尺寸,这可能会变得越来越有问题。> 幸运的是,当使用VUE CLI(使用引擎盖下的Webpack)构建VUE应用程序时,可以采取许多措施来抵消此问题。在本文中,我将演示如何利用异步组件和WebPack的代码拆分功能,以在应用程序初始渲染后加载页面的某些部分。这将使最初的负载时间降至最低,并给您的应用带来更刺耳的感觉。

要遵循本教程,您需要对vue.js和node.js.

的基本了解

异步组件

>我们潜入创建异步组件之前,让我们看一下通常如何加载组件。为此,我们将使用一个非常简单的消息组件:

>

>现在我们已经创建了组件,让我们将其加载到app.vue文件中并显示。我们只能导入组件并将其添加到组件选项中,以便我们可以在模板中使用它:

但是现在会发生什么呢?每当应用程序加载时,将加载消息组件,因此将其包含在初始加载中。对于简单的应用程序来说,这听起来可能不是一个巨大的问题,而是考虑更复杂的网络商店。想象一下,用户将项目添加到篮子中,然后想退房,因此单击“结帐”按钮,该按钮呈现一个包装盒,其中包含所选项目的所有详细信息。使用上述方法,此结帐框将包含在初始捆绑包中,尽管我们只需要在用户单击“结帐”按钮时需要组件。用户甚至有可能无需单击“结帐”按钮在网站上导航,这意味着在加载此潜在未使用的组件时浪费资源是没有意义的。

为提高应用程序的效率,我们可以将懒惰加载和代码分裂技术结合起来。

>懒惰的加载都是关于延迟组件的初始负载。您可以看到在Medium.com之类的站点上的懒惰加载,在此图像之前,将图像加载到需要之前。这很有用,因为我们不必浪费资源来提前加载特定帖子的所有图像,因为读者可能会跳过一篇文章。

>代码拆分功能WebPack提供允许您将代码拆分为各种捆绑包,然后可以按需加载或在以后的时间点上并行加载。它只能在需要或使用时才用于加载特定的代码。

>

动态导入

幸运的是,使用一种称为动态导入的东西来迎合这种情况。此功能引入了一种新的功能状导入形式,该形式将返回包含所请求(VUE)组件的承诺。由于导入是接收字符串的函数,因此我们可以执行强大的操作,例如使用表达式加载模块。 自61版以来,Chrome已在Chrome中使用动态导入。有关它们的更多信息,请访问Google Developers网站。

>代码拆分是由WebPack,lollup或parcel等捆绑机照顾的,这些捆绑包了解动态导入语法,并为每个动态导入的模块创建一个单独的文件。稍后,我们将在控制台的网络选项卡中看到这一点。但是首先,让我们看一下静态和动态导入之间的区别:>

现在,让我们将此知识应用于我们的消息组件,我们将获得一个app.vue组件,看起来像这样:

如您所见,Emport()函数将解决返回组件的承诺,这意味着我们已经成功地加载了组件。如果您在DevTools的网络选项卡中查看,您会注意到一个名为0.js的文件,其中包含您的异步组件。

<span><!-- Message.vue -->
</span><span><span><span><template</span>></span>
</span>  <span><span><span><h1</span>></span>New message!<span><span></h1</span>></span>
</span><span><span><span></template</span>></span>
</span>
登录后复制
登录后复制
登录后复制

有条件地加载异步组件

>现在,我们已经可以处理异步组件,让我们真正需要在真正需要时加载它们来真正收获它们的力量。在本文的上一节中,我解释了仅在用户键入结帐按钮时加载的结帐框的用例。让我们构建它。

>项目设置

如果您没有安装Vue CLI,则应立即抓取:>

<span><!-- Message.vue -->
</span><span><span><span><template</span>></span>
</span>  <span><span><span><h1</span>></span>New message!<span><span></h1</span>></span>
</span><span><span><span></template</span>></span>
</span>
登录后复制
登录后复制
登录后复制
接下来,使用CLI创建一个新项目,在提示时选择默认预设:

<span><!-- App.vue -->
</span><span><span><span><template</span>></span>
</span>  <span><span><span><div</span>></span>
</span>    <span><span><span><message</span>></span><span><span></message</span>></span>
</span>  <span><span><span></div</span>></span>
</span><span><span><span></template</span>></span>
</span>
<span><span><span><script</span>></span><span>
</span></span><span><span><span>import <span>Message</span> from "./Message";
</span></span></span><span><span><span>export default {
</span></span></span><span><span>  <span>components: {
</span></span></span><span><span>    <span>Message
</span></span></span><span><span>  <span>}
</span></span></span><span><span><span>};
</span></span></span><span><span></span><span><span></script</span>></span>
</span>
登录后复制
>更改为项目目录,然后安装蚂蚁 - 设计库库,我们将使用该库来进行样式:>

接下来,在src/main.js中导入蚂蚁设计库:
<span>// static import
</span><span>import <span>Message</span> from "./Message";
</span>
<span>// dynamic import
</span><span>import("./Message").then(<span>Message</span> => {
</span>  <span>// Message module is available here...
</span><span>});
</span>
登录后复制

最后,在src/comonents中创建两个新组件

<span><!-- App.vue -->
</span><span><span><span><template</span>></span>
</span>  <span><span><span><div</span>></span>
</span>    <span><span><span><message</span>></span><span><span></message</span>></span>
</span>  <span><span><span></div</span>></span>
</span><span><span><span></template</span>></span>
</span>
<span><span><span><script</span>></span><span>
</span></span><span><span><span>import <span>Message</span> from "./Message";
</span></span></span><span><span><span>export default {
</span></span></span><span><span>  <span>components: {
</span></span></span><span><span>    <span><span>Message</span>: () => import("./Message")
</span></span></span><span><span>  <span>}
</span></span></span><span><span><span>};
</span></span></span><span><span></span><span><span></script</span>></span>
</span>
登录后复制
使商店视图

>打开src/app.vue并用以下内容替换代码:>
<span>npm i -g @vue/cli
</span>
登录后复制

>这里没有任何幻想。我们要做的就是显示一条消息并渲染组件。

>

接下来,打开src/components/items.vue并添加以下代码:>

vue create my-store
登录后复制
在此文件中,我们显示了一个购物车图标,其中包含当前购买的物品数量。项目本身是从项目数组中提取的,称为数据属性。如果您单击项目的

购买

>按钮,则调用AddItem方法,该方法将将相关项目推向购物清单数组。反过来,这将增加购物车的总数。

>我们还向页面上添加了一个

结帐
<span>cd my-store
</span><span>npm i ant-design-vue
</span>
登录后复制
按钮,这是事物开始变得有趣的地方:

>用户单击此按钮时,我们将参数显示为真。对于有条件加载我们的异步组件的目的,此真实值非常重要。

下面的几行,您可以找到一个V-if语句,该语句仅显示显示为true时
的内容。此
标签包含结帐组件,我们只想在用户点击结帐按钮时加载它。

结帐组件在<script>部分的组件选项中异步加载。这里很酷的事情是,我们甚至可以通过V-Bind语句将参数传递给组件。如您所见,创建有条件的异步组件相对容易:</script>>

<span>import 'ant-design-vue/dist/antd.css'
</span>
登录后复制
>让我们快速添加SRC/COMPONENTS/COBLECT.VUE中的结帐组件的代码

>在这里,我们正在浏览我们作为购物列表的道具并将其输出到屏幕上。

>您可以使用NPM运行服务命令运行该应用程序。然后导航到http:// localhost:8080/。如果所有内容都按计划进行,您应该看到下图中显示的内容。

<span>touch src/components/{Checkout.vue,Items.vue}
</span>
登录后复制

尝试使用网络选项卡打开在商店周围单击,以确保您只有在单击> nceckout 按钮时才加载结帐组件。

>

您还可以在GitHub上找到此演示的代码。

> 带有加载和错误组件的异步

>甚至可以为何时加载或无法加载的时间定义加载和/或错误组件。显示加载动画可能很有用,但请记住,这再次减慢了您的应用程序。异步组件应较小且快速加载。这是一个示例:

结论
<span><!-- Message.vue -->
</span><span><span><span><template</span>></span>
</span>  <span><span><span><h1</span>></span>New message!<span><span></h1</span>></span>
</span><span><span><span></template</span>></span>
</span>
登录后复制
登录后复制
登录后复制

创建和实现异步组件非常容易,应该是标准开发程序的一部分。从UX的角度来看,尽可能减少初始加载时间以保持用户的注意很重要。希望本教程能够帮助您加载自己的组件异步,并将条件应用于延迟(懒负载)组件的负载。

>

vue async组件的常见问题

使用VUE ASYNC组件?

> vue async组件是vue.js中的一个强大功能,该功能使开发人员可以异步加载组件。这意味着仅在需要时加载组件,这可以显着提高应用程序的性能。这对于大型应用程序尤其有益,在大型应用程序中,立即加载所有组件可以减慢应用程序的速度。通过异步加载组件,您可以确保您的应用程序保持快速和响应迅速,提供更好的用户体验。您的应用程序相对简单。您可以使用vue.component方法并在出厂功能中返回承诺。承诺应通过组件定义解决。这是一个基本示例:

vue.component('async-example',function(resolve,refffect'

resolve({{

template:'
i是async!
'

})

},1000)
})延迟1秒后是否会异步加载。

>我可以使用带有Vue路由器的Vue Async组件吗?
是的,您可以将带有VUE路由器的Vue Async组件使用。实际上,Vue路由器对组件分裂和异步加载具有内置支持。在定义路线时,您可以提供一个返回诺言可以解决组件的承诺的函数。这使您只能在需要时加载组件,从而提高应用程序的性能。>

> vue async组件和常规VUE组件之间有什么区别?

> vue async组件与常规Vue组件之间的主要区别在于它们的加载方式。常规VUE组件同步加载,这意味着在应用程序启动时会立即加载它们。另一方面,Vue异步组件异步加载,这意味着仅在需要时加载它们。这可以显着提高您的应用程序的性能,尤其是对于具有许多组件的大型应用程序。

>

>在使用Vue Async组件时如何处理错误?

>在使用VUE ASYNC组件时,您可以处理。通过为vue.component方法提供第二个函数来错误。如果承诺被拒绝,将调用此功能。这是一个示例:


vue.component('async-example',function(resolve,reffacs){settimeout(function(){ //将组件定义传递给RESOVE CALLEVER CALKEND
resolve({{
模板:'

i是async!
'
})
},1000)
},function(quasition){
console。错误(原因)
})
在此示例中,如果拒绝承诺,则该错误将记录到控制台。
>
我可以使用带有vuex的vue async组件? 🎜>是的,您可以使用带VUEX的VUE ASYNC组件。 Vuex是VUE.JS的州管理库,它可以与Vue Async组件合作。您可以像常规组件一样从异步组件进行调查并从异步组件进行突变。
>

>如何测试vue async组件?

>测试vue async组件类似于测试常规VUE组件类似。您可以使用Vue Test Utils和Jest之类的库来为您的组件编写单元测试。但是,由于异步组件是异步加载的,因此您可能需要在测试中使用异步/等待等待等待组件在执行断言之前加载该组件。

>

我可以使用vue async compotents带有vue cli吗? >

是的,您可以使用带VUE CLI的VUE ASYNC组件。 Vue CLI是用于脚手架Vue.js项目的命令行工具,它具有对异步组件的内置支持。您可以使用vue.component方法来定义Vue CLI项目中的异步组件。

>

>我如何优化VUE ASYNC组件的性能?

>

>有几种方法可以优化优化的性能VUE异步组件。一种方法是使用代码拆分,这使您可以将代码拆分为可以按需加载的较小块。另一种方法是使用懒惰加载,该加载允许您仅在需要时加载组件。当浏览器闲置时,您也可以使用预取预约和预加载在后台加载组件。

>我可以将vue async组件与nuxt.js?

>是的,您可以将vue async组件与nuxt.js一起使用。 NUXT.JS是用于构建vue.js应用程序的框架,并且对异步组件具有内置支持。您可以使用vue.component方法来定义nuxt.js项目中的异步组件。

以上是优化使用异步组件的VUE应用程序的性能的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板