webpack作者评价vite

webpack作者评价vite,第1张

评价:Vite 是 vue 的作者尤雨溪在开发 vue30 的时候开发的一个 基于原生ES-Module的前端构建工具。其本人在后来对 vue3 的宣传中对自己的新作品 Vite 赞不绝口,并表示自己 ”再也回不去 webpack 了“ 。

webpack缺点是缓慢的服务器启动

当冷启动开发服务器时,基于打包器的方式是在提供服务前去急切地抓取和构建你的整个应用。

vite改进

Vite 通过在一开始将应用中的模块区分为依赖和源码两类,改进了开发服务器启动时间。

依赖大多为纯JavaScript并在开发时不会变动。一些较大的依赖(例如有上百个模块的组件库)处理的代价也很高。依赖也通常会以某些方式(例如 ESM 或者 CommonJS)被拆分到大量小模块中。

Vite 将会使用 esbuild 预构建依赖。Esbuild 使用 Go 编写,并且比以 JavaScript 编写的打包器预构建依赖快10-100倍。

源码通常包含一些并非直接是 JavaScript 的文件,需要转换(例如 JSX,CSS 或者 Vue/Svelte 组件),时常会被编辑。同时,并不是所有的源码都需要同时被加载。(例如基于路由拆分的代码模块)。

Vite以原生ESM方式服务源码。这实际上是让浏览器接管了打包程序的部分工作:Vite 只需要在浏览器请求源码时进行转换并按需提供源码。根据情景动态导入的代码,即只在当前屏幕上实际使用时才会被处理。

webpack: 分析依赖=> 编译打包=> 交给本地服务器进行渲染。首先分析各个模块之间的依赖,然后进行打包,在启动webpack-dev-server,请求服务器时,直接显示打包结果。

webpack打包之后存在的问题:随着模块的增多,会造成打出的 bundle 体积过大,进而会造成热更新速度明显拖慢。

vite: 启动服务器=> 请求模块时按需动态编译显示。是先启动开发服务器,请求某个模块时再对该模块进行实时编译,因为现代游览器本身支持ES-Module,所以会自动向依赖的Module发出请求。

所以vite就将开发环境下的模块文件作为浏览器的执行文件,而不是像webpack进行打包后交给本地服务器。

分析了webpack和vite的打包方式后,也就明白了为什么vite比webpack打包快,因为它在启动的时候不需要打包,所以不用分析模块与模块之间的依赖关系,不用进行编译。这种方式就类似于我们在使用某个UI框架的时候,可以对其进行按需加载。

热更新方面,效率更高。当改动了某个模块的时候,也只用让浏览器重新请求该模块,不需要像webpack那样将模块以及模块依赖的模块全部编译一次。

以防万一有的同学实在不看官方文档,我先提一嘴,SFC 就是写 Vue 组件的时候写的vue文件,这一个文件就是一个 SFC,全称 Single File Component,也即单文件组件。

在开始说我个人的观点之前,我们先来看几个事实:

一是: Vue3 的定义原生支持 JSX,并且 Vue3 源码中有jsxdts来便于使用 JSX。 不知道同学们看到这里会想到什么, 我的第一反应是: 社区对于 JSX 的需求声音是不小的,所以会反向推动 Vue3 官方对于 JSX 的支持。

二是:AntDesign 的 vue3 版本,基本全部都是用 JSX 开发的,而且 Vue3 现在官方的 babel-jsx 插件就是阿里的人一开始维护的, 虽然我向来不喜欢阿里系的 KPI 推动技术方式,而且现在的 JSX 语法支持也不是很符合我的期望,但至少在使用 JSX 开发是更优秀的选择这点上,我还是很认可 AntDesign 团队的。

OK,说这些呢,主要是先摆出一些事实作为依据,让有些同学可以不需要拿什么:

这些观点来批斗我,首先我都会从客观的角度来分析为什么,至少是我是能讲出优劣势的理由的。

OK,前言差不多到这里,接下来咱给您分析分析,为什么你应该选择 JSX 来开发 Vue。

其实第一点就已经是杀手了,对于想要使用 TypeScript 来开发 Vue3 应用的同学来说,这简直就是 SFC 无法克服的世界难题。

一句话概括: TypeScript 原生支持 JSX 语法,而基本无望 TS 官方能支持 SFC 的 template 语法

TS 毫无疑问在前端社区的重要性越来越大,但凡未来对于代码质量有一定要求的前端团队,都应该会选择使用 TS 来进行开发。 而且现在基本上在 NPM 上都能看到包你都能找到对应的 TS 定义,现在使用 TS 开发成本已经只剩下 你是不是会 TS 语法了 ,在这种情况下是否支持 TS 则是开发模式在未来走不走的远的重要原因。

目前 SFC 只能通过shim让 TS 可以引入vue文件,但是对于所有 SFC 的组件的定义都是一样的:

也就是说你引入的 SFC 组件,TS 是不知道这个组件的 Props 应该接收什么的。所以你无法享受到这些 TS 的优势:

当然你会说既然 Vue 官方能开发处 SFC 的语法,自然会支持这些特性。我表示这当然有可能,但是这个难度是非常大的,需要很多方面的支持,甚至可能需要 TS 官方团队愿意协助, 但是我想不到 TS 官方有什么理由来支持 SFC,因为这只是 Vue 自己创建的方言,在其他场景下是没有使用的,TS 是面向全社区的,我觉得他们不会考虑主动来支持 SFC。

那么有同学要问了,JSX 不也是非原生的 JS 语法么,他怎么就能让 TS 官方支持了呢,是不是 FB 和微硬之间有什么 PY 交易?

这就涉及第二点了,JSX 和静态模板的灵活性区别。

很多人弄错了一个问题,就是觉得 SFC 的模板语法和 JSX 是一样的,都是一种别人发明的语法,并不是 JS 原生的。这是事实,但又有一些区别,这个区别主要是体现在对于 JSX 的认知上。

一句话概括: JSX 并没有扩展 JS 的语法,他只是缩略了 JS 的写法!其本质就是 JS 的语法糖

就像 es6 给增加的语法糖,比如

这种写法并没有扩展 JS 的能力,只是简便了写法,JSX 也是一样的。

JSX 其实就是方法调用,他和 JS 是有一对一对应关系的,我们来看一个例子:

这里的 JSX 语法编译之后其实就是:

而 JSX 就是这些了,没有什么更多的内容,所以说 JSX 只是 方便我们写嵌套的函数调用的语法糖 ,而其本身没有扩展任何其他的内容。

但是 SFC 就不一样了。

SFC 定义的不仅是语法,更是文件。

SFC 的具体定义是 单文件组件 ,它本身就是把一个文件看作一个单位,所以他的约束性是要大很多的,你必须具有固定的文件结构才能使用 SFC,这做了很多的限制:

我们一点点来讲

这个说实话非常非常不方便,很多时候我们写一个页面的时候其实经常会需要把一些小的节点片段拆分到小组件里面进行复用(如果你现在没有这个习惯可能就是因为 SFC 的限制让你习惯了全部写在一个文件内)。

React 生态中丰富的 css-in-js 方案就是很好的例子,我们可以通过:

如果我们这个页面需要使用特定样式的按钮,通过这种方式在页面文件里面封装一下是非常常见的。因为没必要把这个组件拆分出去,他也不是一个可复用的组件,拆分出去了还要多一次import。

Vue 生态基本没有 css-in-js 的成熟方案其实跟这个限制也很有关系。

再来一个例子,比如我们封装了一个 Input 组件,我们希望同时导出 Password 组件和 Textarea 组件来方便用户根据实际需求使用,而这两个组件本身内部就是用的 Input 组件,只是定制了一些 props:

在 JSX 中可以非常简单地实现,但是如果通过 SFC,你可能就要强行拆成三个文件,另外为了方便,你可能还要增加一个indexjs来导出这三个组件,你能想象这多了多少工作量么。

我不知道有多少同学看过 Vue 的 template 编译出来之后的代码,以我的经验来说看过的可能不会超过 50%(乐观估计),建议同学们如果还不了解的,可以去尝试看一下。

为什么要看这个呢?因为你看了之后你会发现,你在 template 里面写的类似 HTMl 的内容,其实跟 HTML 根本没啥关系,他们也会被编译成类似 JSX 编译出来的结果。

类似这样的结果,而这里面h函数调用的结果就是一个 VNode,是 Vue 中的节点的基础单元。那么既然这些单元就是一个对象,其实理所当然的,他们是可以作为参数传递的。 也就是说,理论上他们是可以通过props把节点当作参数传递给其他组件的。

这个做法在 React 中非常常见,叫做renderProps,并且其非常灵活:

但是因为 SFC 模板的限制,我们很难在 SFC 里面的 props 上写节点:

这样写是不行的,因为 SFC 定义了:header绑定接受的只能是 js 表达式,而 显然不是。

因为通过 props 传递不行,所以 Vue 才发明了 slot 插槽的概念

虽然我们一直再说 Vue 简单,但是事实上ScopedSlots一度成为新手理解 Vue 的噩梦,很多同学都被这个绕来绕去的作用域整的死去活来。

我们看一个ScopedSlots的例子:

这里ctx是Comp里面的属性,通过这种方式传递出来,让我们在当前组件可以调用父组件里面的属性。这简直就是理解的噩梦,但是如果用 JSX 实现类似功能就非常简单:

我们只是给一个叫做scope的 props 传递来一个函数,这个函数接受一个name属性,在Comp里面会调用这个函数并传入name。 简单来说我们传入的就是一个构建节点片段的函数,就是这么简单。

这就是因为 SFC 的模板的限制,导致灵活性不足,Vue 需要去创造概念,创造关键字来抹平这些能力的不足,而创造的概念自然就引入了学习成本。

所以其实我一直不认可 Vue 比 React 好学的说法的,如果你真的认真研究所有用法,并且总是尝试用最合理的方式实现功能,那么 Vue 绝对不会比 React 简单。

这个体现在两个方面,一个是我们定义在全局的一些固定数据如果要在组件内使用的话,就要通过this挂载到组件上。

比如我们缓存了一份城市数据,这种数据基本上是不会改的,所以也没必要挂载到组件上让其能够响应式。但是在 SFC 里面这是做不到的, 因为模板的执行上下文是在编译时绑定。你在模板里面访问的变量,都会在编译时自动绑定到this上,因为模板需要编译,其本身也是字符串不具有作用域的概念。

而这在 JSX 中则不复存在:

另外一个方面则是在组件使用上,在 SFC 中,组件必须事先注册,因为我们在模板里面写的只能是字符串而不能是具体某个组件变量。 那么模板中的组件和真实的组件对象只能通过字符串匹配来实现绑定。这带来了以下问题:

在 JSX 中则没有这些问题,因为 JSX 里面直接使用组件引用作为参数:

其实上面能看出来,除了 SFC 本身的问题之外,Vue 使用字符串模板也会带来很多的灵活性问题。 最直接的证据,就是 Vue 使用了directive来扩展功能(当然这不是 Vue 发明的,老早的模板引擎就有类似问题)。

为什么说directive是不得已的选择呢?因为静态模板缺失逻辑处理的能力。我们拿列表循环举例,在 JS 中我们可以非常方便地通过map函数来创建列表:

而因为 JSX 本身就是函数调用,所以上面的代码和 JSX 结合起来也非常自然:

上面的例子对应到 JS 如下:

这仍然是因为 JSX 只是 JS 的语法糖的原因,所有能在 JS 中实现的在 JSX 里面都能实现。

而 SFC 的模板是基于字符串编译的,其本身就是一段字符串,我们不能直接在模板里面写map来循环节点,(当然我们可以在可以接收表达式的地方写,比如v-on里面)。

那么我们不能循环节点,有需要这样的功能来渲染列表,怎么办呢?就是发明一个标志来告诉编译器这里需要循环,在 Vue 中的体现就是v-for指令。

同学们可能要问了,既然 Vue 能实现v-for,为什么不直接实现表达式循环列表呢?他当然也可以实现,但是他肯定不会这么选,因为成本太高了。 他要这么做就相当于他要实现一个 JS 引擎,而其实里面很多内容又是不必须的,一个v-for其实就能够适用大部分情况了。

但有了v-for就需要v-if,那么后面还会需要其他各种能力,这就是一种方言的产生和发展的过程。

当然指令也不仅仅是 JS 表达式的代替品,其本身也是增加了一些其他能力的,比如它能够让我们更方便地访问 DOM 节点, 但是嘛,我们用框架的理由不就是为了能够尽可能的屏蔽 DOM *** 作嘛

以上就是我对应该选择使用 JSX 还是 SFC 进行开发的分析,其实归根到底 SFC 的问题在于其没有拥抱 JS, 他的语法是自己发明的,他需要有一个 JS 实现的 compiler 来让其最终能在 JS 环境中运行,这本质上就是一种发明, 我们不能否认发明确实有优点,但我们也不能只看有点不看问题,没能拥抱 JS 自然就很难完全复用 JS 社区的优势 而 JS 社区一直在蓬勃发展,好用的工具一直在涌现, 而 SFC 想要使用 JS 社区的这些工具还要自己再实现一份 ,我们可以细数以下 SFC 做了哪些兼容

基本上常用的工具我们都需要等待 Vue 社区或者官方开发了插件之后才能运行。而 JSX 因为有 babel 和 typescript 的官方支持, 基本上所有新的 JS 生态工具原生都是支持的。

在这 Vue3 开始预备发力的阶段,我们还是希望 Vue 社区能够使用更优秀更规范的方式来进行开发, 其实如果我们直接使用 JSX 开发 Vue3,我们会发现很多时候我们都不需要用到emit、attrs这些概念, 甚至如果 Vue3 的 JSX 插件支持,我们甚至能够抛弃slots。

但是因为 Vue3 一定要考虑兼容 Vue2,导致本身潜力很好的 Vue3 总是显得缩手缩脚,这不得不说是一种遗憾。

每个前端开发人员都听说过三个用于构建 Web 应用程序的框架:React、Vuejs和Angular。

React 是一个 UI 库,Angular 是一个成熟的前端框架,而 Vuejs 是一个渐进式框架。

它们几乎可以互换使用来构建前端应用程序,但它们并非 100% 相同,因此比较它们并了解它们的差异是有意义的。

每个框架都是基于组件的,并允许快速创建 UI 功能。

然而,它们都有不同的结构和架构——所以首先,我们将研究它们的架构差异以了解它们背 后的哲学。

React 不强制执行特定的项目结构,正如您从下面的官方“Hello World”示例中看到的那样,您只需几行代码即可开始使用 React。

React 可以用作 UI 库来渲染元素,而无需强制执行特定的项目结构,这就是它不是严格意义上的框架的原因。

React Elements是 React 应用程序的最小构建块。它们比 DOM 元素更强大,因为 React DOM 确保在发生变化时有效地更新它们。

组件是更大的构建块,定义了在整个应用程序中使用的独立且可重用的部分。它们接受称为 props 的输入并生成元素,然后显示给用户。

React 基于 JavaScript,但它主要与JSX (JavaScript XML)结合,这是一种语法扩展,允许您创建同时包含 HTML 和 JavaScript 的元素。

您使用 JSX 创建的任何内容也可以使用 React JavaScript API 创建,但大多数开发人员更喜欢 JSX,因为它更直观。

Vuejs 核心库只关注视图层。之所以称为渐进式框架,是因为您可以使用官方和第三方包(例如Vue Router或Vuex )扩展其功能,将其转变为实际框架。

虽然 Vue 与 MVVM(Model-View-ViewModel)模式没有严格关联,但它的设计部分受到了它的启发。使用 Vue,您将主要在 ViewModel 层上工作,以确保以允许框架呈现最新视图的方式处理应用程序数据。

Vue 的模板语法让您可以创建 View 组件,并将熟悉的 HTML 与特殊指令和功能相结合。这种模板语法是首选,即使原始 JavaScript 和 JSX 也受支持。

Vue 中的组件很小,是自包含的,并且可以在整个应用程序中重复使用。带有扩展名的单文件组件(SFC)vue包含 HTML、CSS 和 JavaScript,因此所有相关代码都位于一个文件中。

SFC 是在 Vuejs 项目中组织代码的推荐方式,尤其是大型项目。需要使用 Webpack 或 Browserify 等工具将 SFC 转换为可用的 JavaScript 代码。

在本文中,我讨论的是 Angular 2,而不是现在称为 AngularJS 的框架的第一个版本。

AngularJS,原始框架,是一个MVC(模型-视图-控制器)框架。但是在Angular 2 中,与 MV-patterns 没有严格的关联,因为它也是基于组件的。

Angular 中的项目被组织成模块、组件和服务。每个 Angular 应用程序至少有一个根组件和一个根模块。

Angular 中的每个组件都包含一个模板、一个定义应用程序逻辑的类和元数据(装饰器)。组件的元数据告诉 Angular 在哪里可以找到创建和呈现其视图所需的构建块。

Angular 模板是用 HTML 编写的,但也可以包含带有特殊指令的Angular 模板语法,以输出反应性数据和呈现多个元素等。

组件使用 Angular 中的服务来委托业务逻辑任务,例如获取数据或验证输入。它们是 Angular 应用程序的独特部分。虽然 Angular 不强制使用它们,但强烈建议将应用程序构建为一组可以重用的不同服务。

Angular 内置于 TypeScript 中,因此建议使用它以获得最无缝的体验,但也支持纯 JavaScript。

React 是最受欢迎的 JavaScript 项目之一,在 GitHub 上拥有 16 万颗星。它由 Facebook 开发和维护,并在他们的许多项目内部使用。此外,根据BuiltWith的使用统计数据,它为超过 200 万个网站提供支持。

在三个框架中,Vue在 GitHub上的 star 数最多,有 176k。该项目由前 Google 员工 Evan You 开发和领导。据BuiltWith 称,这是开源社区中一个非常强大的独立项目,被超过 100 万个网站使用。

Angular 是由 Google 开发的,但令人惊讶的是它并没有用于他们的一些旗舰产品,例如搜索或 Youtube。它经常用于企业项目,并基于BuiltWith的数据为超过 97,000 个网站提供支持。

它是三个框架中星数最少的,在 GitHub 上有 68k 星。然而,当从 Angular 1 切换到 Angular 2 时,他们创建了一个全新的代码库,而不是继续AngularJS项目,该项目也有 59k 星。

在开发应用程序时,开源包可以为您节省宝贵的时间。不仅如此,它们通常比定制组件和封装更好,因为它们经过了实战测试。

查看可帮助您更轻松地创建新功能的现成组件、主题和其他工具的可用性非常重要。

许多前端应用程序依赖全局状态管理来存储信息,例如谁登录和其他用户设置。

最流行的 JavaScript 状态管理项目是Redux。大多数开发人员使用Redux的官方 React 绑定,这些绑定由 Redux 团队维护。

由于 React 的流行,查找输入组件和现成的元素非常容易。它们都只是在 Google 或 GitHub 上搜索即可。

React 生态系统还包括React Native,它允许您从用 React 编写的单个代码库构建原生 iOS 和 Android 应用程序。因此,React 也可以成为使用 Web 技术构建移动应用程序的绝佳选择。

React 是 MERN 堆栈的一部分,其中包含 MongoDB、ExpressJS、React 和 NodeJS。这种组合的伟大之处在于,单一语言——JavaScript——为整个应用程序提供动力。

尽管 Redux 可以在 Vue 中使用,但没有官方绑定。但这不应该让您担心,因为Vuex是专门为 Vue 应用程序制作的官方状态管理库。除了与 Vue 很好地集成之外,使用 Vue 的开发人员工具进行调试也很容易。

在 Vue 的早期,很难找到现成的组件。随着社区的发展,您可以使用各种输入组件和高级元素来加快开发速度。

对于移动应用程序开发,有一个名为Weex 的新兴项目。Weex 由阿里巴巴开发和使用,但不如 React Native 成熟和强大。更重要的是,由于该项目在中国开发和使用较多,因此很难找到英文文档和解决问题的方法。

Vue 与 Laravel 集成得很好,这就是为什么它们经常一起使用。Laravel 提供完整的JavaScript 和 CSS 脚手架,以支持在新项目中使用 Vue。

对于 Angular 中的状态管理,您可以使用NgRx项目。它的灵感来自 Redux,但它是专门为 Angular 创建的。

与 Vue 和 React 的情况一样,您可以将许多现成的组件导入到您的项目中。与 Angular 略有不同的是,Angular Material项目中有许多官方组件。这是 Google 的一个官方项目,为 Angular 应用程序提供 Material Design 组件。

您可以使用NativeScript在 Angular 中构建跨平台移动应用程序。它也支持 Vue,但 Angular 支持更成熟。

Angular 是著名的 MEAN 堆栈的一部分,它将 Angular 与 MongoDB、ExpressJS 和 NodeJS 相结合。与 MERN 堆栈类似,它的前端和后端都完全依赖 JavaScript。

Angular、React 和 Vue 都可用于开发渐进式 Web 应用程序,也称为 PWA。

PWA 不是移动应用程序,而是 Web 应用程序,智能手机用户可以将其添加为主屏幕的快捷方式,并提供类似于原生移动应用程序的外观和感觉。

您还可以为每个框架找到高级模板和预制应用程序,但 Angular 和 React 比 Vue 提供更多高级选项。

在选择框架或库时,您还需要考虑性能。

在许多情况下,您不必担心性能,尤其是在构建小型项目时。然而,项目的范围和复杂性越大,性能就会(并且将会)成为一个问题。

重要的是要注意,在 Web 性能方面,开发质量和遵循最佳实践比框架的选择更重要。

但由于存在一些性能指标和差异,我将研究它们并解释每个指标如何影响您的开发工作。

JS 框架基准测试的结果表明,它们在大多数基准测试中都表现得相当好,例如在表中创建或附加行。

正如你在上面看到的,Vue 在选择行时比 Angular 和 React 慢得多。另一方面,Angular 和 React 在交换行方面效率不高。

这些是渲染基准中唯一的实质性差异 - 在大多数情况下,不会产生明显的结果。由于选择行是比交换行更常见的功能,我想说这个基准测试将 Vue 排在第三位,仅次于 Angular 和 React 并列第一。

在内存和启动时间方面,React 和 Vue 得分很好,但 Angular 稍慢。Angular 启动一个基本脚本可能需要 150 毫秒,并且需要更多内存才能运行。

谷歌 Chrome 实验室的Perf Track显示了来自数千个网站的生产数据。这些统计数据受许多其他因素的影响,而不仅仅是选择的框架,让我们看看数字。

与 Angular 相比,Vue 和 React 网站在这个指标上的排名更高,Angular 需要更多时间来启动并向用户呈现内容。

在渲染完整页面的三个框架中,Angular 也是最慢的,只有 27% 的 Angular 网站得分在可接受的范围内。

对于所有三个框架,超过 80% 的网站都在第一次输入延迟的可接受范围内,这显示了用户可以与页面交互所需的时间。

迄今为止,最轻量级的应用程序是使用 Vue 开发的应用程序,68% 的 Vue 应用程序加载的 JavaScript 不到 1MB。另一方面,Angular 和 React 应用程序往往具有更大的代码大小。

您可以从这些数字中看到趋势,但您不应该太快得出结论。例如,对于最后一张图,可以解释为 Vue 用于开发更轻量级的应用程序,而 Angular 用于更大的项目。

统计数据可以帮助指导您做出正确的决定,但您不能使用它们来证明一个框架比另一个更快或更好。

对于更高级的应用程序,使用的前端框架应该能够执行一些提高性能并且可以更好地扩展的任务。

两项关键技术是服务器端渲染 (SSR) 和虚拟化。

React 支持使用官方ReactDOMServer包进行服务器端渲染。对于虚拟化,您可以使用名为React Virtualized的流行第三方工具。

Vue 中也支持服务器端渲染以及官方的SSR 包。此外,您还可以使用基于 Vue 构建并支持 SSR的Nuxtjs框架。

不幸的是,Vue 中的虚拟化选项并不是那么强大。在我看来,Vue Virtual Scroll List是虚拟滚动的最佳解决方案,但它有点问题,不如 React 和 Angular 的选项稳定。

Angular 拥有SSR的官方Angular Universal包,以及用于虚拟滚动和高效渲染大型列表的官方组件。

学习这些框架有多容易?

要回答这个问题,我们需要查看每个框架的复杂性及其引入的概念。

在最基本的用例中,React 是三个框架中最不复杂的。那是因为你只需要导入库,然后你就可以用几行代码开始编写你的 React 应用程序。

但是除了 Hello World 示例之外,大多数 React 应用程序都是基于组件的,而不仅仅是在页面上呈现一些元素。

一些开发人员对 React 感到奇怪或困难的一件事是,学习 JSX 是一条单行道。您也可以使用原始 JavaScript,但由于大多数 React 开发人员使用 JSX,学习它几乎是不可避免的。

这是使 React 的学习曲线变得更陡峭的主要因素,但除此之外,对于了解 JavaScript 并理解 Web 开发概念的开发人员来说,它是一个易于学习的库。

Vue 的设置比 React 稍微复杂一些。你可以将它用作一个库来定义你可以在整个 HTML 中使用的组件——但与 React 类似,这不是大多数项目的构建方式。

大多数 Vue 项目都有一个命名的根组件Appvue和一些用于显示各种内容的子组件。

说到语法,你唯一需要学习的新东西就是 Vue 的模板语法,如果你了解 HTML,这很容易掌握。基本的指令,如v-if和v-for有条件的渲染和列表的渲染,很容易理解即使是初学者。

此外,Vue 的单文件组件将所有前端代码保存在一个地方,便于组织新项目。

在我看来,Vue 是最容易学习的,因为它的简单和直观的语法。

Angular 拥有三者中最复杂的项目结构,而且由于它是一个成熟的前端框架,因此它依赖的概念更多。

除了组件,Angular 还支持模块和服务。它希望您以特定的方式编写和设计代码库,从而使您的项目在扩展时更易于维护。

至于语法,由于 Angular 最适合与 TypeScript 配合使用,因此在构建 Angular 项目时了解 TypeScript 非常重要。

与 Vue 一样,您还必须熟悉类似 HTML 的语法,以便您可以开始使用 Angular 编写新的 UI 功能。

在我看来,Angular 对于普通开发者来说是最难学的,因为它更复杂并且依赖于 TypeScript。

许多开源项目和框架逐渐被遗忘并无人维护。您是否应该担心我们在这里讨论的任何框架?

尽管我们无法完全预测会发生什么,但正在进行的开发工作是这些项目 健康 状况的良好指标。人气和增长也是预测项目寿命的重要指标,所以让我们来看看每个框架。

React v170已经发布,但令人惊讶的是,它没有为开发人员提供任何新功能。

主要的变化是这个新版本可以更容易地升级 React 本身。您可以将 React 的某些部分从旧版本升级到新版本,而无需升级整个项目。

如果您的应用程序依赖于随新版本更改或弃用的功能,您可以保留旧版本以保持此功能有效。此更新使 React 成为一个很好的长期选择,因为它可以更轻松地与新版本保持同步。

React 的每周 npm 下载量自去年以来增长了 44% 。从绝对数量来看,它仍然是三个项目中下载量最大的。

Vue 3 已于2020 年 9 月发布,它解决了 Vue 2 在大型项目中存在的许多严重问题。它引入了受React Hooks启发的Composition API,可以更轻松地跨组件重用逻辑。

整个项目用 TypeScript 重写,提高了新 Vue 项目对 TypeScript 的支持,同时也使项目更易于维护。

Vue 3 是一个急需的升级,使 Vue 更适合大型项目。

Vue 的每周下载量自去年以来增长了 87%,使 Vue 成为相对而言增长最快的框架。如果 Vue 能够保持这种增长速度,那么它肯定会很快超过 Angular。

Angular 最近推出了Ivy 编译器。它减少了构建时间,优化了资产,允许更快的测试,并总体上改善了开发人员的体验。

Angular 团队每年发布两次重大更新,其中可能包含新功能,或者只是让框架跟上新浏览器版本的速度。

自去年以来,Angular 的每周下载量增长了约 50% ,因此它仍然是一个受欢迎的项目。

Angular、React 和 Vue 都处于非常活跃的开发阶段。他们定期发布新版本并维护现有版本。由于在每种情况下当前的支持水平都很高,因此您可以安全地使用这些框架中的任何一个。

需要注意的是,Angular 的增长没有以前那么快,而 Vue—— 尽管它是最近开始的——似乎增长了很多。

如前所述,我们无法预测哪些框架会长期保持相关性,但每个项目背后都有一个伟大的社区,并且在不断发展。

我这篇文章的目标是解释架构差异,分解每个框架的优点和缺点,并在适用的地方进行比较。

在进入一个新框架之前,有几件事情需要考虑。

首先,在选择新技术时,您团队的经验可能是一个决定性因素。

同样,您必须考虑您所在地区可用的人才,以便您可以为您的项目聘请开发人员。

最后,当涉及到项目本身时,复杂性和范围也会影响您对框架的选择。

通过考虑所有关键差异,我希望您可以决定哪个是最适合您的目标和需求的前端框架。

(本文由闻数起舞翻译自Aris Pattakos的文章《Angular vs React vs Vue 2021》,转载请注明出处,原文链接:>

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10771084.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存