【不要错过文末彩蛋】
引言
要了解React的思想,还得从下面这张图说起。
1.3 React Router
React Router是React中使用的路由库,通过管理URL来管理组件及对应的状态。Router组件本身只是一个容器,真正的路由要通过Route组件定义。Router组件支持嵌套路由、支持通配符,能让你轻松控制整个项目的路由结构。
1.4 Redux
Redux跟React没有直接的关系,本身可以支持React、Angular、Ember等等框架。Redux其实是Flux-like 更优雅的写法,下图对比了Flux与Redux的数据流向:
很多人都有过MVC架构的开发经验,从Spring MVC开始,写JSP,再到使用freemarker,然后再到狭义的前后端分离,也就是Web端通过ajax调用接口,使用JS把数据渲染到页面上。以前后端人员套页面,数据结构和业务逻辑混淆在一起,项目越来越大后,维护起来特别的繁琐。目前看到的前后端分离项目都是上图所示这种形式去实现的。尤其是在大公司,基本都是采用面向服务架构的开发模式,团队开发中的沟通成本以及职责明确特别重要。而前后端分离的意义主要在于解耦,解耦后前后端职责划分更明确,前端能做的事也越来越多,比如我们可以在Node层做些监控和日志管理,将SSO登录集成进Node层,使用PM2对Node做多进程管理。这样之后,后端项目就可以做成”微服务”式的架构。
从前端项目工程化管理的角度来看,后端项目”微服务”式架构有如下优势:
-
每个项目都很有针对性,仅关注某个业务方向。
-
每个项目可由不同团队独立开发,互不影响,能快速响应需求、及时推出市场。
-
允许在频繁发布不同项目的同时保持系统其他部分的可用性和稳定性:依赖少、构建速度快 & 上线速度快。
前端只与Node中间层进行数据通信,Node层则通过thrift接口与后端服务进行数据通信;Node 中间层的 API 设计遵循 RESTFul 的架构风格,并且都以 /api/* 做为前缀;Node 中间层可以视情况添加缓存服务
三、前端工程化
现代化的前端开发已经不仅仅是业务代码本身,而是涉及了很多方面的需求,比如:开发需求、共享需求、性能需求、部署需求。
3.1 开发需求
如果是新团队,在开始一个前端项目时,我们会先进行技术选型,然后定义代码规范,再根据业务模块拆分进行项目目录规划,这些相关的需求都算作前端开发需求。如果在成熟团队中,可能已经有技术沉淀了,怎么去优化和改进以及文档化就成为我们需要去琢磨的事了。
代码规范
ESLint是一个用来识别 ECMAScript 并且按照规则给出 告的代码检测工具,使用它可以避免低级错误和统一代码的风格。我们可以方便的在配置文件中配置自己想要的风格规范,通常推荐使用Airbnb JavaScript或者google的规范。
CSS预处理
我们可以使用less或sass来优化css的开发过程,而如果考虑到浏览器兼容性的hack问题,我们可以用postcss作为预处理工具帮我们自动解决这些 hack。
热更新
hmr能够在感知你的代码有变动的情况下自动调用编译工具编译源码,然后通过 livereload 自动刷新浏览器,这样做的话能节省你的调试时间。
Mock
由于采用了前后端分离的开发模式,在真实开发中,为了让前端开发不受后端进度的影响,我们需要对数据进行mock。前后端先约定API 接口定义,然后前端根据定义mock 接口。一般大公司会有自己的mock平台,小公司如果没有的话也可以使用开源的mock工具。
3.2 共享需求
对于公司而言,快速高效地实现业务是终极目标,这对前后端来说都是挑战。在前端团队中,能够形成基础组件库和业务组件库是一种必然需求。
所以在设计前端项目架构的时候,一定要考虑业务的组件化和可共享性。有人说开发通用组件是造轮子,其实造出符合自己的轮子何尝不是一种领悟。共享需求主要有四种:基础代码共享、通用工具方法共享、基础交互组件共享以及业务组件共享。
在组件方面,React提供了天然的组件结构,我们只需要在开发过程中,隐藏组件的内部实现,每个组件更独立,很容易形成可重用组件。
3.3 性能需求
如何对web资源的加载速度进行优化呢/p>
-
JS/CSS 代码压缩
-
JS/CSS 代码合并
-
图片压缩
-
CSS 图片精灵或雪碧图
这些过程都可以在前端工程的构建过程中使用Grunt/Gulp、webpack等构建工具实现。
3.4 部署需求
前端工程通常是由多人维护的,所以会用代码管理工具来管理源码,然后将开发流程和部署流程与git结合起来。多人分支协作流程:用git flow来管理代码分支。
四、总结
实践证明,围绕着React所建立起来的生态系统以及组件化开发思想能有效地分解大规模应用的复杂度、提高资源复用率。简单的说,React拥有以下你想要的特性:
-
同构渲染:服务器端和客户端共用一套代码,一份模板,两端使用。
-
完全组件化:自动分析加载页面的静态资源依赖。
-
生态圈:畅享所有 React 组件。
当然,使用React也有一些缺点,例如页面 javascript 文件体积动辄上百KB,这就限制了在移动端项目上的使用。我们可以通过一些离线化方案,例如使用 LocalStorage 缓存等来尽量的减少对大体积静态资源的请求。
总的来说,React的生态系统大而全,如果没有涵盖的部分,还请海涵。仅此与各位dalao共享一些个人观点,共同进步。
彩蛋
重磅 Chat 分享:
《高效学习,快速变现:不走弯路的五大学习策略》
分享人:
一名会在 B 站直播写代码,会玩杂耍球、弹 Ukulele、极限健身、跑步、写段子、画画、翻译、写作、演讲、培训的程序员。喜欢用编程实现自己的想法,在 Android 市场上赚过钱,有多次创业经历。擅长学习,习惯养成,时间管理。身体力行地影响他人做出积极的改变!目前就职于 ThoughtWorks,致力于传播快乐高效的编程理念。业余创立软件匠艺 区 CodingStyle.cn,组织超过30场技术活动。Chat简介:
说到学习呀,真是头大哟:碎片化,没有较长的连续时间来学习难专注,捧起书,手机却在召唤:来呀,快活呀~ 反正有,大把时光~做不到,看了很多书,生活中却做不到然并卵,学了方法和工具,找不到使用场景效率低,学习速度跟不上知识产生的速度记不牢,学习速度赶不上遗忘速度在这个知识泛滥、跨界竞争的年代,学习能力才是核心竞争力。你想想,过去一周,有没有哪一件工作是不需要学习就能完成的管如此重要,大部分人却没研究过学习这件事,以为上下班路上打开「得到」听本书,就是碎片时间终身学习者了。我是程序员,咨询师,培训师,这几个角色都要求我必须学得又快又好。本场 Chat 将分析学习的「趋势,原则,策略」,帮你站在更高的视角看待学习,从「内容,动机,交互,收益,资源」五方面制定策略,解决学习痛点,助你成为高效学习者!

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!