精华内容
下载资源
问答
  • 课程的主要方向涵盖JavaScript,QA测试工程师,NodeJS,前端工程化和性能优化,CSS和MV系列框架解读,前端跨界和非常难得的基于前端开发的数据结构与算法,前端图形学和设计模式与网络安全等前端高级开发技术。
  • 前端架构师必看.png

    2020-07-23 05:13:22
    前端架构师的思维导图,从基础到高级,有vue,面试题分析,实战,nodejs等一系列的专题,围绕着前端架构来展开
  • 阿里巴巴高级前端技术专家 张克军分享什么是微前端、它的价值、完备的微前端架构包括哪些环节、需要解决的问题等.
  • 前端技术已经不是鲜见的名词了,大前端的目的在将前端技术进行汇总,进行架构化的系统工作,可以更加系统化的进行工作。课程内容非常的庞大,不同的技术点和课程都进行了细化的拆分,课程的容量更是超过了2000集,...
  • 前端的入门书籍已经很多了,从《JavaScript 高级程序设计》到《精通 CSS:高级 Web 标准解决方案》 前端的框架书籍已经很多了,从《深入浅出 Node.js》(笑~)到《JavaScript 框架设计》 所以,两年前当我想总结我...

     

     

    前端的入门书籍已经很多了,从《JavaScript 高级程序设计》到《精通 CSS:高级 Web 标准解决方案》

    前端的框架书籍已经很多了,从《深入浅出 Node.js》(笑~)到《JavaScript 框架设计》

    所以,两年前当我想总结我的前端相关经验时,已经找不到一个合适的话题,所以我就写了那本开源的电子书《我的职业是前端工程师》。

     

    可直到 2017 年底,我开始接触一系列的复杂前端应用时——多个系统集成,又或者是多团队并行开发,大量代码应用时等。我才发现:在前端领域,缺少这样的一本书,来告诉开发人员怎么去做前端架构。

    • 我找到了那本《企业级 Web 开发》,它虽然是一本前端相关的书籍,但是是几年前的技术栈了(非 MVP 型框架应用),几乎不包含前端架构的相关问题。哪怕是前后端分离架构,也没有一个有效的指导方案。
    • 我找到了那本《前端架构设计》,它的英文标题是《Frontend Architecture for Design Systems》,顾名思义是用于设计系统的前端架构,书中的四个核心是:代码、工作流、测试、文档。看上去,内容仍然是上一个 10 年的框架方案。

    所以,我不得开始思考着,怎么去做好前端架构。直到,我经过了一个又一个的项目,总结了一个又一个的架构模式,便有了:

     

     

    这本书能帮你做些什么?

    • 学习。帮你构建前端知识、架构体系,成为一个全功能型工程师。
    • 装逼。这就是后端工程师不懂的前端架构。
    • 治 “病”。垫在显示器下面,可以帮你改善颈椎,治疗颈椎病。

    哈哈,这本书能帮你做些什么?

     

    展开全文
  • web前端开发入门视频教程 前端架构师课程

    万次阅读 多人点赞 2019-05-05 21:18:03
    web前端架构师,其实就是高级开发的代名词。因为架构是一个整体,没有孤立的前端与后端。如果一定要这么分,就说明你的工作在这个单位的任务倾向和内容就是那么点玩意儿,而这又有多少呢?页面开发以及相关的那么点...

    web前端架构师,其实就是高级开发的代名词。因为架构是一个整体,没有孤立的前端与后端。如果一定要这么分,就说明你的工作在这个单位的任务倾向和内容就是那么点玩意儿,而这又有多少呢?页面开发以及相关的那么点玩意儿。这点东西对技术的要求与对一个真正web前端架构师的要求相比,太局部了,太趋近于开发。所以这种程度的所谓web前端架构师,任何一个称职的高级程序员都可以担任。

    web前端软件工程师月薪多少?
    大概统计,web前端不同阶段薪资待遇如下
    工作1~2年后通常会成为Web前端高级软件工程师,年薪可以达到15万以上;
    工作3-5年后通常可以成为Web前端技术主管或者经理,年薪在15-50万之间;
    工作年限5年以上,通常会成为互联网公司的技术总监或产品经理,年薪将达到50万以上。
    当然,能否做到高一级的职位,要靠你自己的努力。

    web前端软件工程师都学什么?
    【web前端课程内容】
    1.第一节:es6详解
    2.第二节:面向对象与闭包
    3.第三节:正则表达式与JSON对象及node介绍
    4.第四节:node.js基础结构和数据处理
    5.第五节:node.js处理post文件数据,ajax跨域
    6.第六节:数据通信,fetch,ajax2.0和websocket
    7.第七章:数据库
    8.第八节:node.js原生收尾
    9.第九节:Express
    10.第十节:KOA
    11.第十一节:KOA的服务端渲染
    12.第十二节:nodejs项目
    13.第十三节:版本控制
    14.第十四节:gulp
    15.第十五节:webpack
    16.vue
    17.vue项目
    18.React
    19.React首尾和Angular
    20.微信公众号的开发
    21.微信小程序
    22.React-native
    23.混合应用收尾
    24.性能优化与安全

    【web前端教程百度盘下载地址】
    http://www.xuexiluxian.net/web-jiagou.html

    展开全文
  • 阿里巴巴高级前端技术专家分享什么是微前端、它的价值、完备的微前端架构包括哪些环节、需要解决的问题。。
  • 前端跳槽必备 揭秘一线互联网公司高级前端JavaScript面试
  • 整洁前端架构

    千次阅读 2019-04-22 19:17:04
    前端的恶梦 在我最近的一个项目里,我使用了 Angular 和混合应用技术编写了一个实时聊天应用。为了方便这个应用直接修改,无缝地嵌入到其它应用程序中。我尽量减少了 Component 和 Service 的数量——然而,由于交互...

    Clean MVP 组件化

    Clean Frontend

    前端的恶梦

    在我最近的一个项目里,我使用了 Angular 和混合应用技术编写了一个实时聊天应用。为了方便这个应用直接修改,无缝地嵌入到其它应用程序中。我尽量减少了 Component 和 Service 的数量——然而,由于交互复杂 Component 的数量也不能减少。随后,当我们完成了这个项目的时候,主的组件的代码差不多有 1000 行。这差不多是一个复杂的应用的代码数。在我试图多次去重构代码时,我发现这并不是一件容易的事:太多的交互。导致了 UI 层的代码,很难被抽取出去。只是呢,我还能做的事情是将一些业务逻辑抽取出来,只是怎么去抽取了——这成了我的一个疑惑。

    MVP 嘛,逻辑不都是放到 Presenter 里,还有其它的招吗?

    AVR is evil

    Angular、Vue 和 React 都是一些不错的框架,但是它们都是恶魔——因为我们绑定了框架。尽管我们可以很快地从一个 React 的框架,迁移应用到其它类 React 框架,诸如 Preact;我们可以从一个类似于 Vue 的框架,迁移应用到其它类 Vue 的应用。但是我们很难从 React 迁移到 Angular,又或者是 Vue 迁移到 Angular。万一有一天,某个框架的核心维护人员,健康状况不好,那么我们可能就得重写整个应用。这对于一个技术人员/Tech Lead/项目经验/业务人员来说,这种情况是不可接受的。

    所以,为了应对这些框架带来的问题,我们选择 Web Components 技术,又或者是微前端技术,从架构上切开我们的业务。但是它们并不是银弹,它们反而是一个累赘,限定了高版本的浏览器,制定了更多的规范。与此同时,不论是微前端技术还是 Web Components,它们都没有解决一个问题:框架绑定应用

    框架绑定应用,就是一种灾害。没有人希望哪一天因为 Java 需要高额的付费,而导致我们选择重写整个应用。

    组件化及 Presenter 过重

    应对页面逻辑过于重的问题,我们选择了组件化。将一个页面,拆分成一系列的业务组件,再进一步地对这些业务组件进行地次细分,形成更小的业务组件,最后它们都依赖于组件库。

    可是呢,细化存在一个问题是:更难以摆脱的框架绑定。与此同时,我们大量的业务逻辑仍然放置在 Presenter 里。我们的 Presenter 充满了大量的业务逻辑和非业务逻辑:

    • 页面展示相应的逻辑。诸如点击事件、提交表单等等。
    • 状态管理。诸如是否展示,用户登录状态等等。
    • 业务逻辑。诸如某个字符串,要用怎样的形式展示。
    • 数据持续化。哪些数据需要存储在 LocalStorage,哪些数据存储在 IndexedDB 里?

    为了应对 Presenter 过重的问题,我们使用了 Service 来处理某一块具体的业务,我们使用了 Utils、Helper 来处理一些公共的逻辑。哪怕是如此,我们使用 A 框架编写的业务逻辑,到了 B 框架中无法复用。

    直到我最近重新接触了 Clean Architectrue,我发现 Presenter 还是可以进一步拆分的。

    整洁的前端架构

    Clean Architecture 是由 Robert C. Martin 在 2012 年提出的(PS:时间真早)。最早,我只看到在 Android 应用上的使用,一来 Android 开发使用的是 Java,二来 Android 应用有很重的 View 层。与此同时,在 7 年的时间里,由于前后端的分离,UI 层已经从后端的部分消失了——当然了,你也可以说 JSON 也是一种 View(至少它是可见的)。尽管,还存在一定数量的后端渲染 Web 应用,但是新的应用几乎不采用这样的模式。

    但是,在 9012 年的今天,前端应用走向了 MV* 的架构方案,也有了一层很重的 View 层——类似于过去的后端应用,或者后端应用。相似的架构,也可以在前端项目中使用。

    整洁架构

    Robert C. Martin 总结了六边形架构(即端口与适配器架构)、DCI (Data-Context-Interactions,数据-场景-交互)架构、BCI(Boundary Control Entity,Boundary Control Entity)架构等多种架构,归纳出了这些架构的基本特点:

    • 框架无关性。系统不依赖于框架中的某个函数,框架只是一个工具,系统不能适应于框架
    • 可被测试。业务逻辑脱离于 UI、数据库等外部元素进行测试。
    • UI 无关性。不需要修改系统的其它部分,就可以变更 UI,诸如由 Web 界面替换成 CLI。
    • 数据库无关性。业务逻辑与数据库之间需要进行解耦,我们可以随意切换 LocalStroage、IndexedDB、Web SQL。
    • 外部机构(agency)无关性。系统的业务逻辑,不需要知道其它外部接口,诸如安全、调度、代理等。

    如你所见,作为一个普通(不分前后端)的开发人员,我们关注于业务逻辑的抽离,让业务逻辑独立于框架。而在前端的实化,则是让前端的业务逻辑,可以独立于框架,只让 UI(即表现层)与框架绑定。一旦,我们更换框架的时候,只需要替换这部分的业务逻辑即可。

    为此,基于这个概念 Robert C. Martin 绘制出了整洁架构的架构图:

    Clean Architecture

    如图所示 Clean Architecture 一共分为四个环,四个层级。环与环之间,存在一个依赖关系原则:源代码中的依赖关系,必须只指向同心圆的内层,即由低层机制指向高级策略。其类似于 SOLID 中的依赖倒置原则:

    • 高层模块不应该依赖低层模块,两者都应该依赖其抽象
    • 抽象不应该依赖细节,细节应该依赖抽象

    与此同时,四个环都存在各自核心的概念:

    • 实体 Entities (又称领域对象或业务对象,实体用于封装企业范围的业务规则)
    • 用例 Use Cases(交互器,用例是特定于应用的业务逻辑)
    • 接口适配器 Interface Adapters (接口适配器层的主要作用是转换数据)
    • 框架和驱动(Frameworks and Drivers),最外层由各种框架和工具组成,比如 Web 框架、数据库访问工具等

    这个介绍可能有些简单,让我复制/粘贴一下更详细的解释:

    实体(Entities),实体用于封装企业范围的业务规则。实体可以是拥有方法的对象,也可以是数据结构和函数的集合。如果没有企业,只是单个应用,那么实体就是应用里的业务对象。这些对象封装了最通用和高层的业务规则,极少会受到外部变化的影响。任何操作层面的改动都不会影响到这一层。

    用例(Use Cases),用例是特定于应用的业务逻辑,一般用来完成用户的某个操作。用例协调数据流向或者流出实体层,并且在此过程中通过执行实体的业务规则来达成用例的目标。用例层的改动不会影响到内部的实体层,同时也不会受外层的改动影响,比如数据库、UI 和框架的变动。只有而且应当应用的操作发生变化的时候,用例层的代码才随之修改。

    接口适配器(Interface Adapters)。接口适配器层的主要作用是转换数据,数据从最适合内部用例层和实体层的结构转换成适合外层(比如数据持久化框架)的结构。反之,来自于外部服务的数据也会在这层转换为内层需要的结构。

    框架和驱动(Frameworks and Drivers)。最外层由各种框架和工具组成,比如 Web 框架、数据库访问工具等。通常在这层不需要写太多代码,大多是一些用来跟内层通信的胶水代码。这一层包含了所有实现细节,把实现细节锁定在这一层能够减少它们的改动对整个系统造成的伤害。

    Done!

    概念就这么扯到这里吧,然后看看相应的实现。

    Clean Architecture 数据流

    上图中的右侧部分表示的是相应的数据流,数据从 Controller 流出,经过 Use Case(用例)的输入端口,然后通过 Use Case 本身,最后通过 Use Case 输出端口返回给 Presenter。

    让我们来看一个较为直观的例子:

    Clean Architecture 数据流

    上图(来源,见参考文章)是一个 Android 应用的数据流示意图。

    对于只懂得前端的开发大致说明一下,Android 的 View 和 Presenter 的关系。在前端应用中,我们假设以使用 Component 来表示一个组件,如 Angular 中的 HomepageComponent。而这个 HomepageComponent 中,它必然充满了一些无关于页面显示的逻辑,比如从后端获取显示数据之类的。而 Java 的写法本身是比较臃肿的,所以在 Android 的 Activity 中就会充斥大量的代码。为此,Android 的开发人员们,采用了 MVP 架构,通过 Presenter 来将与显示无关的行为,从 View 中抽离出来。

    优缺点

    说了,这么多,最后让我们看一下优缺点。优点吧,就这些——笑:

    • 框架无关性。
    • 可被测试。
    • UI 无关性。
    • 数据库无关性。
    • 外部机构(agency)无关性。

    除此,还有:

    • 定义了特定功能的代码放在何处
    • 可以在多个项目共享业务逻辑

    相应的它还有大量的缺点:

    过于复杂。数据需要经过多层处理,Repository 转为 Entity,经过 Usecase 转为 Model,再交由 Presenter 处理,最后交由 View 显示。一个示例如下所示(源自Android-Clean-Boilerplate):

    MainActivity ->MainPresenter -> WelcomingInteractor -> WelcomeMessageRepository -> WelcomingInteractor -> MainPresenter -> MainActivity

    过度设计。事到如今,我们做了大量的设计,对于一个简单的工程来说,这样的模式可能是过度式的设计。

    大量的模板式代码。Usecase、Model 等一系列重复的模板式代码。

    陡峭的学习曲线。不用我多说,看这篇文章的长度。

    所以,在采用之前,请再次考虑一下,你的应用是否足够的复杂——业务上的复杂度,代码上的复杂度等等。

    前端 Clean 架构

    说了,这么多,让我们来结合一下前端,设计一下新的前端架构。

    客户端 Clean 架构 + MVP

    与后端架构相比, Android 的 MVP 架构 + Clean 架构更与前端相似,为此我们再说看看它们结合的一个示例:

    Android Clean Architecture

    与上一个数据流的相比,这个数据流图更容易落地。其与传统的 MVP(Model-View-Presenter)架构相比:

    MVP

    基于 Clean Architecture 方案时,则多了一个领域层(图中的 Domain Layer,即业务层),在这一层领域层里,放置的是系统相关的用例(Usecase),而用例所包含的则是相应的业务逻辑。

    Clean Architecture + MVP + 组件化

    上述的 MVP + Clean Architecture 的架构方式,对于前端应用的架构设计来说,也是相当合适的。稍有不同的是,我们是否有必要将一个组件分为 Presenter + View。以我的角度来说,对于大部分前端应用来说,并没有这么复杂的情况,因为前端有组件化架构。

    所以,最后对于我们的前端应用而言,架构如下图所示:

    Clean MVP 组件化

    这里,只是对于 Presenter 进行更细一步的细化,以真实的模式取代了 MVP 中的 Presenter。

    实践

    值得注意的是,我们在这里违反了依赖倒置原则。原因是,这里的注入带来了一定的前端复杂度,而这个注入并非是必须的——对于大部分的前端应用而言,只会有单一的数据源,那便是后端数据。

    单体式分层架构

    在我起初设计的版本里,参照的 Clean Angular 工程(Angular Clean Architecture)里,其采用的是单体式的 Clean Architecture 分层结构:

    ├── core
    │   ├── base				// 基础函数,如 mapper 等
    │   ├── domain				// 业务实体
    │   ├── repositories        // repositories 模型
    │   └── usecases			// 业务逻辑
    ├── data 					// 数据层
    │   └── repository          // 数据源实现
    └── presentation            // 表现层
    

    这个实现还是相当不错的,就是过于重视理论——抽象相当的繁琐,导致有点不接地气。我的意思说,没有多少前端人员,愿意按照这个模式来写。

    微服务式分层架构

    考虑到 usecase 的业务相关性,及会存在大师的 usecase,我便将 usecase 移到了 data 目录——也存在一定的不合理性。后来,我的同事泽杭——一个有丰富的 React 经验前端开发,他提出了 Redux 中的相关结构。最后,我们探讨出了最后的目录结构:

    ├── core			    // 核心代码,包含基本服务和基础代码
    ├── domain				// 业务层代码,包含每个业务的单独 Clean 架构内容
    │   └── elephant		// 某一具体的业务
    ├── features			// 公共页面组件
    ├── protected			// 有权限的页面
    ├── public				// 公共页面
    └── shared				// 共享目录
    

    对应的 elephant 是某一个具体的业务,在该目录下包含了一个完整的 Clean Architecture,相应的目录和文件如下所示:

    ├── model
    │   └── elephant.model.ts                         // 核心业务模型
    ├── repository
    │   ├── elephant-web-entity.ts                    // 数据实体,简单的数据模型,用来表示核心的业务逻辑
    │   ├── elephant-web-repository-mapper.ts         // 映射层,用于核心实体层映射,或映射到核心实体层。
    │   └── elephant-web.repository.ts                // Repository,用于读取和存储数据。
    └── usecases
        └── get-elephant-by-id-usecase.usecase.ts     // 用例,构建在核心实体之上,并实现应用程序的整个业务逻辑。
    

    我一直思考这样的模式是否有问题,直到我看到我司大佬 Martin Folwer 写下的一篇文章《PresentationDomainDataLayering》——终于有人背锅了。文章中提到了这图:

    分层

    这个分层类似于微服务的概念,在我所熟悉的 Django 框架中也是这样的结构。也因此从理论和实践上不看,并不存在任何的问题。

    其它

    它不是一颗银弹。使用 MVP 并不妨碍开发人员将 UI 逻辑放在 View 中,使用 Clean Architecture 不会阻止业务逻辑泄漏到表示层。

    我们仍然在优化相关的架构中,代码见:https://github.com/phodal/clean-angular

    相关

    相关文章

    目录结构

    来源: https://stackoverflow.com/questions/42779871/angular-core-feature-shared-modules-what-goes-where

    • app/shared - This is the module where I keep small stuff that every other module will need. I have 3 submodules there directives, components and pipes, just to keep things organized a little better. Examples: filesize.pipe, click-outside.directive, offline-status.component
    • app/public - In this module I keep public routes and top-level components. Examples: about.component, contact.component, app-toolbar.component
    • app/core - Services that app needs (and cannot work without) go here. Examples: ui.service, auth.service, auth.guard, data.service, workers.service
    • app/protected - Similar to public, only for authorized users. This module has protected routes and top-level components. Examples: user-profile.component, dashboard.component, dashboard-sidebar.component
    • app/features - This is the module where app functionalities are. They are organized in several submodules. If you app plays music, this is where player, playlist, favoritessubmodules would go. If you look at the @angular/material2 this would be an equivalent to their MaterialModule and many submodules, like MdIconModule, MdSidenavModule etc.
    • app/dev - I use this module when developing, don’t ship it in production.

    相似项目

    展开全文
  • 前言最近几年微前端一直是前端界的热门议题, 它类似于微服务架构, 主要面向于浏览器端,能将一个复杂而庞大的单体应用拆分为多个功能模块清晰且独立的子应用,且共同服于务同一个主应用。各个子...

    前言

    最近几年微前端一直是前端界的热门议题, 它类似于微服务架构, 主要面向于浏览器端,能将一个复杂而庞大的单体应用拆分为多个功能模块清晰且独立的子应用,且共同服于务同一个主应用。各个子应用可以独立运行、独立开发和独立部署。

    微前端架构概念的诞生及应用对于提供复杂应用服务的企业来说显然是一种机遇, 同样也是一种挑战.本文主要就微前端架构的概念和实现方案做一个总结和复盘,并且通过一个实际案例来实践微前端架构,希望能对同样有此需求的朋友们提供一些帮助和思路.

    你将收获

    • 什么是微服务以及微服务能给企业带来什么

    • 微前端架构概念及方案

    • umi下的微前端架构方案实战

    • 一个程序员的技术复盘与展望

    正文

    在总结微前端架构之前,让我们来先看看微服务是什么.

    1.什么是微服务以及微服务能给企业带来什么

    微服务是一种用于构建应用的架构方案。微服务架构有别于更为传统的单体式方案,可将应用拆分成多个核心功能。每个功能都被称为一项服务,可以单独构建和部署,这意味着各项服务在工作(和出现故障)时不会相互影响。

    传统的web软件开发架构往往如下图所示:

    虽然我们在传统应用中可以采用模块化来拆分业务逻辑和开发方式,但最终它们会打包并部署为单体式应用。这种架构往往更适合中小型项目, 开发简单直接,更适合集中化管理应用.但往往也会存在很多缺点,比如可扩展性不足,相同或者相似业务复用困难,部署时间长, 业务复杂之后很难维护等问题.

    对于复杂系统和业务来说,我们一般会采用微服务架构。其思路是将一个完整的应用分解为小的、互相连接的微服务,每个服务完成特定的功能, 并且某些特定的服务还能为其他服务提供API接口.

    由上图可以发现微服务给我们带来的好处:

    • 将一个庞大的单体拆解成多个子服务,大大降低了开发复杂度

    • 任务边界划分明确, 每个子服务之间单独开发, 不同服务之间可并行由不同的开发人员开发,提高开发效率

    • 更细粒度的加强了模块化进程, 可维护性和可读性更高

    • 团队之间只要制定好API约定, 那么不同成员或者团队可以采用不同的技术开发服务

    • 可用共享服务, 使得不同子服务可组合实现更复杂的功能

    • 每个微服务可独立部署发布,使得自动化CI(持续集成)/CD(持续交付)成为可能

    但微服务并不是任何场景下都是合适的, 微服务的目标是充分分解应用程序,以促进敏捷开发和持续集成部署。在部署微服务时我们需要做好适当的边界划分,并处理不同微服务之间的并发问题,这些都是对整个项目带来的挑战,需要更加专业的技术成员来把控.目前市面上也有很多开源的微服务框架比如Dubbo, Spring Cloud等,笔者之前公司采用的Spring Cloud就是一个很好的微服务架构方案.

    2.微前端架构概念及方案

    2.1 理解微前端架构

    上面简单介绍了一下微服务架构,接下来我们进入主题,来聊聊微前端. 微前端微服务实现的目的类似,都是将应用由单一的单体应用转变为多个小型子应用,差别就在于:

    1. 微前端应用于浏览器端,主要是对web应用进行拆解,最后将不同子系统(模块)聚合成一个完整的应用.

    2. 微前端主要目的是聚合,即将不同子系统聚合成一个大系统,而微服务架构目前更多是解耦,即解耦不同服务间的依赖.

    我们先来看看微前端的一些思考者.

    Michael Geers 大佬发表了一些对微前端的一些思考,内容大致总结一下就是:

    “ 微前端 ”是将微服务的概念扩展到前端领域。为了构建一个功能强大的浏览器应用程序(也称为单页应用程序),当前普遍的趋势是将其建立在微服务架构之上。但是随着时间的流逝,通常由独立团队开发的前端层会不断增长,并且变得更加难以维护。Micro Frontends背后的想法是将Web应用程序视为由独立团队拥有的功能的组合。每个团队都有自己关心和专长的不同业务或任务领域。每个团队可以跨职能,并且从数据库到用户界面,端到端地开发其功能。

    正如下面的例子所示:

    当我们的系统中有多个不同的子模块,并且子模块之间有相对独立且完整的功能体系时, 一旦子模块变得越来越多, 那么整个应用将变得非常庞大且臃肿,开发和维护成本大大提高.如果在这种场景下我们采用SPA模式开发,那么项目后期将变得不可想象,页面首次加载将变得非常慢(笔者曾经就经历过,开发一个复杂系统页面首次加载花了20多秒,所以不得不采用MPA来处理); 但是我们采用MPA(多页应用)模式,虽然解决了应用臃肿的问题, 但仍然存在很多有待处理问题,比如模块切换需要重新刷新页面, 公共组件无法共享,子模块直接,父子模块之间的通信问题,开发部署繁琐等.这写都是传统开发模式会遇到的问题.

    试想一下,如果面对以上问题, 如果有一种架构模式, 可以让我们在主应用中共享公共组件和状态(但是要保证子应用运行时内部的状态隔离), 并且不同子模块之间可以单独开发部署, 模块间切换不刷新页面, 并且模块之间,父子应用之间可以通过某种简单的方式实现通信,这样是不是就完美了?不错, 这也许就是微前端要解决的问题.

    往往企业的中后台系统更加适合使用微前端架构,因为B端大部分都是业务驱动,而往往这些业务之间会非常复杂, 比如Saas, Paas等系统.像类似于云平台,CRM,ERP系统往往是微前端架构的拯救对象.

    笔者曾经接手的ERP系统,由于开发时间比较早,往往有很多遗留的历史包袱,比如新老技术栈的糅合, 前端业务代码庞大而毫无违和感,为了对其继续迭代开发, 重构是必经之路,微前端另一个重要的作用笔者认为就是解放.解放不可挽回的痛????.

    笔者之前在写从0到1教你搭建前端团队的组件系统(高级进阶必备)这篇文章时简单提了一下微前端的一些知识,这里先回放一张笔者之前做的简陋的图,方便大家理解微前端架构.

    但我们所看到的不是事实的全部,在文章后面笔者会总结一张更全面的图,来整理微前端的一些实践应用.

    2.2 微前端架构实现的方案

    上面内容我们大致了解了一下微前端的概念和作用,接下来笔者总结一下曾经经历过的微前端实现方案.

    2.2.1. 基于MPA + iframe + requirejs实现的微前端架构

    这是笔者接手最早的一个项目,主要是服务于企业内部的ERP系统,当时采用的技术栈主要是jquery+layui+requirejs,记得还是笔者刚毕业时参与的项目.主要是利用AMD模块化机制来复用代码,当时项目代码及其庞大复杂,大致架构如下:

    传统实现方式一般是通多多页面的方式来对应用解耦,并采用模块化加载机制来导入可复用组件.系统间通型采用storage+window.opener+iframe.比如我们一个大系统的首页可能会有来自不同子系统的页面,已iframe的方式嵌入.不同子系统间由不同的人维护,虽然做到了微前端的模式,但是还是有很多缺点.

    改架构的一般分工是架构组主要负责制定架构标准和规范,维护公共模块(类似于现在的组件,当时由于采用jquery生态,可以简单的说成公共UI插件的维护);业务组主要负责编写业务代码,实现某个系统的具体交互和功能。

    2.2.2 基于MPA + iframe + Webpack实现的微前端架构

    基于MPA + iframe + Webpack实现的微前端架构实现和上面介绍的传统架构实现类似,只不过采用了更新的技术栈,以及真正的模块化,组件化技术。笔者之前做的Saas系统就是一个很典型的该方案的例子:

    上图可知不同子系统之间可以各自维护,单独打包部署,最后通过node或者nginx做路由分发。我们采用公共的ui组件库和js类库来抽离公共组件,但是前提是不同组件库和技术栈强相关,如果没有历史遗留的新项目,建议采用一致的技术栈。

    以上两个方案的缺点就是组件库只能复用而无法真正共享,并且切换路由会导致页面重新渲染刷新。父子系统通信困难,仍然需要iframe最为容器来通信。(有关iframe父子页面通信的各种方式笔者在记一次老项目中的跨页面通信问题和前端实现文件下载功能

    2.2.3. 基umi + qiankun实现的微前端架构

    目前市面上也有非常成熟的微前端架构方案,比如single-spa,之前的美团外卖微前端架构和蚂蚁金服基于single-spa开发的微前端架构qiankun(乾坤),都是非常不错的方案。

    qiankun主要采用HTML Entry模式,直接将子应用打出来 HTML作为入口,主框架可以通过 fetch html 的方式获取子应用的静态资源,同时将 HTML document 作为子节点塞到主框架的容器中。这样不仅可以极大的减少主应用的接入成本,子应用的开发方式及打包方式基本上也不需要调整,而且可以天然的解决子应用之间样式隔离的问题。

    其方案具有如下特点:

    • 支持子应用并行

    • 支持js沙箱环境(js隔离)

    • css隔离

    • HTML Entry,简化开发者使用

    • 按需加载

    • 公共依赖加载

    • 父子应用通信机制

    • 子应用嵌套

    因为我们的前端项目基于umi生态开发构建(之前采用webpack搭建,后面发现umi使用也很爽,就直接基于umi二次开发了),所以很自然的选择了乾坤作为微前端架构。具体架构如下:

    3.umi下的微前端架构方案实战

    接下来我具体介绍如何使用乾坤来搭建我们的微前端架构,由于我们内部采用umi,所以这里我们直接使用其提供的@umijs/plugin-qiankun插件来实现。(好处就是改动成本几乎为零) 首先我们来实现这样一个场景:我们有一个主应用作为基座工程,然后有3个子系统,他们是独立创建维护的,可以采用不同的git仓库来管理。当我们在主应用中切换路由时会切换到对应的子系统,且不刷新页面,完全的SPA体验,接下来我们来具体实现一下吧。

    这里我们采用umi2.0来开发,关于如何安装与使用umi,这里就不做详细介绍了。

    1. 创建工程

    mkdir mainSystem subSystemA subSystemB subSystemC// 分别进入各系统目录下,执行以下命令创建我们的项目yarn create umi
    
    1. 在各个系统下安装@umijs/plugin-qiankun插件

    yarn add @umijs/plugin-qiankun
    复制代码
    主应用下的配置// .umirc.js
    export default {
      plugins: [
        [
          '@umijs/plugin-qiankun',
          {
            master: {
              // 注册子应用信息
              jsSandbox: true, // 是否启用 js 沙箱,默认为 false
              prefetch: true, // 是否启用 prefetch 特性,默认为 true
            },
          },
        ],
      ],
    };
    // app.js
    const isDev = process.env.NODE_ENV === 'development'
    export const qiankun = {
      apps: [
        {
          mountElementId: 'root-subapp-container',  // 洗子应用挂载的节点
          name: 'subSystemA', // 唯一 id,和package对应的name字段最好保持一致
          entry: isDev ? '//localhost:8001' : '/subSystemA/index.html', // html entry
          base: '/subSystemA',  的路由前缀,通过这个前缀判断是否要启动该应用,通常跟子应用的 base 保持一致
          history: 'browser', // 子应用的 history 配置,默认为当前主应用 history 配置
        },
        {
          mountElementId: 'root-subapp-container',
          name: 'subSystemB',
          entry: isDev ? '//localhost:8002' : '/subSystemB/index.html',
          base: '/subSystemB',
        },
        {
          mountElementId: 'root-subapp-container',
          name: 'subSystemC',
          entry: isDev ? '//localhost:8003' : '/subSystemB/index.html',
          base: '/subSystemC',
        }
      ],
      fetch: url => {
        return fetch(url)
      }
    };
    

    以上是基本的配置,当然我们还可以在app.js里面加入lifeCycles等钩子来控制不同生命周期下的行为。

    在子应用中我们同样需要引入@umijs/plugin-qiankun这个插件,具体配置如下:

    export default {  base: `/${appName}`, // 子应用的 base,默认为 package.json 中的 name 字段  plugins: ['@umijs/plugin-qiankun', { slave: true }],};
    

    基本准备工作已经完成,剩下就是编写业务代码了,我们要想让整个应用一起跑起来,需要先启动基座工程,然后再启动对应的子工程(当然他们可以单独运行)。

    但是值得注意的是我们在开发环境中采用devServer提供的带来才能跨域抓取资源,如果应用发布到线上,如果不同子应用采用不同域名,我们还需要解决跨域问题(跨域解决的方案及安全机制也有很多,已经不再是个问题)。实际开发环境我们需要考虑的问题还有很多,这里只做简单介绍,不过根据官方提供的api基本上可以满足大部分的需求场景,所以还是非常值得一试的。笔者后期也会写一个微前端的实际案例发布到github上,可以一起交流学习。

    4.一个程序员的技术复盘与展望

    由于今年受疫情影响,工作任务比较紧张,复盘的时间也比较少,但是笔者还是会坚持每周更新1-2篇文章,来总结和复盘工作中或学到的新技术。自己写的零零散散的文章是时候做一个分类和梳理,以便更加清晰未来的方向和不足的补救。

    1.node相关

    2.工程化相关

    • 前端组件/库打包利器rollup使用与配置实战

    • 基于react/vue生态的前端集成解决方案探索与总结

    • 9012教你如何使用gulp4开发项目脚手架

    • vue/react项目中不可忽视的自动化部署方案

    • 用 webpack 4.0 撸单页/多页脚手架 (jquery, react, vue, typescript)

    • git常见用法和核心策略

    3. 设计模式

    • 15分钟带你了解前端工程师必知的javascript设计模式(附详细思维导图和源码)

    • 《前端实战总结》之使用解释器模式实现获取元素Xpath路径的算法

    • 《前端实战总结》之迭代器模式的N+1种应用场景

    • 《前端实战总结》之设计模式的应用——备忘录模式

    4.react相关

    • 10分钟教你手写8个常用的自定义hooks

    • 《彻底掌握redux》之开发一个任务管理平台

    • 从0到1教你搭建前端团队的组件系统(高级进阶必备)

    • 精通React/Vue系列之实现一个全局提示(Message)组件

    • 精通React/Vue系列之手把手带你实现一个功能强大的通知提醒框(Notification)

    • 手摸手实现一个轻量级可扩展的模态框(Modal)组件

    • 《精通react/vue组件设计》之5分钟教你实现一个极具创意的加载(Loading)组件

    • 《精通react/vue组件设计》之实现一个健壮的警告提示(Alert)组件

    • 《精通react/vue组件设计》之配合React Portals实现一个功能强大的抽屉(Drawer)组件

    • 《精通react/vue组件设计》之5分钟实现一个Tag(标签)组件和Empty(空状态)组件

    • 《精通react/vue组件设计》之快速实现一个可定制的进度条组件

    • 《精通react/vue组件设计》之用纯css打造类materialUI的按钮点击动画并封装成react组件

    • 基于jsoneditor二次封装一个可实时预览的json编辑器组件(react版)

    5.vue/angular相关

    • 从零到一教你基于vue开发一个组件库

    • 2年vue项目实战经验汇总

    • 基于create-react-app打包编译自己的第三方UI组件库并发布到npm

    • 一张图教你快速玩转vue-cli3

    • 使用Angular8和百度地图api开发《旅游清单》

    • vue高级进阶系列——用typescript玩转vue和vuex

    6.css相关

    • 《前端实战总结》之使用纯css实现网站换肤和焦点图切换动画

    • 《前端实战总结》之使用CSS3实现酷炫的3D旋转透视

    • 《css大法》之使用伪元素实现超实用的图标库(附源码)

    • css3实战汇总(附源码)

    • 用css3实现惊艳面试官的背景即背景动画(高级附源码)

    • 如何把控css的方向感

    7.算法相关

    • 如何优雅的使用javascript递归画一棵结构树

    • 笛卡尔乘积的javascript版实现和应用

    • JavaScript 中的二叉树以及二叉搜索树的实现及应用

    • js基本搜索算法实现与170万条数据下的性能测试

    • 《前端算法系列》如何让前端代码速度提高60倍

    • 《前端算法系列》数组去重

    8. H5游戏

    • 用60行代码实现一个高性能的圣诞抽抽乐H5小游戏(含源码)

    • Canvas入门实战之用javascript面向对象实现一个图形验证码

    • 用 JavaScript 和 C3 实现一个转盘小游戏

    • 教你用200行代码写一个爱豆拼拼乐H5小游戏(附源码)

    9.原生javascript类库设计封装

    10.工作问题汇总

    如果链接失效可以公众号内搜索对应内容。

    最后

    如果想学习更多H5游戏, webpacknodegulpcss3javascriptnodeJScanvas数据可视化等前端知识和实战,欢迎在公号《趣谈前端》加入我们的技术群一起学习讨论,共同探索前端的边界。

    展开全文
  • 前端学习之路及前端架构的演进一些思考 最近这些年前端发展十分迅猛,各种框架,插件,组件库如雨后春笋,让人应接不暇。很多刚进去前端开发的同学可能会眼花缭乱,不知从何入手。这篇文章主要讲下我自身前端学习之...
  • 这是奶爸码农第60篇原创文章,点击上方蓝字关注01什么是软件架构?人人都在说软件架构,但人们并不能给出一个准确的定义,就像MartinFolwer在《Making Architectu...
  • Web大前端架构资料.txt

    2021-04-10 10:56:30
    Web大前端架构资料; Web系统运维高级架构师大数据方向资料; Web大前端基础到架构实战;
  • 如果你正在学习前端 ,小编欢迎你加入,今天分享的这个案例已经上传到群文件,大家都是软件开发党,不定期分享干货(只有前端软件开发相关的),包括我自己整理的一份2018最新的前端进阶资料和高级开发教程,欢迎...
  • 课程为零基础学习开发的学员而准备,无需任何基础,无任何专业限制,通通从零开始,由浅入深学习开发,每个知识点均有对应案例...新型前端开发大部分回归原始开发,核心编程能力非常重要,本课程教会你如何玩转前端
  • 前端技术架构概述

    千次阅读 2020-08-24 22:12:54
    前端技术架构 架构描述:以Node.js为核心的Vue.js前端技术生态架构 2 Node.js 2.1 什么是Node.js 简单的说 Node.js 就是运行在服务端的 JavaScript。 Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。 ...
  • 前端高级进阶13本经典书籍

    万次阅读 多人点赞 2019-06-27 16:01:52
    最近很多朋友问我,做前端开发已经做了两到四年了,基本的东西,也都会了,但是很难突破瓶颈,到达前端高级/架构师的水平,问我该怎么学习,该看什么书,今天我把看过的一些比较经典的高级进阶的书整理出来,供大家...
  • 前端的入门书籍已经很多了,从《JavaScript 高级程序设计》到《精通 CSS:高级 Web 标准解决方案》前端的框架书籍已经很多了,从《深入浅出 Node.js》(...
  • 1:前端架构的基本知识 1: 前端工程师必须会的一些技能 前端工程师基本技能图.PNG 2: 前端架构基本知识 什么是前端架构? 每个人对每个架构有不同的认识和一些想法。没有一个架构是完美的,只有一个架构是不是...
  • 前端架构师成长之路

    千次阅读 2017-11-22 12:47:38
    虽然我在公司一直做前端开发,但是作为前端工程师我总是妄自菲薄感觉自己像个门外汉,技术太浅登不得大雅之堂。所以一直想学一门后台语言,我就可以参与到公司数据结构的设计,继而进入公司核心领导层(晋职加薪~...
  • 免费视频讲座:2017高级互联网架构师全套视频教程百度网盘 30G! 资料及代码 一、互联网并发编程 五、数据库设计与优化 四、Linux部分 三、JAVA虚拟机 七、互联网框架应用 六、互联网中间件架构设计 二、...
  • 点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐]前端架构师,听起来就是个很高大上的职位,在大多数程序员的眼中,架构师一般从事后端开发,Java或者C++出身,它们往往拥有这十...
  • Vue 单页面项目前端架构方案设计

    千次阅读 2019-10-29 23:30:58
    在《Node.js 实战》中...本 Chat 提供一个基于 Vue-cli2 生成项目模板的前端架构设计方案。 在本场 Chat 中,会涉及到如下内容: 不同环境下的分别打包 CSS 的规范化 Axios 的封装 递归动态导航 全局组件注册 常...
  • 这是一本以现代前端技术思想与理论为主要内容的书。前端技术发展迅速,涉及的技术点很多,我们往往需要阅读很多书籍才能理解前端技术的知识体系。...使读者获得成为高级前端工程师或架构师所必须具备的思维和能力。
  • 我最近面了一个前端开发,4 年经验, 应聘的是前端高级开发工程师。他的简历中提到很多技术点,从 HTML、CSS、JavaScript 再到 Vue.js 和 React 一个都不缺,跨...
  • 企业级Web前端高级实战与大型项目开发 跟架构师从Web Server学整体项目架构实战
  • 2020中高级前端面试题合集

    万次阅读 多人点赞 2020-03-18 22:19:00
    2020中高级前端面试题合集 “全方位总结一下所遇到的面试题目,与大家共同学习,也是对自己的一次总结” 01 前言 2020是不平凡的一年,这一年里发生许多事情,大家也都知道。对于互联网行业来说也是一次重大的...
  • 前端学习路线

    万次阅读 多人点赞 2015-10-28 11:22:47
    先附上一张网上广为流传的前端知识体系图:前端知识体系从大图中我们总结出: 优秀的Web前端开发工程师 要在知识体系上既要有 广度 和 深度!应该具备快速学习能力。 前端开发工程师 不仅要掌握基本的Web前端开发...
  • 高级前端需要具备的知识

    千次阅读 2018-05-29 17:40:54
    web前端深入学习路线 一、高级基础部分 1.ES6/ES7语法和原理实现 2.异步发展过程:callback、promise、generator、co、async/await等异步流程控制(async和await的实现原理) 3.promise设计模式原理及在es6中的...
  • 最新Vue面试题网址:2021年 Vue经典面试题 -- 必问知识点 --(包含答案)_xm1037782843的博客-CSDN博客_vue面试题 敬请关注公众 :包含全套 Vue 最新面试题 js最近面试题 等大量前端知识技术。 部分都是百度的答案...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 59,492
精华内容 23,796
关键字:

高级前端架构