每日前端夜话第323篇

翻译:疯狂的技术宅

作者:Matthias Sommer

来源:dzone

正文共:1956 字

预计阅读时间:10 分钟

我有一个项目用了 Vue.js 来构建单页应用程序。随着上线日期的临近,性能优化的工作变得越来越重要。在本文中,我收集了有关在加载时间和渲染性能方面提高 Vue.js 应用性能的所有知识。

使用 Vue.js,你可以快速构建单页应用。Webpack 会为你将所有内容捆绑到文件(HTML、JavaScript、CSS)中,最后可以用 nginx 来提供。至少,这是我们的设置。但是 Webpack 会警告你某些资源太大。

需要注意的是,一旦用户访问 SPA,这三个文件将会被加载,并且只有在加载完毕之后才会渲染页面。但是最初加载的页面一般不需要太多文件内容,并且不应拖慢用户访问我们的网站的速度。

以下介绍了有关如何缓解此类问题的几种方法,以及在响应性和性能方面进一步改进 Vue.js 应用的其他方法。

功能组件

功能组件是不包含任何状态和实例的组件。将无状态 Vue 组件转换为功能组件可以大大提高渲染性能。

只需在顶层 template 标记中添加 functional 关键字即可:

1

要像以前一样访问 prop 和数据,你必须进行一些小的调整。

 1

如果你使用 i18n 进行国际化,则必须在 parent 之前加上 $t

1{{ parent.$t(

使用功能组件,我们无权使用方法或计算的 prop。但是,我们仍然可以使用 $options 访问方法。

 1

延迟加载组件

延迟加载组件可以节省大量的初始下载时间。调用 import() 函数时,将会下载所有延迟加载的资源。对于 Vue 组件,仅在请求渲染时才发生。对话框是注定会这样的。通常仅在用户交互后才显示它们。

 1

Webpack 将为 ModalDialog 组件创建一个单独的块,该块不会在页面加载时立即下载,而是仅在需要时才下载。

注意不要延迟加载应自动显示的组件。例如以下内容(无提示)将无法加载模式对话框。

1mounted() {

原因是已安装的 hook 是在延迟加载模态组件之前进行评估的。

延迟加载路由

构建 SPA 时,JavaScript 捆绑包可能会变得很大,从而增加页面加载时间。如果我们可以将每个路由的组成部分拆分为一个单独的块,然后仅在访问路由时才加载它们,则效率会更高。

1

定义一个异步组件非常容易,该组件将由 Webpack 自动进行代码拆分。只需更改导入语句:

1

除此之外,无需更改路由配置。通过以下方式在生产模式下构建你的应用:

1

并确认会生成很多块

Vue 和 Webpack 中的代码拆分

你还可以通过在浏览器中打开开发者控制台来验证此功能是否正常。在 Network 标签中,一旦你访问新路由,就会异步加载多个 JavaScript 文件。在开发模式下,每个块都将被赋予一个自动递增的数字。在生产模式下,将使用自动计算的哈希值代替。

延迟加载的块和预取缓存

Vue 有一个很酷的功能就是 Vue 自动添加 Webpack 的魔术注释 (https://webpack.js.org/api/module-methods/#magic-comments),以便进一步自动预取其他块(请参阅预取缓存一节) 。但是,预取仅在浏览器完成初始加载并变为空闲之后才开始。

使对象列表不可变

通常,我们将从后端获取对象列表,例如用户、项目、文章等。默认情况下,Vue 使数组中每个对象的每个第一级属性都具有响应性。对于大量对象而言,这代价可能会很大。有时我们只想显示对象时就不需要去修改它们。

所以在这种情况下,如果我们阻止 Vue 使列表具有响应性,那么就可以获得一些性能。我们可以通过使用列表中的 Object.freeze 来做到这一点,例如使其一直不变。

1

评估运行时性能

我们已经讨论了许多改进 Vue SPA 的方法,但是不知道我们实际获得了多少性能。可以通过使用浏览器中开发者工具的 Performance 标签来实现。

为了获得准确的数据,我们必须在 Vue 应用中激活性能模式。让我们在 main.ts 文件中用开发模式激活它

1Vue.config.performance = process.env.NODE_ENV !== 

这将激活 Vue 内部使用的 User Timing API (https://developer.mozilla.org/en-US/docs/Web/API/User_Timing_API。

打开浏览器,然后按 F12 键打开开发者控制台。切换到 Performance 选项卡,然后单击 Start Profiling。在 Chrome 中,“ Timings” 行显示重要标记,例如 “First Contentful Paint” 和 “First Meanfulful Paint” 时间。你应该尝试减少它们,以便你的用户可以尽快使用该网站。

总结

在本文中,我们了解了如何对路由和组件使用延迟加载以将 SPA 分成多个块,功能组件如何提高性能以及如何衡量这些改进。

原文链接

https://dzone.com/articles/speed-up-your-vuejs-single-page-app

 

2020年

京程一灯课程体系上新,这是我们第一次将全部课程列表对外开放。

愿你有个好前程,愿你月薪30K。我们是认真的 !

点击文末 阅读全文 查看细节。

长按二维码,加大鹏老师微信好友

拉你加入前端技术交流群

唠一唠怎样才能拿高薪

✎往期精彩回顾

面向开发人员的十大 NodeJS 框架

JavaScript 类完整指南

讲给前端的正则表达式

WebAssembly 正式成为 Web 的第四种语言

2020 年 Node.js 将会有哪些新功能

2020 年 Web 开发展望

从 JavaScript、ES6、ES7 到 ES10,你学到哪儿了?

15个 Vue.js 高级面试题

vue实现div多选全选功能_怎样为你的 Vue.js 单页应用提速相关推荐

  1. vue 带全选和多选的表格怎么写_vue实现下拉列表多选全选以及模糊查询的vue组件...

    vue实现下拉列表多选全选以及模糊查询的vue组件 发布时间:2018-09-12 17:41, 浏览次数:3776 , 标签: vue <>前端,有时有这样的需求,需要一个下拉列表,还要 ...

  2. VUE:checkbox 单选框(单选、多选)、一选全选 / 全选一选、表格单选列实现

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1. 效果:如红框中部分. 一选全选:表头上的单选框选中则下面每行都选中. 全选一选:表中数据每行都 ...

  3. vue中实现商品购物车全选反选

    项目需求: 实现一个购物车 全选框实现对商家和商品的全选 商家全选框实现对当前商家所有商品的全选 取消其中一个商品则取消对应商家全选和全选框 选中一个商家下的所有商品则勾选对应商家的全选框,不勾选全选 ...

  4. vue 实现el-select组件 配合 el-tabs 完成动态tabs然后有勾选 全选,还有模拟提交,回显数据

    cv即可使用 <!DOCTYPE html> <!DOCTYPE html> <html lang="en"><head><m ...

  5. JQuery全选反选 随其他checkbox自动勾选全选反选

    工作中的代码片段 写出来留作以后对比参考 网上没找到自己想要的全选反选代码 干脆自己写了个比较臃肿的 相信还有更加简单的方法 jquery代码 ============================ ...

  6. 统计订单:复选+全选+计算 的列表

    话不多说,先上效果图.带选择框和全选按钮的列表,因一些特殊要求还加上些计算功能,这并不是难就是稍微繁琐了些,如 "统计订单功能" 不要说,就是干,那就直接上代码 1,主页面的布局文 ...

  7. el-select多选全选

    <template><div><el-select @change="handleSelect($event)" v-model="sele ...

  8. 计算机快捷键全选,全选快捷键,详细教您电脑全选快捷键是什么

    在使用电脑的时候经常会遇到要全选的情况,使用鼠标右键进行全选在频繁使用全选的情况下会影响到编辑的速度,那么全选的快捷键是什么呢?没有使用过的用户就不知道了,下面,小编就来跟大家讲讲电脑全选快捷键. 经 ...

  9. Vue-----table 控件自动勾选全选框2 与tab控件组合使用

    页面区别: 代码: // 标签页的切换 tabClick(tab, event) {//获取tabs页的索引this.tabIndex=tab.indexthis.getEffectByProject ...

最新文章

  1. mysql主从复制自增_关于mysql主从复制自增长列
  2. SQL之 UNION ALL 和UNION
  3. java中异常+连接重置_是什么导致我的java.nett.ocketException:连接重置?
  4. 数学建模学习笔记(十)——时间序列模型
  5. kibana创建索引_ELK 索引生命周期管理
  6. 洛谷 P1137 旅行计划
  7. AC日记——单词替换 1.7 21
  8. DataStudio 编辑器快捷键列表
  9. 小球运动及碰撞3D仿真模型
  10. 电脑自带蓝牙与HC-06蓝牙模块使用串口助手通信
  11. 兼容性视图html页面,浏览器兼容性视图设置在哪
  12. Coding and Paper Letter(八十三)
  13. 罗技鼠标M330拆解
  14. 贡献一个fisco-bcos-browser-front基于官方的代码改造的兼容手机浏览器和pc浏览器
  15. C语言:简易商品库存管理系统(简单易懂,不用指针的入门级示例,数据结构大作业)
  16. 入行软件测试5年,跳槽3次,我摸透了软件测试这一行
  17. SSO单点登录详解------三、单点注销流程解析
  18. 熊猫关闭服务器微信,熊猫直播开始关闭服务器:App已在苹果应用商店下架
  19. 2021年云南省职工职业技能大赛CTF流量分析题(wireshark)WriteUp
  20. ubuntu笔记本外置显卡开展深度学习(转载)

热门文章

  1. FreeBSD配置防火墙开启SSH服务
  2. Linux 软件管理工具之rpm、yum
  3. Tegra3 vSMP架构Android运行时CPU热插拔及高低功耗CPU切换
  4. Android开发者指南(12) —— Android Supported Media Formats
  5. Ubuntu下设置电信拨号上网(10.04版)
  6. Linux/Centos7系统管理之进程与计划任务管理
  7. Flask项目支持https
  8. 树莓派与Android客户端进行socket通信
  9. 思考系统架构师的职责
  10. [Swift]LeetCode522. 最长特殊序列 II | Longest Uncommon Subsequence II