Sass产品 - 定制化与本地化

1. 微前端是什么

微前端主要借鉴后端微服务的概念。简单地说,就是将一个巨无霸(Monolith)的前端工程拆分成一个一个的小工程。它们完全具备独立的开发、运行能力。整个系统就将由这些小工程协同合作,实现所有页面的展示与交互。

可以跟微服务这么对比着去理解:

微服务 微前端
一个微服务就是由一组接口构成,接口地址一般是 URL。当微服务收到一个接口的请求时,会进行路由找到相应的逻辑,输出响应内容。 一个微前端则是由一组页面构成,页面地址也是 URL。当微前端收到一个页面 URL 的请求时,会进行路由找到相应的组件,渲染页面内容。
后端微服务会有一个网关,作为单一入口接收所有的客户端接口请求,根据接口 URL 与服务的匹配关系,路由到对应的服务。 微前端则会有一个加载器,作为单一入口接收所有页面 URL 的访问,根据页面 URL 与微前端的匹配关系,选择加载对应的微前端,由该微前端进行进行路由响应 URL。

1.1 微前端架构

微前端架构一般可以由以下几种方式进行:

  • 使用 HTTP 服务器的路由来重定向多个应用
  • 在不同的框架之上设计通讯、加载机制,诸如 Mooa 和 Single-SPA
  • 通过组合多个独立应用、组件来构建一个单体应用
  • iFrame。使用 iFrame 及自定义消息传递机制
  • 使用纯 Web Components 构建应用
  • 结合 Web Components 构建

2. 为什么要用微前端

主要从下面几个角度

  • 打包速度
  • 页面加载速度
  • 多人多地协作
  • sass产品定制化
  • 产品拆分

2.1 打包速度

工程越来越大,打包越来越慢。想想edx跑完整个打包流程,需要多少时间?编译一次edx静态资源就需要20-30分钟。

在 6 个月前,我们的 B 端工程那会儿还是一个 Monolith。当时已经有 20 多个依赖、60 多个公共组件、200 多个页面,对接 700 多个接口。我们使用了 Webpack 2,并启用 DLL Plugin、HappyPack 4。在我的个人主机上使用 4 线程编译,大概要 5 分钟。而如果不拆分,算下来现在我们已经有近 400 个页面,对接1000 多个接口。
这个时间意味着什么?它不仅会耽误我们开发人员的时间,还会影响整个团队的效率。上线时,在 Docker、CI 等环境下,耗时还会被延长。如果部署后出几个 Bug,要线上立即修复,那就不知道要熬到几点了。
在使用微前端改造后,目前我们已经有 26 个微前端工程,平均打包时间在 30-45 秒之间。

2.2 多人多地协作

使用微前端后,代码冲突提交被阻塞的风险,就平摊到各个工程上去了。

在协作上,我们在全国有三个地方的前端团队,这么多人在同一个工程里开发,遭遇代码冲突的概率会很频繁,而且冲突的影响面比较大。如果代码中出现问题,导致 CI 失败,所有其他人的代码提交与更新也都会被阻塞。

2.3 Sass产品 - 定制化与本地化

内心想做 SaaS 产品,但客户总是要做定制化。

定制化 往往意味着,在代码里揉进“定制的业务逻辑”。
本地化 就会有代码安全方面的考量,怎样不把全部源代码给客户,就能实现定制?

通过微前端技术,我们可以很容易达到本地化代码安全的下限——只给客户他所购买的模块的前端源码。定制化里最简单的独立新模块也变得简单:交付团队增加一个新的微前端工程即可,不需要揉进现有研发工程中。

3. 怎样整合微前端app

在微前端的方案里,有几个我们必须要解决的问题:

  • 一个前端需要对应多个后端
  • 提供一套应用注册机制,完成应用的无缝整合
    • 怎样将不同业务子系统集中到一个大平台上,统一对外开放?
    • 如何给不同用户赋予权限让其能够访问平台的特定业务模块同时禁止其访问无权限的业务模块?
    • 如何快速接入新的子系统,并对子系统进行版本管理,保证功能同步?
  • 构建时集成应用和应用独立发布部署

3.1 入口项目

最终线上运行的是一个单页应用,而项目开发中要求应用独立。因此我们新建了一个入口项目,用于整合各个应用。入口项目(Portal),除了提供“子项目”注册、合并功能外,还提供一些公共支持,如

  • 用户登录机制
    将用户的统一登录和认证问题交给了SSO,所有的项目的后端Server都要接入SSO校验登录状态,从而保障业务系统间用户安全认证的一致性。
  • 引用公共库
    每一个业务工程都是一个独立的前端工程,所以里面会有一些相同的依赖,如 Vue、moment、lodash 等。如果将这些内容都打包到各自的 vendor.js 里,则势必会导致代码冗余太多,浏览器运行内存压力增大。我们把这些公共依赖、公共组件、CSS、Fonts 等都放到一个工程里,由该工程进行打包,将依赖、组件 export,并以 UMD 的方式注入到全局。
  • 菜单权限获取
  • 全局异常处理
  • 全局数 大专栏  微前端 [ 日常笔记 ]据打点

3.2 路由分发应用

在单页面应用中,我们会依据路由分发组件。而在微前端项目中,我们需要把路由分发到不同的应用中。

  • Http反向代理
    这通常可以通过HTTP 服务器的反向代理来实现。但是这种方式看上去更像是多个前端应用的聚合,我们只是将这些不同的应用拼凑到一起,使他们看起来像是一个完整的整体。但是,每次用户从 A 应用到 B 应用的时候,都需要刷新一下页面。
  • 客户端javascript异步加载
    这种方式就是在客户端浏览器通过 Ajax 加载应用程序,然后将不同模块的内容插入到对应的 div 中,而且还必须手动克隆每个 script 的标记才能使其工作。
    “子项目”对外输出不需要入口HTML页面,只需要输出的资源文件即可,资源文件包括js、css、fonts和imgs等。

    12345678910
    function  (element) {  [].forEach.call(element.querySelectorAll(‘script‘), function (nonExecutableScript) {    var script = document.createElement("script");    script.setAttribute("src", nonExecutableScript.src);    script.setAttribute("type", "text/javascript");    element.appendChild(script);  });}
    
    document.querySelectorAll(‘.load-app‘).forEach(loadPage);
  • Web Components
    react,vue的可重用的组件。每个组件都是独立开发的,主应用程序项目利用它们组装成最终的应用程序。
    1234567
    class Header extends HTMLElement {  attachedCallback() {    ReactDOM.render(<App />, this.createShadowRoot());  }}
    
    document.registerElement(‘microfrontends-header‘, Header);

4. 一些框架

4.1 single-spa

single-spa is a framework for bringing together multiple javascript microfrontends in a frontend application.

搭建一个single-spa来加载react+vue两个app: https://dev.to/dabit3/building-micro-frontends-with-react-vue-and-single-spa-52op
官方文档:https://single-spa.js.org/docs/getting-started-overview.html
官方Demo : https://single-spa.surge.sh/
Demo仓库: https://github.com/CanopyTax/single-spa-examples

12345678
git clone [email protected]:CanopyTax/single-spa-examples.gitcd single-spa-examples

 Install yarn at https://yarnpkg.com/lang/en/docs/install/yarnyarn buildyarn startopen http://localhost:8080

原文地址:https://www.cnblogs.com/wxkhjWW1/p/12030517.html

时间: 2024-08-30 03:00:34

Sass产品 - 定制化与本地化的相关文章

Odoo中如何定制化已存在的视图(以子产品为例)

(可选)如要扩展视图对应的模型请增加相应的字段,如: class product(models.Model): _inherit = "product.product" max_quantity = fields.Float(string="Maximum Quantity") //增加了一个最大数量字段 找到原始的视图名称,可以通过调试视图查找,如: 这样我们就知道要去product模块中找id为product_normal_form_view的视图了,最简单的方

linux中内存泄漏的检测(二)定制化的malloc/free

<linux中内存泄漏的检测(一)最简单的方法>介绍了最简单的内存泄漏检测方法,这种方法虽然简单,却有很多现实的问题,导致它不能用于实际的生产中. 直接使用这种方法肯定是不现实的,因为: (1)把整个工程里所有调用malloc/free的地方都改成my_malloc/my_free,代码改动很大. (2)通常动态库和静态库的代码是没有权限修改的. 今天就来解决这个问题,动态地决定让程序使用自己的还是系统的内存管理接口. wrap选项 不希望修改产品代码,那么用于申请/释放内存的接口还是mall

PMC为超大规模部署提供高性价比定制化服务器硬件

PMC为超大规模部署提供高性价比定制化服务器硬件 PMC公司宣布率先推出16端口12Gb/s SAS及16端口 6Gb/s SATA I/O 控制器解决方案.PMC的数据中心IO控制器产品系列助力OEM和ODM,为超大规模部署提供高性价比的定制化服务器硬件,如OpenCompute.Windows 云服务器.Open Stack及天蝎计划等环境下的部署.此系列产品的端口密度为业界最高.功耗最低,且能提供逾1,000,000 次每秒输入/输出,因而能支持需求最为严苛的云计算应用软件. 此产品系列包

3D打印闪耀中博会,“湖南智造”再展新风采 ——华曙高科推出全球首款开源可定制化金属3D打印机

"2015中国中部投资贸易博览会"5月18日在武汉拉开帷幕,湖南省商务厅组织我省代表企业积极参与.其中,华曙高科技有限责任公司作为国内3D打印产业领军企业在展会发布全球首款开源可定制化金属3D打印机FS271M,成为此次展会的一大亮点. 随着我国将3D打印提升到国家战略层面,以及今年首个"国家计划"的出台,3D打印产业的发展得到越来越多人的关注.机遇与挑战并存,面对国内尚不成熟的3D打印产业发展,以及以美.德为首的国际3D打印产业巨头的市场竞争,本土3D打印企业如何

U-Mail:如何实现EDM的个性化和定制化?

设想一下,一个上班族一天要接到多少垃圾邮件?据媒体报道,目前来往的邮件中,高达95%以上的是垃圾邮件,而且有些垃圾邮件还会故意占据着邮箱的最前列.同时,随着人们接受资讯越来越快捷便利,渠道越来越多,也一定程度上分流了注意力,导致打开邮箱的间隔期变长,对一封邮件的关注度下降.所以在邮件泛滥的情况下,U-Mail反复提倡邮件营销一定要做到个性化和定制化. 个性化的邮件通常能够迅速吸引起读者的注意力,在一堆邮件中突围而出.邮件的个性化包括从邮件标题到主题和内容乃至邮件的设计风格都进行了针对特定人群的改

AI应用开发实战 - 定制化视觉服务的使用

AI应用开发实战 - 定制化视觉服务的使用 零.定制化视觉服务简介 有的时候,在构建应用的过程中,在缺少强大计算资源与高性能算法的情况下,我们不一定需要自己从零开始训练模型.我们需要用的一些轮子,已经有人给我们造好了. 就比如: 微软提供的定制化视觉服务. 在机器学习应用中,任何情况下都需要一个或大或小的模型.而怎么得到这个模型是其中最复杂的部分.定制化视觉服务相当于在云端提供了一个生成模型的方法,把模型相关的复杂的算法都简化了.同时,它不仅能够让用户自己管理训练数据,定义自己的分类问题,而且支

关于客户定制化软件的探讨

我认为,软件开发,尤其是定制化的软件开发,一定要彻底弄清楚客户对软件的初衷.客户很多时候对软件没有什么确切的概念,会提出不合理的需求.你可以根据客户的初衷来分辨哪些功能是客户真正所需,哪些是客户的一厢情愿.如果是'真正所需',即使是再困难也应该实现,如果是'一厢情愿',应该尽量避免,多和客户沟通.因为这些'一厢情愿'会让软件走向错误的道路,开发人员会忘记哪些是重要的,哪些不重要,尤其是开发团队人员变动很大的时候,从而使软件走向歧途. 从4月开始,我们组接到了一个定制化的项目(c/s结构),大致的

OA系统信用盘新增三个极速彩版本定制化视觉服务的使用

AI应用开发实战 - 定制化视觉服务的使用 OA系统信用盘新增三个极速彩版    下载地址  QQ2952777280 OA系统信用盘新增三个极速彩版本程序源码参数说明: 运行环境:php5.2+mysql 源码类别:时时彩(彩票)现金网系统/两面盘 界面语言:繁体中文 源码授权:无加密文件及认证授权,永久性可直接使用. 版本支持:PC/WAP网页版 编程语言:PHP 零.定制化视觉服务简介 有的时候,在构建应用的过程中,在缺少强大计算资源与高性能算法的情况下,我们不一定需要自己从零开始训练模型

Linux系统——搭建FTP方式的本地定制化Yum仓库

(1)搭建公网源yum仓库 安装wget aliyun源 # wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo 163源 # wget -O /etc/yum.repos.d/163.repo http://mirrors.163.com/.help/CentOS6-Base-163.repo 2)开启yum仓库配置文件 /etc/yum.conf的keepcache功能 将keepcach