当前位置: 首页 > news >正文

前端架构演进:从单体到微前端

前端架构演进从单体到微前端前端架构的发展历程第一阶段单体应用Mono Repo├── src/ │ ├── components/ │ ├── pages/ │ ├── services/ │ ├── utils/ │ └── styles/ └── index.html特点代码集中管理部署简单适合小型项目第二阶段组件化架构├── src/ │ ├── components/ │ │ ├── Button/ │ │ ├── Card/ │ │ └── Modal/ │ ├── containers/ │ ├── pages/ │ └── store/ └── index.html特点代码复用性高关注点分离便于团队协作第三阶段微前端架构├── apps/ │ ├── shell/ │ ├── home/ │ ├── profile/ │ └── checkout/ └── packages/ └── ui-components/特点独立开发和部署技术栈无关高扩展性微前端架构模式模式一基座模式// shell/src/App.js import { registerMicroApps, start } from qiankun; registerMicroApps([ { name: home, entry: //localhost:8081, container: #container, activeRule: /home }, { name: profile, entry: //localhost:8082, container: #container, activeRule: /profile } ]); start();模式二路由分发模式// router/index.js const routes [ { path: /home, microApp: home }, { path: /profile, microApp: profile } ];模式三构建时集成// webpack.config.js module.exports { plugins: [ new ModuleFederationPlugin({ name: shell, remotes: { home: homehttp://localhost:8081/remoteEntry.js } }) ] };状态管理方案对比方案一Redux// store.js import { createStore } from redux; const reducer (state, action) { switch (action.type) { case INCREMENT: return { count: state.count 1 }; default: return state; } }; const store createStore(reducer, { count: 0 });方案二Zustand// store.js import create from zustand; const useStore create((set) ({ count: 0, increment: () set((state) ({ count: state.count 1 })) }));方案三Jotai// store.js import { atom, useAtom } from jotai; const countAtom atom(0); function Counter() { const [count, setCount] useAtom(countAtom); return button onClick{() setCount(c c 1)}{count}/button; }组件设计原则单一职责原则// ❌ 违反一个组件处理多个职责 function UserProfile() { const [user, setUser] useState(null); const [loading, setLoading] useState(true); useEffect(() { fetchUser().then(data { setUser(data); setLoading(false); }); }, []); if (loading) return Spinner /; return ( div h1{user.name}/h1 p{user.email}/p /div ); } // ✅ 正确职责分离 function useUser() { const [user, setUser] useState(null); const [loading, setLoading] useState(true); useEffect(() { fetchUser().then(data { setUser(data); setLoading(false); }); }, []); return { user, loading }; } function UserProfile() { const { user, loading } useUser(); if (loading) return Spinner /; return ( UserCard user{user} / ); }可组合性function withAuth(Component) { return function AuthenticatedComponent(props) { const { isLoggedIn } useAuth(); if (!isLoggedIn) { return Redirect to/login /; } return Component {...props} /; }; } const ProtectedPage withAuth(MyPage);代码组织策略按功能组织src/ ├── features/ │ ├── auth/ │ │ ├── components/ │ │ ├── hooks/ │ │ ├── services/ │ │ └── index.js │ └── dashboard/ │ ├── components/ │ ├── hooks/ │ └── index.js └── shared/ ├── components/ ├── utils/ └── styles/按类型组织src/ ├── components/ │ ├── Button/ │ └── Card/ ├── hooks/ │ ├── useAuth.js │ └── useFetch.js ├── services/ │ └── api.js └── pages/ └── Home.js性能优化策略代码分割const Home React.lazy(() import(./Home)); const About React.lazy(() import(./About)); function App() { return ( Suspense fallback{Loading /} Route path/ component{Home} / Route path/about component{About} / /Suspense ); }懒加载const Image ({ src, alt }) { const [isLoaded, setIsLoaded] useState(false); return ( div {!isLoaded Placeholder /} img src{src} alt{alt} loadinglazy onLoad{() setIsLoaded(true)} / /div ); };总结前端架构设计是一个持续演进的过程需要根据项目规模和团队情况选择合适的方案。关键在于保持代码的可维护性和可扩展性遵循单一职责和高内聚低耦合原则合理利用设计模式和最佳实践持续关注性能优化和用户体验选择适合当前项目的架构方案才能让团队高效协作构建出优秀的产品。
http://www.gsyq.cn/news/1341666.html

相关文章:

  • 谷歌搜索SEO优化需要做什么?4个步骤快速做好站内优化
  • ElevenLabs方言语音开发指南(山东话专项版):从API密钥配置到“俺、恁、咋呼”等27个地域性语义单元精准建模
  • 谷歌搜索SEO优化需要做什么?解决未建立索引的2个技术点
  • ElevenLabs支持闽南语吗?福建话语音合成实测:从API调用到音色克隆的7步通关手册
  • ElevenLabs波斯文TTS落地难题全破解:从Unicode乱码、音节切分失败到自然语调合成的5大技术卡点
  • 紧急通知:Claude文档解析API响应延迟突增300%?立即启用这3个异步缓存+增量摘要策略保生产可用性
  • 揭秘Midjourney V6蒸汽波出图失败率高达63%的底层原因:3步绕过平台封禁,稳定生成霓虹故障美学
  • Midjourney单色调风格失效诊断图谱(含8种典型失败案例+对应--no、--style、--seed三重校准方案)
  • 【仅限西北开发者内部流通】ElevenLabs陕西话语音微调秘钥+定制音色包(含西安/榆林/延安三地口音模型)
  • 谷歌收录怎么做比较快?提升网页打开速度至2秒内的优化方案
  • 16. 编译与构建工具
  • 深入AMD Ryzen核心:SMUDebugTool硬件调试工具完整指南
  • D1053UK,1GHz频段下50W高功率输出的推挽式DMOS RF FET射频晶体管
  • 3步掌握AI视频生成:从零到专业的完整创作指南
  • 终极指南:如何用UndertaleModTool轻松修改和定制Undertale游戏体验
  • Python API网关:架构设计与实战
  • 2026年AI面试助手深度测评:鹅来面 OfferGoose如何革新你的求职体验?
  • KUKA KK67Y-YYYY-050伺服电机
  • γ能谱测量分析γ能谱信息复原技术【附仿真】
  • 1746-HSCE逻辑控制器
  • 干货合集:2026最新AI论文软件测评与推荐大全
  • 2026年当前宁波钢结构采购指南:聚焦余姚昌荣钢结构的核心优势 - 2026年企业推荐榜
  • 2026年近期注塑工厂“换血”关键:为何宁波信百勒成为智能水电气系统首选? - 2026年企业推荐榜
  • 远程会议还在发文档改来改去?我用 Rustpad 搭了个协作平台彻底解决
  • 虚拟内存与TLB:分页、换页算法深度解析
  • 2026会议室移动隔断哪家靠谱:厂房移动隔断/厕所隔断门/可移动隔断墙/吊轨移动隔断/商场卫生间隔断/复合板隔断/选择指南 - 优质品牌商家
  • 2026海外求职1V1辅导标杆名录:留学生内推靠谱吗、留学生回国就业、留学生回国找不到工作怎么办、留学生回国求职机构选择指南 - 优质品牌商家
  • 【软考高级架构】论文预测——论基于ATAM的架构评估方法
  • 受够了网盘限速?2026年更顺手的不限速同步盘选择
  • 硬盘免费检查软件-diskgenius-官方下载