Vue(6),实践出真知

本文探讨了Vue.js性能下降的主要原因,包括服务器-side渲染、捆绑大小过大,以及如何通过懒加载、动态导入、代码分割和优化第三方库来提升性能。作者还提供了检查Vue应用大小的方法和实用的优化技巧,如预加载组件和模块化编程最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Vue 性能不佳背后的主要原因


让我们看看 Vue js 是如何工作的, 以及 Vue js 性能不佳背后的重要原因。

降低 Vue 性能的原因取决于您的 Vue js 应用结构。例如,Vue jS 单页应用程序 (SAS) 中性能不佳的重要原因之一可能与处理服务器侧渲染(SSR) 的 VueJS 项目不同。

任何开发人员都能考虑应用程序是 SPA 还是具有 SSR 的主要原因是捆绑大小。捆绑尺寸越大,Vue js 性能越慢。因此,我们可以得出结论,捆绑大小与应用程序性能成反比。

Vue js 大应用程序背后的一些常见原因 -

  • 不明智地使用第三方库

  • 忽略代码分割和惰性加载

  • 对 API 请求的不必要的点击

  • 未正确构建 JS 和 CSS 文件

在讨论如何减少捆绑大小之前,让我们看看如何检查 Vue js 和 Vue js 企业应用程序的捆绑大小的大小。

如何检查您的 VueJS 应用的大小?


我将向您展示两种方法来检查 Vue js 应用程序的大小。

1. 生成报告

生成报告可直观地描述所使用的各种包的大小。此外,您可以找出如何替换任何比预期空间更大的包。您可以使用命令生成报告生成应用程序报告。请记住,此命令将构建一个应用程序的报告,其中安装了webpack-bundle-analyzer

运行上述命令后,打开包.json 文件并添加此内容

“build-report”: “vue-cli-service build --report”

然后执行此 。

npm run build-report

执行所有这些之后,将在_dist_文件夹中创建一个名为 "_报告.html_的文件。

打开该文件时,您将观察此

2. 运行命令和_npm 运行生成_

你会看到类似这样的图像。

现在,在找到捆绑包大小后,斗争是减少它。无需进一步讨论,让我们继续探索 Vue .js应用性能优化的方法。

如何优化 Vue js 应用程序的性能?


下面是一些 VueJS 性能提示,您可以实现以优化 Vue .js应用程序的性能。

1. 在 Vue js 中懒加载

根据名称,Vue js 中的懒加载是懒加载应用程序中的模块的方法,即当用户实际需要该模块时。大多数时候,每当用户访问网站时,无需加载 JavaScript 捆绑包中的所有模块。

有一些组件具有模式和工具尖,可在需要时加载。如果您正在处理两个或三个模态或工具尖,则看不到结果,但是,假设您有一个具有这么多模式和工具尖的广泛 Vue 应用程序;一次加载它们会降低您的性能。

它根本不值得每次页面加载时加载整个捆绑包。因此,它加载有助于您划分捆绑包并在使用时加载它们。这样,它通过不下载和解析不必要的代码来节省时间。

要检查网站中使用的实际 JavaScript 代码

  1. Click devtools

  2. cmd + shift + p

  3. Type coverage

  4. Click record

带有红色高光的网格不使用,可以懒加载。通过利用懒加载,您可以将捆绑大小减少 60%。

这是关于什么和为什么我们应该装组件和模块懒加载地大规模应用:让我们来探讨如何执行它。

我们可以使用 Webpack 动态导入而不是常规导入来分离必须懒加载的模块。

这就是您导入 JavaScript 文件时的输入方式,对吗?

// demo.js

const Demo = {

testDemo: function () {

console.log(“This is just a demo!”)

}

}

export default Demo

// app.js

import Demo from ‘./demo.js’

Demo.testDemo()

它将添加文件_演示.js_作为_应用程序的_节点.js在其依赖图中,并通过以这种方式导入它将其捆绑在一起。因此,每当捆绑包被加载_时,演示.js_将加载,无论其需要如何。

但是,如果我们要加载_演示.js_仅作为某些用户操作响应。在这种情况下,我们将实施动态导入,告诉应用程序下载此模块仅在需要时。

以下是对上述代码的修改,用于执行用于测试 Vue .js 应用程序的动态导入

// app.js

const getDemo = () => import(‘./demo.js’)

// later when some user action tasks place as hitting the route

getDemo()

.then({ testDemo } => testDemo())

因此,您可以注意到,我已宣布一个功能,该功能确实返回_了导入功能,_ 而不是直接导入_演示_模块。这就是我们所说的动态导入,因此 Webpack 会知道它必须将此模块保留在单独的文件中。功能_得到Demo(),_ 其中包含动态导入,返回承诺。我们基本上切断节点(这里_演示_)从依赖图,然后下载它,当需要时(如路线更改或点击)。请记住,演示中导入的模块 _.js_也将从捆绑包中分离出来。

Vue js 中的懒加载是减少捆绑尺寸和优化性能的最佳做法之一。养成一种习惯,即知道您不需要哪些模块,除非有明确的用户操作,并懒洋洋地下载它们以获得更好的性能。

2. 基于路线的代码拆分

假设您必须开发一个带有两个网页的小型 VueJS 网站 - 仪表板和联系人。即使对于这两页,您也需要在项目中实现 vue 路由器。

您的路由文件可能看起来像这样 -

// routing.js

import Dashboard from ‘./Dashboard.vue’

import Contact from ‘./Contact.vue’

const routes = [

{ path: ‘/’, component: Dashboard }

{ path: '/contact, component: Contact }

]

由于采用了这种标准的编码方法,即使用户访问另一个页面(我们既不想下载Dashboard也不想下载Contact),也会下载组件——Dashboard和Contact(使用lodash)。 这是因为我们在同一个bundle中有两个路由。 你可能会想,多下载两个页面有什么大不了的。 但是,当您在处理具有大量包的大型应用程序时,这一点很重要。

为了避免不必要的组件下载,我们将使用分割代码。

为此,我们将为不同的路径使用不同的包,我们遵循动态导入的技术。

您现在将通过动态路由,而不是直接导入组件。让我们看看如何实现这一点。

// routing.js

const routes = [

{ path: ‘/’, component: () => import(‘./Dashboard.vue’) }

{ path: ‘/contact, component: () => import(’./Contact.vue’) }

]

通过遵循此实践,您可以将捆绑包大小缩小到其一半!但为此,您需要确定哪些组件可用于动态导入。相信我, 这样的vue js 练习将有助于你的应用程序更具执行力。

3.Vue js预加载组件

让我们继续深入研究Vue js预加载组件是一种在用户请求页面之前下载资源的技术。 例如,如果您确定大多数用户将从类别页面访问产品页面,则可以考虑预取产品页面。 您需要记住,只有在初始呈现之后才能进行预抓取。 预取的另一个好处是,它可以在不影响性能的情况下消除由于延迟加载而导致的不希望看到的结果。

对于它的实现,你只需要添加 <链接rel="预插"href=“url”/>标签。很简单,对吧?但是,在处理 Webpack 时,情况就不同了,Webpack 会根据模块的顺序生成捆绑名称。幸运的是,webpack包有magic comments,很容易预加载。magic comments是影响构建过程的注释。 我们需要使用- /* webpackPrefetch: true */来预取模块。 只是保持它在你的动态导入如下所示

components: {

ModalView: () => import(/* webpackPrefetch: true */ ‘./ModalView.vue’)

}

在执行代码时,Webpack 将搜索神奇的评论,并在头部分添加 <链接 rel="预插"url=“资源-url”/>。

< link rel=“prefetch” href=“path-to-chunk-with-modal-view” />

每当用户请求 ModalView 模块时,它就会被预先控制并立即访问。

4. 优化第三方库

当您检查捆绑包大小是多少,并惊讶于如果它越过理想数字时,它并不总是因为您的代码:很多时候,原因是加载的第三方库的使用。是的,我们都使用第三方库,而不知道它们对应用程序性能的影响。我们的代码可能是捆绑大小的一小部分。

您可以使用bundlephobia来了解不同的库如何影响性能。您只需要将Vuejs库名称添加到这个奇妙的网站,您就会获得许多与网站数据相关的知识。 例如,我已经使用了lodash库,这里是信息。

了解更多关于库及其对性能的影响不是很棒吗?

如果您想知道哪些Vue js 库对您的 VueJS 应用程序有更大的影响,那么您可以单击此处扫描您的软件包。除此之外,我已经明确了分析捆绑大小的各种方法。

在选择任何库之前,请向自己提出这些问题:

  • 我为什么要使用库?

  • 我需要整个库来达到我的目的吗?

  • 我选择的库有什么影响?

  • 我有一种性能友好的使用库的方法吗?

让我们来看看我选择 Vue 库时如何处理。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

对象篇

模块化编程-自研模块加载器

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

/imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy82MTY4MzU2LWU5ZGY5NGRhODZhZGZjNjY?x-oss-process=image/format,png)

模块化编程-自研模块加载器

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值