前端微前端架构:大项目的救命稻草还是自找麻烦?

前端微前端架构:大项目的救命稻草还是自找麻烦?

毒舌时刻

微前端?听起来就像是一群前端工程师为了显得自己很高级,特意发明的复杂术语。不就是把一个大应用拆成几个小应用嘛,至于搞得这么玄乎吗?

你以为拆成微前端就能解决所有问题?别做梦了!到时候你会发现,调试变得更麻烦了,部署变得更复杂了,甚至连样式都可能互相冲突。

为什么你需要这个

  1. 大型应用的可维护性:当你的应用变得越来越大,单靠一个团队已经无法高效维护时,微前端可以让不同团队独立开发和部署各自的模块。
  2. 技术栈的灵活性:不同的微前端可以使用不同的技术栈,比如一个模块用React,另一个模块用Vue,这样可以根据团队的专长选择最合适的技术。
  3. 独立部署:微前端可以独立部署,不需要整个应用一起发布,这样可以减少发布风险,加快发布速度。
  4. 团队协作:不同团队可以独立开发各自的微前端,减少代码冲突和沟通成本。

反面教材

// 这是一个典型的单体应用结构 import React from 'react'; import ReactDOM from 'react-dom'; import Header from './components/Header'; import Sidebar from './components/Sidebar'; import Dashboard from './components/Dashboard'; import Settings from './components/Settings'; import UserProfile from './components/UserProfile'; function App() { return ( <div className="app"> <Header /> <Sidebar /> <main> <Dashboard /> <Settings /> <UserProfile /> </main> </div> ); } ReactDOM.render(<App />, document.getElementById('root')); 

问题

  • 所有代码都在一个代码库中,随着功能增加,代码量会变得非常庞大
  • 团队协作困难,容易出现代码冲突
  • 部署风险高,任何一个小改动都需要整个应用一起发布
  • 技术栈单一,无法根据不同模块的需求选择最合适的技术

正确的做法

使用Single-SPA实现微前端

// 主应用配置 import { registerApplication, start } from 'single-spa'; // 注册微前端应用 registerApplication({ name: 'header', app: () => import('@org/header'), activeWhen: (location) => true, }); registerApplication({ name: 'dashboard', app: () => import('@org/dashboard'), activeWhen: (location) => location.pathname === '/dashboard', }); registerApplication({ name: 'settings', app: () => import('@org/settings'), activeWhen: (location) => location.pathname === '/settings', }); registerApplication({ name: 'user-profile', app: () => import('@org/user-profile'), activeWhen: (location) => location.pathname === '/user-profile', }); // 启动应用 start(); 

微前端应用示例

// dashboard微前端 import React from 'react'; import ReactDOM from 'react-dom'; import singleSpaReact from 'single-spa-react'; function Dashboard() { return ( <div className="dashboard"> <h1>Dashboard</h1> <p>Welcome to your dashboard!</p> </div> ); } const reactLifecycles = singleSpaReact({ React, ReactDOM, rootComponent: Dashboard, errorBoundary(err, info, props) { return <div>An error occurred: {err.message}</div>; }, }); export const bootstrap = reactLifecycles.bootstrap; export const mount = reactLifecycles.mount; export const unmount = reactLifecycles.unmount; 

样式隔离

/* 使用CSS Modules或Shadow DOM进行样式隔离 */ .dashboard { /* 样式只会应用到当前微前端 */ background-color: #f5f5f5; padding: 20px; } 

通信机制

// 使用自定义事件进行微前端间通信 // 发送消息 function sendMessage(message) { window.dispatchEvent(new CustomEvent('micro-frontend-message', { detail: message })); } // 接收消息 window.addEventListener('micro-frontend-message', (event) => { const message = event.detail; console.log('Received message:', message); }); 

毒舌点评

微前端确实能解决大型应用的一些问题,但它并不是银弹。如果你只是为了赶时髦而使用微前端,那你很快就会发现,它带来的麻烦比解决的问题还多。

想象一下,当你需要在多个微前端之间共享状态时,你会发现自己陷入了新的困境。你可能需要引入复杂的状态管理方案,或者使用 localStorage 这种不太可靠的方式。

还有部署问题,你需要确保所有微前端的版本兼容,否则就会出现各种奇怪的bug。更糟糕的是,当一个微前端崩溃时,可能会影响整个应用的运行。

所以,在决定使用微前端之前,先问问自己:我的应用真的大到需要微前端吗?我的团队真的需要技术栈的灵活性吗?如果答案是否定的,那还是老老实实用单体应用吧,至少调试起来方便。

当然,如果你真的需要微前端,那请务必做好规划,选择合适的框架,制定好通信机制和样式隔离方案。否则,你会发现自己掉进了一个新的坑里,而且这个坑可能比原来的还要深。

Read more

手机上也能运行Stable Diffusion?Github上开源且完全免费的AI生图软件!斩获1.4K Stars

手机上也能运行Stable Diffusion?Github上开源且完全免费的AI生图软件!斩获1.4K Stars

Hello,大家好! 今天给大家分享一款GitHub上1.4k星标的开源神器——手机端AI绘画工具, 软件已经整理在文末,有需要的朋友记得获取保存哦~  链接:https://pan.quark.cn/s/fa5abdb93460 一、软件打开方式 这款工具为安卓APK安装包,共提供两个版本:带过滤器版本和不带过滤器版本,大家可以根据自己的需求选择。下载后直接安装到手机上即可运行,无需复杂配置。 二、软件的功能介绍 这是一款让安卓手机直接运行Stable Diffusion的AI绘画工具,主要特色包括: 全功能AI绘画 支持文生图:输入提示词一键生成图像 支持图生图:导入参考图片二次创作 支持图像修复:模糊图片一键变清晰 多模式加速 支持CPU/GPU/NPU三种运行模式 高通骁龙处理器可启用NPU加速,生成速度极快 非骁龙处理器也可用CPU/GPU流畅运行 开源免费 GitHub开源项目,完全免费无限制 模型可自由下载切换 三、使用指南 第一步:安装与首次设置

打造你的家庭 AI 助手(三):QQ 机器人接入你的 OpenClaw

不得不承认腾讯进步的速度太快了,几条命令就可以接入Openclaw,也不用设置IP白名单了,在 QQ开放平台还增加了专门的Openclaw入口: 没啥好说的,很简单,安装完Openclaw之后,执行如下命令(命令也是生成好的): openclaw plugins install @tencent-connect/openclaw-qqbot@latest openclaw channels add--channel qqbot --token"" openclaw gateway restart 以下内容已经过时了,留作纪念 以下内容已经过时了,留作纪念 以下内容已经过时了,留作纪念 ⚠️ 重要提示:如果是家用宽带,没有申请固定 IP 地址的话,大可以放弃这种方式。由于 QQ 开发平台的白名单限制,机器人会非常不稳定,频繁掉线。建议使用云服务器或有固定 IP 的环境部署。 前言 在完成 OpenClaw 安装后,

无人机电力设备智能巡检检测数据集 - 缺陷检测与分类 电力巡检设备状态检测数据集 铁塔顶部 - 电缆头部异物 - 爬电距离装置头部 - 开关头部 - 陶瓷绝缘子污秽 - 导线端头部

无人机电力设备智能巡检检测数据集 - 缺陷检测与分类 电力巡检设备状态检测数据集 铁塔顶部 - 电缆头部异物 - 爬电距离装置头部 - 开关头部 - 陶瓷绝缘子污秽 - 导线端头部

无人机电力巡检设备状态检测数据集,6056张,yolo,voc,coco标注方式、 图像尺寸:800*800 类别数量:49类 训练集图像数量:5292; 验证集图像数量:560; 测试集图像数量:204 类别名称: 每一类图像数 ,每一类标注数 csat_tt - 铁塔顶部:244, 254 ddan_tt_vatla - 电缆头部异物:173, 175 krang_tt - 爬电距离装置头部:142, 216 kdo_tt - 开关头部:44, 60 cdien_gom_ban - 陶瓷绝缘子污秽:58,

构建 基于无人机 RGB+红外(RGBT)双模态小目标行人检测系统 无人机视角下RGB+红外对齐行人小目标检测数据集 航拍无人机多模态行人检测数据集 红外可见光行人检测数据集

构建 基于无人机 RGB+红外(RGBT)双模态小目标行人检测系统 无人机视角下RGB+红外对齐行人小目标检测数据集 航拍无人机多模态行人检测数据集 红外可见光行人检测数据集

无人机视角下RGB+红外对齐行人小目标检测数据集 模态与视角:无人机搭载 RGBT 双光相机,从 50–80 m 高度、45°–60° 俯视角采集,同步 RGB + 热红外图像对。 规模:6,125 对图像(4,900 train / 1,225 test),分辨率 640×512,共 70,880 个行人实例。 任务:专门面向 tiny person detection 的无人机 RGBT 检测 benchmark。 1 1 以下是 无人机视角下 RGB+红外对齐行人小目标检测数据集 的详细信息整理成表格: