写给初中级 Vue 工程师的高级进阶指南

前言

很多读者会来问我,Vue 该怎么规划学习路线,或者大概进行到某个阶段了,该怎样继续深入。所以我决定根据我自己学习的心路历程,总结一篇 Vue 从入门到精通的路线。

跟着这篇文章走下来,对 Vue 以及它整个周边生态的理解一定会超过很多人,包括但不限于:

  • Vue 的入门、深入以及原理
  • Vite 的入门、深入以及原理
  • Vue 周边生态,社区推荐

这些内容我会全部精心整理在 vue3-roadmap 中,一定要关注更新。在前端从进阶到入院 里回复「资料」,即可领取本文配套的源码电子书、面试重要资料

入门

这里可以参考一下尤雨溪以前写的答案新手向:Vue 2.0 的建议学习顺序,官方作者直接给出的推荐路线足够权威。

首先从官方文档入手,Vue 的中文文档是公认做的比较友好的,能帮助你渐进式的入门这个框架。

如果你之前从来没有接触过 Vue、React 这些现代框架,那么建议你先不管脚手架的那些方式,最简单的就是直接建个 HTML 文件,通过 CDN 的方式引入 Vue 写写 demo,先大概把玩一下,熟悉基本语法。

当然只跟着官网学也有缺陷,就是你可能只是掌握了一些干巴巴的知识点,但是不知道怎样在实践项目中融会贯通,所以我推荐官网过一遍以后,也可以跟着培训机构在 B 站上发的免费课程再进一步巩固基础,在实战案例中加深你对知识点的理解:4 个小时带你快速入门 Vue

然后继续来一个电商后台管理的项目,或者其他类似的 B 站自行搜索,更加贴近公司实战级别的项目:Vue 实战项目:电商管理系统(Element-UI)

当然,如果你舍得花一些钱,那肯定是能享受到更好的课程和服务的,比如慕课网的这门课:Vue2.5-2.6-3.0 开发去哪儿网 App 从零入门到项目实战 可以让你入门 Vue2,大致了解 Vue3。

如果你因为公司的技术栈原因选择直接从 Vue3 开始学习,那么推荐:

付费课讲的一定是更加详细的,看个人经济情况选择吧。

Vue2 -> Vue3

这个章节可以选择性学习,适合对于 Vue2 已经比较熟悉,但还没有深入了解 Vue3 的同学,通过几篇简单的文章了解一下这两个大版本之间的差异,对于进一步的学习是很有帮助的。

进阶

整体学习

Vue2:

推荐 Aresn 老师的这本小册吧,他是 iView 组件库的作者,对于 Vue 的理解可以说是非常深入了。

Vue3:

Vue3 的课程,这里推荐资深讲师大圣老师全职以后出的第一个作品 《玩转 Vue 3 全家桶》,他在开课吧的时候就主导了众多 Vue 课程的设计,经验非常老道。这本小册侧重于 Vue3 的基础和实战,可以帮助你把整套 Vue3 的全家桶都搞明白:

熟练运用

对于 Vue 你必须非常熟练的运用,官网的 api 你基本上要全部过一遍。并且你要利用一些高级的 api 去实现巧妙的封装。举几个简单的例子:

  1. 你要知道怎么用slot-scope去做一些数据和 ui 分离的封装。 以vue-promised这个库为例。 Promised 组件并不关注你的视图展示成什么样,它只是帮你管理异步流程,并且通过你传入的slot-scope,在合适的时机把数据回抛给你,并且帮你去展示你传入的视图。
vue复制代码<template>
  <Promised :promise="usersPromise">
    <!-- Use the "pending" slot to display a loading message -->
    <template v-slot:pending>
      <p>Loading...</p>
    </template>
    <!-- The default scoped slot will be used as the result -->
    <template v-slot="data">
      <ul>
        <li v-for="user in data">{{ user.name }}</li>
      </ul>
    </template>
    <!-- The "rejected" scoped slot will be used if there is an error -->
    <template v-slot:rejected="error">
      <p>Error: {{ error.message }}</p>
    </template>
  </Promised>
</template>
  1. 你需要熟练的使用Vue.extend,配合项目做一些命令式 API 的封装。并且知道它为什么可以这样用,推荐 从零开始徒手撸一个 vue 的 toast 弹窗组件
  2. 你要开始使用JSX来编写你项目中的复杂组件了。

官方插件,一些使用例子在文档里都有:

教程:

官方提供了一个预览 Jsx 编译结果的网站 Vue 3 JSX Explorer

应用了 JSX 插件以后,你就可以以这样的方式书写你的组件:

js复制代码const App = () => (
  <>
    <span>I'm</span>
    <span>Fragment</span>
  </>
);

是不是非常像 React?灵活性更强了。

  1. 你要深入了解 Vue 中 nextTick 的原理,并且知道为什么要用微任务队列优于宏任务队列,结合你的 eventloop 知识深度思考。最后融入到你的异步合并优化的知识体系中去。
    Vue 源码详解之 nextTick:MutationObserver 只是浮云,microtask 才是核心!
  2. 你要能理解 Vue 中的高阶组件。关于这篇文章中为什么 slot-scope 不生效的问题,你不能看他的文章讲解都一头雾水。(需要你具备源码知识)
  1. 对于 Vuex 的使用必须非常熟练,知道什么时候该用 Vuex,知道怎么根据需求去编写 Vuex 的 plugin,合理的去使用 Vuex 的 subscribe 功能完成一些全局维度的封装,比如我对于 Vuex 中 action 的错误处理懒得一个个去try catch,就封装了一个vuex-error-plugin。代码很简单,重要的是去理解为什么能这样做。这里用了 monkey patch 的做法,并不是很好的实践,仅以此作为引子。
  2. 理解虚拟 DOM 的本质,虚拟 DOM 一定比真实 DOM 更快吗?这篇是尤雨溪的回答,看完这个答案,相信你会对虚拟 DOM 有更进一步的认识和理解。
    网上都说操作真实 DOM 慢,但测试结果却比 React 更快,为什么?
  3. Vue 动态组件的玩法,这篇文章比较综合,可以学到不少技巧:你可能不知道的 Vue 动态组件骚操作
  4. 可以把 vue-element-admin 这个项目学习一遍,掌握这个后台管理系统里的架构设计,还有一些精妙的细节写法。配套文章:手摸手,带你用 Vue 撸后台系列

路由

对于 Vue Router 的使用必须非常熟练,知道什么需求需要利用什么样的 router 钩子,这样才能 hold 住一个大型的项目,这个我觉得官方文档里过一遍就足够了,从入门到进阶的都有。Vue3 是配合 Vue Router 4 使用的。

Vue2 的同学就看 Vue Router 3.x 的文档就好

原理

腾讯的同学写的一整套原理解析,非常详细:

状态管理

Vue2 和 3 通用的官方状态管理库是 Pinia,只学这一个就行。

官网全中文,非常良心,值得认真过一遍 Pinia 官网文档

机智的你一定发现了,上述不少点都提到需要具备源码知识。没错,在我学习 Vue 的过程中,我发现在应用熟练的阶段就去学习源码,会让后面的进阶学习变得更加轻松。如果没有源码知识,你很难理解 Vue 内部的构造,自然也很难理解为什么 JSX 和 template 都可以实现一个组件,也难以理解 extend 这种高级 API 内部到底做了什么。

原理

Pinia(Vuex5.0 ?) 源码分析

Pinia 源码分析 1 —— 初始化

Pinia 源码分析 2 —— 相关 methods 与 api 的解析

mini 源码

直接入手学习正式版的源码可能跨度有点大,这里推荐 mini-vue 的源码教程,可以让你对 Vue 的内部原理有一个大致的了解。

尤雨溪亲自上阵,带你实现一个简易的响应式:尤雨溪教你写 Vue

以及开课吧的手写 mini-vue

源码深入

这里我给出 Vue2 和 Vue3 的源码学习路线推荐,你可以根据所在公司的技术栈,或者自己未来的规划自行选择学习。当然有时间精力的话都学也可以,两者的实现方式还是差别挺大的。

在深入源码之前,可以先学习一点阅读源码的理论技巧,让后续的学习事倍功半。

如何阅读前端源码的通用技巧,以 Vetur 为例

为什么要学源码?这篇文章也许可以解答你的疑惑:关于为什么我推荐大家看 Vue 源代码的随想

Vue2

  • 由于 Vue 的源码写的非常精美,而且阅读难度不是非常大,很多人也选择去阅读 Vue 的源码。视频课这里推荐黄轶老师的 Vue 源码课程。这里也包括了 Vuex 和 vue-router 的源码。
    推荐黄轶老师在慕课网的课程,Vue.js 源码全方位深入解析 (含 Vue3.0 源码分析),贵是贵点但是物有所值。
  • 推荐 HcySunYang 大佬的《Vue 逐行级别的源码分析》,这份文档已经不维护了,我整理起来放在了本文配套资料里,这份资料确实是对 Vue 的解析做到了逐行的级别,几乎所有的难点都有所涵盖。可以单独看,但最好是结合视频课来查漏补缺。
  • 当然,同作者的《Vue 从零实现渲染器》也是宝藏,脱离框架讲解了 vnode 和 diff 算法的本质,最终从零实现了一个渲染器。配套资料里同样有。
  • 如果对于某个难点,视频和电子书都没能让你彻底理解的话,可以再结合社区一些优秀的源码分析文章来补缺,比如汪图南的 Vue2 源码分析

Vue3

Vue3 相比较 Vue2 来说,是一次完全的重写,里面也蕴含了这些年框架设计、理念的不断进步。所以也是非常值得去深入学习原理的。

整体学习

这里推荐这个开源电子书,尤雨溪本人 Sponsor 过:Vue3 源码解析

响应式

我个人是对于 Vue3 的响应式部分学习比较深,如果你已经非常熟悉 Vue2 的响应式原理了,那么 Vue3 的响应式原理对你来说应该没有太大的难度。甚至在学习之中你会相互比较,知道 Vue3 为什么这样做更好,Vue2 还有哪部分需要改进等等。

Vue3 其实就是把实现换成了更加强大的 Proxy,并且把响应式部分做的更加的抽象,甚至可以,不得不说,Vue3 的响应式模型更加接近响应式类库的核心了,甚至 react-easy-state 等 React 的响应式状态管理库,也是用这套类似的核心做出来的。

推一波自己的文章吧,细致了讲解了 Vue3 响应式的核心流程(当然,随着版本的进步,很多代码对不上了,但是核心思想不变):

其他部分

优化

对于一个框架掌握是否深入,一个很好的标准就是你能否结合日常业务和原理进行优化,能拿到什么样的优化结果,这个对于你在职场上的成绩也是非常有帮助的。

Vite

作为扬言要打倒 Webpack 的新时代开发工具,Vite 对于 DX(开发者体验)的提升是巨大的。

Vite 别出心裁的利用了浏览器的原生 ES Module 支持,直接在 html 文件里写诸如这样的代码:

html复制代码// index.html
<div id="app"></div>
<script type="module">
  import { createApp } from "vue";
  import Main from "./Main.vue";

  createApp(Main).mount("#app");
</script>

Vite 会在本地帮你启动一个服务器,当浏览器读取到这个 html 文件之后,会在执行到 import 的时候才去向服务端发送 Main.vue 模块的请求,Vite 此时在利用内部的一系列黑魔法,包括 Vue 的 template 解析,代码的编译等等,解析成浏览器可以执行的 js 文件返回到浏览器端。

这就保证了只有在真正使用到这个模块的时候,浏览器才会请求并且解析这个模块,最大程度的做到了按需加载。

先来听听作者本人聊 Vite:

文档是最基本要过一遍的:

Bilibili 视频上手教程:

综合实践以及深入运用:

原理的话,推荐这本电子书,需要注意的是 Vite 的变化非常快,源码细节不一定完全对的上,但是通过电子书掌握大致原理完全没问题:

各个公司也在推 Vite 或者自研类 Vite 的开发工具,比如抖音,总结出的心血之作把类 Vite 工具研发中遇到的坑都讲的很清楚。

开源动态

想要成为框架的优秀开发者,关注框架社区是必不可少的一步。记得在某推上关注 Evan you,然后经常和他互动的 Vue 团队的人都可以关注一波,英文看不懂就装个划词翻译插件慢慢看。

知乎推荐关注:

感谢阅读

前端从进阶到入院 里回复「资料」,即可领取本文配套的源码电子书、面试重要资料

作者:ssh_晨曦时梦见兮
链接:https://juejin.cn/post/7249761605600542781
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2021, 九款值得推荐的VUE3 UI框架

来自:开源博客,作者:devpoint

链接:https://my.oschina.net/lav/blog/5179117

本文推荐几个比较流行的VUE3 UI框架,同时提供出色的开发人员体验,合理利用,又或者学习借鉴都是不错的选择,排名不分先后。

Ant Design Vue

官方网站:https://2x.antdv.com/components/overview/

Ant Design Vue 是一个非常成熟的框架,使用 Ant Design Vue 创建用户界面非常简单,这些组件可以适应各种图标样式、字体和黑色主题。Ant Design Vue 不断改进其60多个组件,基本覆盖项目大部份需求,而且使它们变得更好,更易于访问。

2021, 九款值得推荐的VUE3 UI框架

Vue3 上的 Ant Design 包更小,感觉更轻,并且支持 SSR(还包括组合API),Ant Design 拥有成熟的复杂组件,如数据表、统计框、pop确认、模态和弹出窗口。

Ant Design Vue 在 GitHub 上拥有 15k+ 颗星,每周下载量为 49k,数据已经说明了它的受欢迎程度。

BalmUI

官方网站:https://next-material.balmjs.com/#/

BalmUI 已经发布了他们的 9.0 版本了,该版本支持Vue3。Balm 基于谷歌的 Material Design,这就是为什么它看起来很熟悉。Balm 附带 Vue 插件和指令,以及从简单到复杂的高度可定制的组件。

2021, 九款值得推荐的VUE3 UI框架

BalmUI 发展非常迅速,如果想使用 Material Design 风格,使用复杂的内置指令(如 debouncing 和 UI 波纹)在创建自定义组件时能派上用场,那么它非常适合 Vue3 项目。

Wave UI

官方网站:https://antoniandre.github.io/wave-ui/

WaveUI 在Vue3 发布后进行了良好的定位,WaveUI 的开发是在 Vue3 仍处于alpha阶段时就开始了,其目标是在其API稳定后立即支持它,使其成为首批 Vue3 UI框架之一。

2021, 九款值得推荐的VUE3 UI框架

WaveUI 拥有40多个漂亮且响应迅速的组件,它们的范围从旋转器到日历,以及介于两者之间的任何东西。WaveUI 还提供实用程序、可定制性和成熟的集成表单验证功能。

WaveUI 提供的组件非常漂亮,动画效果也非常好,它的风格在整个框架中是一致的。企业级响应式 Vue3 应用程序不错的选择。

Vuestic

官方网站:https://vuestic.dev/

Vuestic 是 Vue 最漂亮的开源管理面板之一,擅长编写可维护的 Vue 代码,制作灵活的组件和接口。

2021, 九款值得推荐的VUE3 UI框架

该团队最近发布了 Vuestic 的 Vue3版本,包含了流行的 Vuestic Admin UI 和更多的组件。Vuestic 强调它对键盘导航的开箱即用支持,由于它提供的用户体验,这个特性在前端社区很受欢迎。

Vuestic 提供了 50 多个具有独特功能和广泛可配置性的组件,应式设计,这些组件几乎适用于所有屏幕分辨率。Vuestic 在整个框架中提供无缝翻译支持和键盘可访问性。

Vuestic 已经凭借其漂亮的组件目录确立了自己作为最美观的 Vue3 UI 框架之一的地位。他们现在正在加快步伐创建更复杂的组件,例如日期选择器或数据表,它们肯定会像他们当前的产品一样具有创造性。

Element+

官方网站:https://element-plus.org/#/zh-CN

Element+ 已经在 Vue2 中声名鹊起,Element+ 为 Vue3 带来了大量不引人注目的组件,创建一个非常复杂的应用程序所需的大部分内容都已经制作完成并可供使用。Element+ 提供成熟的日期和时间选择器、树、时间线和日历组件。

2021, 九款值得推荐的VUE3 UI框架

Element+ 甚至提供开发人员在构建 UI 界面时可能需要的最细微的部件,从简单的动画到框架范围的国际化系统,可以与 i18n 配对使用以创建自定义翻译,甚至添加非内置语言。

Element+ 在 GitHub 上拥有 11.1k+ 颗星,正在成为 Github 上最受欢迎的 Vue3 UI 框架之一,它以出色的问题管理、及时更新、可插入组件和通过SCSS变量的高定制性达到了开发者的期望。

Ionic

官方网站:https://ionicframework.com/docs/vue/overview

Ionic 是最早提供 Vue3 支持的 UI 框架之一, Ionic 更倾向于移动 UI,团队知道如何迎合和维护一个优秀的 UI 框架。

2021, 九款值得推荐的VUE3 UI框架

Ionic Vue 是一个很成熟的框架,有一个令人震惊的社区、大量的 StackOverflow 问题、企业支持和一个拥有核心成员的大型 Slack 频道,这使得可以在需要帮助时轻松获得支持。

Ionic Vue 框架在 Github上有 45k+ 颗星,已经被很多大公司使用,包括空客(Airbus)和艺电(Electronic Arts),而 Ionic 的团队以擅长维护他们的UI框架而闻名,这是现在和未来的一个很好的选择。

Naive UI

官方网站:https://www.naiveui.com/zh-CN/os-theme

Naive UI 在 Twitter 上发布,然后被 Vue 的创建者转发,给这个新生的组件库带来了大量流量。现在,Naive UI 在不到三个月的时间里就在 GitHub 上获得了5.1k 颗星。

2021, 九款值得推荐的VUE3 UI框架

它提供了70多个制作精良的组件,这些组件可以无缝地融入几乎任何类型的 Vue3应用。Naive的组件性能优异,可定制性极强,并支持 TypeScript,提供了很棒的开发体验。

文档网站易于浏览,并具有完整的自定义输入,可帮助开发人员预览组件在他们自己的主题中的外观。可以使用这些选项来创建自己的带有颜色图案和字体的完整主题。这个定制的主题可以下载并轻松添加到应用程序中以覆盖默认值。

Quasar

官方网站:https://next.quasar.dev/

Quasar 是一个完整的、以性能为中心的框架,可帮助构建 Vue 用户界面(SPA、PWA、SSR、移动和桌面),除了 Vue、Node 和 Webpack,Quasar 还包含 Cordova、Capacitor 和 Electron,它们可以帮助构建桌面和移动体验,而无需单独学习。

2021, 九款值得推荐的VUE3 UI框架

Quasar 框架似乎是基于 Material Design,但是一旦开始,一切都可以很好地定制以适应自己的设计体系。

对 Vue3 支持也很迅速,而且 Quasar 已经发布了几乎所有的 v1 组件、插件和指令。此外,他们还发布了可组合组件,帮助开发人员更深入地了解 Quasar API。

PrimeVUE

官方网站:https://primefaces.org/primevue/showcase/#/setup

PrimeVUE 也算是最早支持 Vue3 的框架之一,它并没有让人失望。PrimeVUE 拥有 80 多个组件,证明自己是此列表中组件范围最广的框架之一。

2021, 九款值得推荐的VUE3 UI框架

组件包括带有仪表、滑块、树、图形、拆分按钮、旋钮、图表等的密码表单。PrimeVUE 甚至还集成了一个表单验证库 Vuelidate。附带了预先制作的主题,并提供了一个成熟的可视化编辑器,帮助开发人员定制自己的主题。

总结

随着生态系统的迁移,从 Vue2 迁移到 Vue3 将变得更加容易,因此,借助 Vue3 提供的API和响应性,并结合这些 UI 框架将会让项目开发变得更好、更快、更灵活。

— EOF —

尤雨溪自述:打造Vue 3背后的故事

作者 | 尤雨溪
译者 | 王强
编辑 | 蔡芳芳
尤雨溪在今年年初 Vue 3 正式发布之前撰写了这篇长文,详述 Vue 3 的设计过程。前端之巅将全文翻译如下,希望能帮助你更好地了解 Vue 3 背后的故事。

在过去的一年中,Vue 团队一直都在开发 Vue.js 的下一个主要版本,我们希望能在今年上半年发布它(本文完成时这项工作尚在进行)。Vue 新版本的理念成型于 2018 年末,当时 Vue 2 的代码库已经有两岁半了。比起通用软件的生命周期来这好像也没那么久,但在这段时期,前端世界已经今昔非比了。

在我们更新(和重写)Vue 的主要版本时,主要考虑两点因素:首先是新的 JavaScript 语言特性在主流浏览器中的受支持水平;其次是当前代码库中随时间推移而逐渐暴露出来的一些设计和架构问题。

为什么重写
利用新的语言特性

随着 ES2015 标准的落地,JavaScript(以前被称为 ECMAScript,缩写为 ES)获得了诸多重大改进,同时主流浏览器也终于开始对这些新特性提供良好的支持了。其中的一些特性使我们能够大幅提升 Vue 的能力。

这里面最值得一提的就是 Proxy:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy

它为框架提供了拦截针对对象的操作的能力。Vue 的一项核心特性就是监听用户定义状态的变化,并响应式更新 DOM。Vue 2 是通过替换状态对象属性的 getter 和 setter 来实现这种响应能力的。转向 Proxy 后,我们就能解决 Vue 当下存在的诸多局限(比如无法检测新增属性等),还能提供更好的性能。

但 Proxy 是一个原生的语言特性,无法在老式浏览器中提供完整的 polyfill。为此我们需要改动新版框架的浏览器支持范围——这是一项破坏性变更,只有新的主要版本才能实现。

解决架构问题

在现有代码库上修复这些问题需要大量高风险的重构工作,几乎等同于重写了。

在维护 Vue 2 的过程中,我们积累的很多问题受限于现有的架构是很难解决的。例如,模板编译器的写法使我们很难实现良好的源映射支持。另外,虽然 Vue 2 技术上支持构建以非 DOM 平台为目标的高级渲染器,但为了实现这一支持,我们需要 fork 代码库,还得复制一大堆代码。在现有代码库上修复这些问题需要大量高风险的重构工作,几乎已经等同于重写了。

同时,我们在很多内部模块与看起来无处可去的零散代码之间生成了很多隐藏的耦合关系,结果积累了不少技术债。现在我们很难单独理解代码库中某一部分的含义,而且我们也注意到贡献者们很少有信心做出突破性的更改。通过重写,我们得以基于这些问题重新思考代码的组织方式。

早期的原型阶段

我们是从 2018 年末开始创建 Vue 3 的原型的,主要目标是验证针对上述问题的解决方案。在这一阶段,我们主要是为后续的开发工作打下牢固的基础。

转向 TypeScript

Vue 2 最初是用纯粹的 ES 编写的。原型阶段开始后不久,我们意识到对于这么大规模的项目来说,类型系统会非常有用。类型检查可以大幅降低在重构中引入意外 bug 的几率,也能提升贡献者在做出突破性更改时的信心。我们采用了 Facebook 的 Flow 类型检查器,因为它可以渐进添加到一个现有的纯 ES 项目中。Flow 起了一定作用,但我们的收益不及预期;特别是它的重大更改太多了,升级起来相当痛苦。它对集成开发环境的支持也不如 TypeScript 与 VS Code 的深度集成水平。

我们还注意到越来越多的用户在结合使用 Vue 和 TypeScript。为了支持他们的使用场景,我们需要在源码之外单独编写和维护一套 TypeScript 声明,其使用了另一套类型系统。转向 TypeScript 后,我们就能自动生成声明文件,降低维护成本。

解耦内部包

我们还采用了一个单体仓库方案,其中框架是由众多内部包组成的,每个包都有自己独立的 API、类型定义和测试用例。我们想让各个模块间的依赖关系更明显,让开发人员更容易阅读、理解和修改所有这些依赖项。这是我们降低项目贡献门槛,提升其长期可维护性的关键举措。

制定 RFC 流程

2018 年末,我们有了一个带有新的响应系统和虚拟 DOM 渲染器的原型。我们验证了计划中的内部架构优化,但只是粗略起草了面向外部的 API 更改想法。现在该将这些想法转变为具体的设计了。

我们知道这一步要在早期谨慎进行。Vue 的广泛流行意味着重大更改可能会给用户带来巨大的迁移成本,还可能让生态碎片化。为了让用户对重大更改提交反馈,我们在 2019 年初制定了一套 RFC(征求意见)流程。

https://github.com/vuejs/rfcs

所有 RFC 都有一个模板,包括动机、设计细节、权衡以及采用策略等内容。这套流程的实现形式,是在一个 Github 仓库上将提案提交成拉取请求,这样自然就可以在评论中讨论提案了。

结果表明这个 RFC 流程非常有用。作为一个思维框架,它强制我们全面考虑一个潜在更改的所有层面,并让整个社区可以参与到设计过程中,并提交经过充分思考的特性需求。

更快,更小

前端框架的性能至关重要。

前端框架的性能至关重要。尽管 Vue 2 已经提供了颇具竞争力的性能表现,但这次重写让我们有机会试验新的渲染策略来进一步提升性能。

突破虚拟 DOM 的瓶颈

Vue 有一套独特的渲染策略:它提供了一个类 HTML 的模板语法,但将模板编译成了一个返回虚拟 DOM 树的渲染函数。框架会递归遍历两个虚拟 DOM 树,对比每个节点的所有属性来判断该更新 DOM 的哪些部分。这种相对暴力的算法一般还是很快的,这要感谢现代 JS 引擎实现的那么多高级优化措施。但是更新过程还是会涉及很多不必要的 CPU 工作。当你的模板存在大量静态内容,却只有少量动态绑定时,更新的效率就会显得尤为低下——还是要递归遍历整个虚拟 DOM 树,才能找出要更新的部分。

所幸模板编译这一步让我们可以对模板进行静态分析,并提取动态部分的信息。Vue 2 跳过了静态子树,在一定程度上做到了这一点;但是由于过度简化的编译器架构,更高级的优化就很难实现了。在 Vue 3 中我们重写了编译器,加入了一个合适的 AST transform 管道,让我们能以 transform 插件的形式进行编译时优化。

现在有了新的架构,我们想要找到一个尽可能减少额外开销的渲染策略。一个选项是抛弃虚拟 DOM 并直接生成命令式 DOM 操作,但这会失去直接编写虚拟 DOM 渲染函数的能力,我们发现这是对于高级用户和库作者们非常有价值的能力。此外,这也会是一个影响巨大的重大更改。

接下来的选项就是摆脱不必要的虚拟 DOM 树遍历和属性对比,这也是更新过程中性能开销最大的部分。为此,编译器和运行时需要协同工作:编译器分析模板,生成带有优化线索的代码,而运行时获取线索并选择最快路径。这里有三大优化工作:

首先,在树级别,我们注意到没有动态调整节点结构的模板指令(如 v-if 和 v-for)时,节点的结构完全保持静态。如果我们将模板根据这些结构化指令拆分为一些嵌套”块”,每一个块中的节点结构也会保持静态。当我们更新一个块中的节点时,就不必再递归遍历整个树了——块内的动态绑定可以在一个平面数组里追踪。这一优化极大减少了需要遍历的树的数量,规避了大部分虚拟 DOM 树开销。

其次,编译器会激进检测模板中的静态节点、子树甚至数据对象,并在生成的代码中将它们提取到渲染函数之外。这就可以避免在每次渲染时重新创建这些对象,大幅减少了内存占用,并减少了垃圾收集的频率。

最后,在元素级别,编译器会为每一个有动态绑定的元素,根据其需要进行的更新类型生成一个优化标志。比如说一个元素有一个动态的 class 绑定和一些静态属性,它会获得一个标志,表示这里只需要进行 class 检查。运行时会获取这些标志,然后选择最快的路径。

CPU 时间:是指 JavaScript 运算所消耗的时间,不包括浏览器 DOM 操作所用的时间。

结合这些优化,我们的渲染更新速度获得了显著改进,在某些场景下 Vue 3 的 CPU 时间 仅为 Vue 2 的十分之一不到。

缩小包体积

框架的大小也会影响其性能。这是 Web 应用程序特有的现象,因为资产需要在线下载,而应用需要等到浏览器解析完必要的 JavaScript 代码后才能开始交互。单页面应用程序在这方面的矛盾尤为明显。尽管 Vue 一直以来都是相对轻量级的框架——Vue 2 的运行时大小为 23KB(gzip 压缩后),我们还是注意到了两个问题:

首先,不是所有人都需要框架的全部功能。例如,从来不需要过渡特性的应用还是需要下载和解析相关代码。

另外,我们在不断给框架增加新特性,框架也在不断变大,没有止境。这样我们在权衡新特性的利弊时,就得非常在意包大小这个权重。结果,我们会倾向于只加入那些大多数用户都会用到的特性。

理想状态下,用户可以在构建时去掉框架中自己不需要的特性(也就是”摇树优化”),只保留自己用到的特性。这样我们在添加只有部分用户会用到的特性时,并不会给其他用户增添应用体积的负担。

在 Vue 3 中,我们把大多数全局 API 和内部 helper 移到了 ES 模块导出中,从而实现了这个目标。这样现代的打包器就可以静态分析模块依赖项,并去掉与未使用导出相关的代码。模板编译器也会生成适合摇树优化的代码,只会对模板确实用到的特性导入 helper。

框架的有些部分是永远无法摇树优化的,因为它们对于所有应用类型来说都很重要。我们将这部分无法舍弃的代码的体积称作基线大小。虽然 Vue 3 增加了很多新特性,但其基线大小只有大约 10KB(gzip 后),不到 Vue 2 的一半。

满足扩展需求

我们还想改善 Vue 应对大规模应用程序的能力。我们最初设计 Vue 时主要想的是降低入门门槛并平滑学习曲线。但随着 Vue 愈加流行,我们也看到了越来越多的项目需求随着时间推移不断扩大,后期甚至包含数以百计的模块,需要几十名开发人员来维护。对于这种类型的项目,TypeScript 这样的类型系统和可以提供组织清晰、易于复用的代码的能力是必不可少的,但 Vue 2 在这些方面的支持水平不甚理想。

在 Vue 3 的早期设计阶段,我们尝试内置对使用 class 编写组件的支持,从而更好地整合 TypeScript。这里的问题在于,为了让 class 可用而需要的很多语言特性(例如 class fields 和 decorators)都还处在提案阶段,有可能在正式版中出现变化。随之而来的复杂性和不确定性让我们开始质疑 Class API 是否真的合适,因为它只能改善一点 TypeScript 的整合能力而已。

于是我们决定探索其他途径来解决扩展问题。受到 React Hooks 的启发,我们想到了暴露底层的响应式和组件生命周期的 API,从而提供一种更灵活地编写组件逻辑的方式,也就是 Composition API。

https://vue-composition-api-rfc.netlify.com/

Composition API 不再需要用一个长长的配置列表定义组件,它允许用户自由定义、组合和重用组件逻辑,就像写函数一样,同时还能提供完善的 TypeScript 支持。

我们非常喜欢这个想法。尽管 Composition API 是为解决特定类型的问题设计的,但也能用在单纯的组件开发中。在提案的初稿中我们有些忘乎所以,暗示我们可能会在未来的版本中用 Composition API 替换掉当前的 Options API。这引起了社区成员的极大反弹,给我们上了重要的一课,让我们认识到了与社区沟通长期计划和发展方向,以及理解用户需求的重要性。在听取社区反馈之后,我们完全重做了提案,确认 Composition API 只是锦上添花,是 Options API 的补充。新版提案的反馈要正面许多,我们还收到了很多建设性的意见。

把握平衡

开发人员的多样性意味着使用场景的多样性。

如今有超过一百万的开发人员在使用 Vue,其中有只懂一点 HTML/CSS 的新手,从 jQuery 一路走来的专家,从其他框架迁移过来的老鸟,在寻找前端解决方案的后端工程师,还有负责设计大规模软件的架构师。开发人员的多样性意味着使用场景的多样性:有的开发人员可能想要提升旧项目的交互体验,另一些人可能想要快速开发低成本的一次性项目;架构师可能要应对规模巨大的长期项目,以及项目生命周期内的开发团队成员变动。

Vue 的设计在不断根据这些需求变化和发展,我们也设法从诸多权衡中找到平衡点。Vue 的口号“渐进式框架”,背后就是这个过程中形成的分层 API 设计。新手可以通过 CDN script、基于 HTML 的模板以及直观的 Options API 顺利学习入门。而专家可以通过全功能的 CLI、渲染函数以及 Composition API 来处理复杂需求。

要实现我们的愿景还有很多工作要做,其中最重要的就是更新支持库、文档和工具,以保证平滑的迁移。我们会在未来的几个月中继续努力,而且我们迫不及待想要看到社区能用 Vue 3 创造怎样的精彩了。

作者介绍

尤雨溪是 Vue.js 框架的创建者和项目领导,也是一位独立开源开发者。

原文链接

https://increment.com/frontend/making-vue-3/

2020年11大顶级VueJS开发工具

2020年11大顶级VueJS开发工具

作者 | Shanika Wickramasinghe
译者 | 王强
策划 | 小智
Vue JS 最近变得越来越流行,主要是因为它在学习和开发应用程序方面都提供了很多便利。无论你是经验丰富的开发人员,正希望切换到 Vue 上,还是刚刚开始工作的新人——选择正确的工具都是非常重要的。在合适的工具帮助下,你就能快速构建出色的应用,而无需重新发明轮子。

在为这个列表挑选工具时,我们考虑了整个 Vue JS 的开发周期。从为你的新应用程序设置样板开始,我们涵盖了许多重要的应用程序概念、调试甚至测试内容。

那就开始吧。

1. Vue CLI

2020年11大顶级VueJS开发工具

与其他所有 JavaScript 框架一样,你需要 CLI 工具才能用 Vue 做很多事情。CLI 使你可以快速创建项目结构并部署样板。它还允许你创建实时原型来演示新功能。

除了常见的功能外,Vue CLI 还提供了许多额外内容,比如对一众 Web 开发工具的支持,包括 TypeScript、Babel、PostCSS、ESLint、单元测试、PWA 和端到端测试等。它还与社区创建的可扩展第三方插件相兼容。

Vue CLI 的另一个好处是它不需要弹出。换句话说,Vue CLI 与其他框架相比有更大的自定义空间。Vue CLI 的图形用户界面是其最重要的特性之一,可让你方便地创建新项目并管理它们。

2. Nuxt JS

2020年11大顶级VueJS开发工具

设置好 VueJS 之后,要创建你的应用程序,第一步就是设置一个好的样板,这样就无需从头开始编写代码了。样板创建有很多选项,而我们这里选择的工具是 Next JS;因为它允许你创建多种类型的应用程序,例如服务端渲染(SSR)、渐进式 Web 应用程序(PWA)、单页应用程序(SPA), 和静态站点。

Nuxt 有一个模块化架构,并拥有 50 多个模块,可以加快你的开发流程。这些模块支持的任务类型众多,例如引入 PWA、添加 Google Analytics 或生成站点地图等。

它还通过自己的包分析器实现了 Vue JS 和 Node.JS 的最佳实践,提供了开箱即用的性能调优。

3. Bit for Vue

2020年11大顶级VueJS开发工具

Bit为团队构建下一代 Vue 组件库 的好方法。它解决了跨存储库共享和协作处理 UI 组件的问题。这也是一种将 UI 与共享组件(独立开发、版本控制和更新)组合在一起的有效方法。

你可以在 bit.dev 平台 中托管和组织组件。把组件库比作音乐专辑的话,那么 Bit.dev 就像是 iTunes 一样。Bit.dev 利用 Bit 的 CLI 工具,使你可以管理任何本地项目中独立组件的版本,并将它们推送到 Bit.dev 上的集合中;在这个集合中可以对这些组件执行组织、编辑文档、渲染以及安装 / 导入等操作。

在 Bit.dev 中,你的团队可以从任何新项目中搜索、渲染、安装甚至更新任意组件。平台提供了许多开箱可用的功能,包括自动组件文档、渲染沙箱等。

Bit 的秘诀在于跟踪每个组件的依赖项,并将组件作为独立的代码单元来进行版本控制。它还可以在隔离的环境中构建和测试共享组件,从而确保共享组件真正可复用,然后再将其从本地项目导出到 bit.dev 的集合中。

  • 了解更多:Bit.dev 组件库的 15 大优势

https://blog.bitsrc.io/15-reasons-to-build-your-component-library-in-bit-dev-93a514878863

  • 在此处查看 Bit 工作流程的真实 Vue 应用演示:

https://blog.bitsrc.io/15-reasons-to-build-your-component-library-in-bit-dev-93a514878863

4. Vue-router

如果你熟悉其他 JavaScript 框架,那么肯定也很熟悉路由的概念。路由器用来将应用程序 URL 映射到各个组件上。Vue-router 在这方面做得很好,并支持基于组件的路由器配置。

此外,它还支持路由器参数、查询和通配符,以支持复杂的路由。与其他框架相比,它提供的了过渡效果等特性,使更改路由的过程对用户更加友好;它还提供了带有活动 CSS 类的链接,从而带来了更多可能性。

Vue-router 还可以选择使用 HTML5 历史记录或哈希模式。这非常重要,因为它会影响用户体验,尤其是当应用程序的设计要求用户转到上一页时更是如此。

5. Vuex

2020年11大顶级VueJS开发工具

状态管理是许多开发人员都头疼的重大问题。没有适当的状态控制意味着应用程序的行为可能难以预测。Vuex 集中了所有状态管理函数,并仅允许状态以可预测的方式突变,从而更好地解决状态管理这个问题。

Vuex 允许基于状态、视图和动作进行突变。状态定义有关应用程序的事实;视图向用户显示这些事实,而动作会导致状态更改,从而重新启动突变周期。

Vuex 还提供了诸如零配置时间旅行调试和状态快照导出 / 导入等功能。

6. Axios

Axios 是一个流行的第三方库,用于创建和管理 ajax 请求。Vue 将曾经是“官方”的 ajax 库”vue-resource”从其存储库中分离出来之后,Vue 团队的首选就变成了 Axios。因此 Axios 的流行度和使用率得到了提升。

这是有充分的理由的。尽管 Axios 不是官方 Vue 存储库的一部分,但它与它的前任很像,并且具有通用性、支持取消功能并具有 TypeScript 定义。使用 Axios 时要注意的一点是,如果你的服务器本身不支持 Promise,则需要自己提供一个 polyfill。

7. Vuetify

2020年11大顶级VueJS开发工具

顾名思义,Vuetify 是“Vue”和“Beautify”两个词的组合,能让你的应用程序获得优美的 Vue 体验。它是一个精美的手工挑选的 UI 组件库,即使你不是设计师,它也可以帮助你创建漂亮的应用程序。

它提供了 80 多个基于 Material Design 规范的组件,并通过其 Vue CLI 插件提供了现成的项目骨架。SSR 支持也是内置的。这些组件包括警报、Banner、Badge、按钮、表单输入和控件,还有进度小部件等。

8. Vue Apollo

2020年11大顶级VueJS开发工具

GraphQL 是一种多功能工具,用来利用各种 API 的能力。你可以用它查询应用程序或函数所需的正确数据。Vue Apollo 是将 GraphQL 用于 Vue 的最便捷方法之一。

Apollos 组件能够以一种真正的声明方式来使用 GraphQL。Apollo 的核心是为后端应用程序提供一个 Schema 语言,同时为前端提供一个查询语言,以便进行数据交换。它还支持 SSR,这样你就可以在服务端渲染 HTML 了。

9. Mocha

2020年11大顶级VueJS开发工具

任何应用程序的一大要素就是测试。它能确保应用程序满足客户的期望,确保开发工作以适当的方式进行。对于使用 Vue 或其他 JavaScript 框架构建的应用程序来说,测试是尤其重要的。

尽管有许多框架可以用来执行测试,但我们选择的是 Mocha,因为 Mocha 既可以通过 Node.JS 在后端运行,也可以在前端运行。这就让异步测试既方便又有意义,因为两端的流程都得到了验证。它还提供了将未捕获的异常映射到 GitHub 上相关测试用例的能力,这样就更容易跟踪和解决它们了。

10. 用于浏览器的 Vue.js DevTools

2020年11大顶级VueJS开发工具

调试对于高效的开发流程而言是至关重要的。如果没有良好的调试工具,我们几乎无法掌握应用程序的运行情况。除了 Vue JS 推荐的官方调试工具以外,我们还可以添加其他更好的选择。

Vue.js DevTools 具有适用于 Firefox 和 Chrome 的插件,还有适用于任何环境的一个独立的 Electron 应用。浏览器插件将“Vue”选项卡添加到其原生开发工具实现中,从而使调试体验变得更加流畅,对用户更友好。

11. 官方 Vue.js 指南

2020年11大顶级VueJS开发工具

最后一条也很有用,如果我们对 Vue 及其相关的所有出色工具产生了兴趣,那么可以去官方 Vue JS 指南了解更多信息:

https://vuejs.org/v2/guide/

该指南适用于所有当前和过去的 Vue 版本,因此无论你是刚开始入门,还是希望改进或扩展基于旧版本 Vue 的已有应用程序,都可以从本指南中获益良多。你还可以通过版本历史轻松对比组件的更改方式。

此外,指南还内置了视频、代码段和交互式应用程序,以使其更具交互性且更易理解。指南的最后一部分提供了与其他框架(例如 React 和 Angular)的详细对比。这为已经熟悉此类框架,准备转向 Vue 的开发人员提供了一条有吸引力的途径。

   总结   

你喜欢我们总结的清单吗?我们希望本文能勾起你学习 Vue 的兴趣,或者如果你已经熟悉 Vue 了,也可以尝试其中一些工具。

无论你是刚刚入门还是经验丰富的开发人员,这些工具都可以让你的开发流程效率更高。正如创作者 Evan You 所说:“你会喜欢 Vue 的!”。请务必查看官方文档:

https://vuejs.org/v2/guide/

延伸阅读

https://blog.bitsrc.io/top-10-vuejs-developer-tools-becd61375447

 转自:https://mp.weixin.qq.com/s?__biz=MzUxMzcxMzE5Ng==&mid=2247493683&idx=1&sn=2b7c76e04c4792d4416932003c909ef4&chksm=f9525d70ce25d466c85a597d2b6306b2b18184ccd01eb3dbc4b072165bcd3844d15c81bbfddf&mpshare=1&