vuecli集成webpack-【前端讲堂】基于Vue的前端分离实践

2023-08-29 0 4,144 百度已收录

目前主流框架都是使用功能到状态的映射来操作DOM,而DOM状态只是数据状态的映射。 我们只需要将逻辑放在状态级别即可。 当状态发生变化时,视图会借助框架手动更新到需要的状态,从而避免了传统的 DOM 在检测到数据变化后自动操作的情况。

那么Vue是如何运行的呢? Vue 提供了句子模板,Vue 编译器会将编写好的模板编译成渲染函数。 当该函数被调用时,会渲染并返回一棵虚拟DOM树,然后该虚拟DOM会被Vue引擎的patch函数进行改造。 树映射到真实的 DOM。 在这个过程中,Vue的响应式检测系统会检测渲染过程所依赖的数据源,从而准确感知数据源的变化。 当数据发生变化时vuecli集成webpack,会通知重新渲染并生成新的虚拟DOM树。 Vue引擎会比较新树和旧树,得到最小的变化来操作DOM,实现局部刷新,减少操作资源,提高性能效率。 下图展示了Vue如何执行上述操作的示例图:

2. 状态管理

在开发小型项目时,自动维护数据状态是不可想象的。 首先,多层嵌套组件中数据传递参数非常复杂vuecli集成webpack,与兄弟组件传递参数无关。 另外,我们经常使用父子组件的多个副本来直接引用或者通过storm来改变和同步状态。 这种开发模式非常脆弱,通常会导致代码难以维护。 因此,Vue官方借鉴了Flux、Redux和The Elm Architecture的思想,提供了一个集中式存储管理插件——Vuex,用于为Vue.js应用提供状态管理模式。 同时Vue官方Devtools支持查看Vuex Variety的数据状态。 下图是Vue组件与Vuex结合使用的模式图:

图中所示的State、Mutations、Actions是Vuex的核心。 接下来我们简单介绍一下这三个概念:

(1) 状态

Vuex 使用单个状态树来包含所有应用程序级状态。 每个应用程序只包含一个存储实例,开发人员可以从存储实例中读取数据的状态。 简单理解就是store是我们获取vuex其他属性的唯一句柄。

上面的代码片段表明,vuex中的数据状态一般是在Vue组件中获取的。 通过获取估计属性中的状态,每当数据状态 store.state.count 发生变化时,计算属性就会被重新估计并触发关联 DOM 的更新。

(2)突变

在 Vuex 中,更改数据状态的唯一方法是提交突变。 突变与风暴非常相似。 每个突变都有一个风暴类型和一个回调函数。 回调函数的第一个参数是状态,所以我们可以在回调函数中进行。 状态改变:

(3) 行动

Action可以理解为动作。 一般在Action中进行异步操作(如:获取数据),提交Mutation。 该操作接受存储的上下文信息的上下文对象,以便可以调用该上下文来提交突变。

实践中,我们一般会使用ES2015参数重构来简化代码,尤其是需要多次调用commit的时候:

3. 组件系统

Vue组件系统与其他主流框架组件化道路的核心思想一致,都是将UI结构映射到合适的组件树上,如下图所示:

通过组件,我们可以更好地定义UI界面,有利于代码复用和团队协作。 在Vue中,父组件与子组件通过双向传递props进行通信,子组件可以通过emit向父组件触发风暴,这就形成了Vue的基本兄弟通信模式。

在实际开发实践中,我们一般将组件分为几类:

(1) 全局组件

全局组件——全局组件,顾名思义,广泛应用于系统的各个部分,比如导航栏组件、弹出框组件等。这些组件的特点是嵌套在根组件中,并且不属于某个View。 与vuex结合使用时,state中的一个模块应该单独使用。 该状态的数据专门用于控制全局组件的逻辑操作,不应与其他业务模块混合。 如果其他组件想要改变全局组件,可以使用提交突变来操作。

(2)简单的组件

Simple组件——简单组件,属于Vue的传统组件,一般不涉及太多的交互和数据,只起到简单显示和拆分父组件的作用。 此类组件通常使用 props 传递数据,emit 触发storm传递给父组件。

(3)复杂组件

复杂组件——复杂组件通常包含大量交互逻辑,显示数据庞大且复杂,并且可能需要直接访问API接口。 对于这些组件,建议使用vuex的组合进行通信,跳过父组件,直接在组件内部分发Mutation。 因为,使用道具和发射必然会带来无法维持的黑洞。

4. 路由

相信大家对路由都很熟悉了。 当制作一个界面特别复杂的应用程序时,会涉及到很多页面。 手动管理页面实际上已经过时了。 因此,需要一个路由工具来映射URL和组件树,并以声明方式对应这种关系。

当然,类似上图的路由关系,我们可以通过hash来模拟生成简单的路由。 但实际上,客户端路由涉及到更复杂的问题,Vue官方为开发者提供了一个强大的客户端路由插件:vue-router,它可以做比路由更强大的功能,如下:

· 嵌套路由

· 命名路线

· 多个扁平布线插座

· 复杂的匹配规则

· 跳跃动画

· 跳转规则限制

· 滚动条行为

· 延迟加载

· 重定向/别名

等等,如果以上功能都自己搭配的话,无疑会带来更高的复杂度。

我们的解决方案

1. 前端架构

公有云产品群涉及的后端工程类型大致可以分为两种:1、门户展示和产品购买。 2.产品控制台、用户中心。 这两类项目之间存在明显的区别。 门户类是对外展示的主体,涉及展示页面较多,对SEO要求特别高; 控制台产品属于私有数据,不需要向搜索引擎开放。 针对这两种场景,我们采用了两种解决方案:

(1) SPA

SPA的全称是Single Page Application,即单页面应用程序。 目前主流框架Angular、Vue等都默认提供SPA的形式。 该方法有几个显着的特点:

1. 所有页面都呈现在一个网页中。

2、通过Ajax与后台进行数据交互。

3. 具备良好的分层理念和前端工程能力。

我们可以通过Vue Cli脚手架工具快速生成SPA项目:

通过前面的命令,我们就可以启动一个基于Vue的SPA项目了。 当然,我们在官方的CLI生成项目中做了一些改造,简单列表如下:

1.集成Vuex、Vue路由器。

2、集成store2库作为存储操作库。

3.集成axios作为Ajax基础工具库。

4.引入scss作为css预编译语言。

5. 集成Element UI,集成自定义主题。

6. 集成Echarts。

7. 集成超棒的字体图标库。

8、编写常用操作库文件和自动部署脚本。

除了前面的8项之外,我们还集成了其他一些常用的组件库。 对于这些 SPA 框架,我们将其用于控制​​台项目。

(2) SSR

SSR的整个流程就是Server Side Render,服务端渲染。 刚才我们也提到,门户网站对于SEO的要求更高。 SPA已经不适合这样的场景了。 原因很简单,因为SPA的所有页面都是通过JS动态渲染的,数据也是异步的。 页面代码。 虽然个别搜索引擎可以支持抓取异步数据,但国外主流搜索引擎仍然不支持。 因此,必须采用一种技术,让搜索引擎通过URL加载整个页面后获取样式。 SSR是官方推荐的解决方案。 其优点如下:

· 更好的搜索引擎优化,因为搜索引擎爬虫可以直接查看完全渲染的页面。

· 更快地获取内容,特别是对于慢速网络条件或运行缓慢的设备。 在显示服务器渲染的标记之前无需等待所有 JavaScript 下载并执行,因此您的用户将更快地看到完全渲染的页面。 通常会带来更好的用户体验,对于这些内容时间与转换直接相关的应用程序,服务器端渲染 (SSR) 至关重要。

当然,在采用SSR之前必须有一个权衡,因为SSR会带来更多的服务器端负载。 SSR需要在服务器端启动一个基于Node的服务器。 与SPA的静态页面相比,无疑需要占用更多的显存和计算资源。 因此,对于比较简单的SEO,我们推荐使用webpack的预渲染技术来实现,这样成本也比较小。

Vue官方提供了一套服务端渲染解决方案。 具体来说就是引入了vue-server-renderer插件,然后结合webpack和express server来达到SSR的目的。 不过官方的解决方案复杂度比较高,实际编写代码的复杂度也有一定程度的增加。 对于缺乏经验的新手,我们这里不建议使用官方解决方案,而是使用第三方框架:Nuxt.js。

Nuxt.js 特别容易使用。 它是基于最新的Vue版本进行封装的,所以兼容所有Vue句型,并且集成了Vue全家桶,所以可以开箱即用。 而且,Nuxt.js提供了一个快速的项目模板,只需几个命令,就可以生成一个项目:

在我们的门户应用中,我们也基于这个框架进行深度定制。

2.API网段

前后端分离后,相比原来的前后端一体化开发模式,现在前端通过API与前端交互,而现在的后端API是一般以微服务的形式提供。 使用微服务创建整个API服务时,一般会运行很多不同职责的应用程序,这些应用程序会需要一些通用的功能,比如信令、流控、监控、日志统计等。在传统的单体应用程序中,这些函数通常嵌入到应用程序中并作为组件运行。 然而,在微服务模式下,可能存在数十甚至数百个不同类型的独立运行的应用程序。 继续使用这些方法将导致非常高的管理和出版成本。 因此,需要使用API​​网段。 API网段的职责大致可以分为两类:

1. 对服务应用程序敏感且重要的功能,例如信令。

2. 不感知服务应用的边缘服务,例如流量控制、监控、页面级缓存等。

因此,在前后端分离的同时,我们也开始了API网段技术的开发。 目前我们使用Netflix的zuul架构来构建我们的网段,并结合当前的CAS来做服务信令,基本可以保证当前的需求。 当然我们也结合Haproxy、nginx等来为我们的前端应用设计负载均衡和高可用。 由于篇幅限制,我们这里就不展开了。

概括

在这篇文章中,我们介绍了Vue框架,并与其他主流框架进行了简单的比较。 然后针对两种不同类型的应用,介绍两种不同的后端架构方案,最后简单介绍一种API网段匹配方案。 以上是公有云产品组前端分离解决方案的第一个版本。 明年我们将继续推进旧系统的前端分离和改造,结合容器、自动化运维等技术进一步推广目前的解决方案。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 webpack vuecli集成webpack-【前端讲堂】基于Vue的前端分离实践 https://www.wkzy.net/game/178187.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务