关于前后端分离的资料收集

收集一些关于前后端分离的资料,并做出一些总结,如有不正确之处请指出。

前言

什么样的场景下,应该使用前后端分离

         很简单。“不需要SEO的场景下,都应该使用前后端分离”。

          所以在后台管理中,没有任何理由不使用前后端分离,代指SPA。

          而在前台页面中,要认真考虑,不支持SEO的代价,不止几百万。

          前后需要用户登录的页面,往往是不需要有SEO的,这里也可以拆解出来。

转自:https://www.zhihu.com/question/267014376/answer/444793972

什么导致的前后端分离:

实际上是先有了单页面应用,才会出现前后端分离。

单页面应用可以让用户不需要下载 APP,就可以拥有相似的体现。并且与早期的移动网页相比,拥有更好的体验,当页面加载完后,每打开一个新的链接时,不再需要等网络返回给我结果;我也能快速的回到上一个页面,像一个 APP 一样的体现这样的应用。整个过程里,我们只是不断地从后台去获取数据,不需要重复地请求页面——因为这些页面的模板已经存在本地了,我们所缺少的只是实时的数据

什么是前后端分离:

前后端之间使用 JSON 来交流,两个开发团队之间使用 API 作为契约进行交互。

即后台选用的技术栈不影响前台。当后台开发人员选择 Java 的时候,我可以不用 JSP 来编写前端页面,继续使用我的 React 又或者 Angular。而我使用 React 时,也不影响后台使用某一个框架。前后端分离和微服务一样,渐渐地影响了新的大型系统的架构。微服务和前后端分离要解决是类似的问题,解耦——可以解耦复杂的业务逻辑,解耦架构。可要是说相像吧,消息队伍和前后端便相似一些,通过传递数据的形式来解耦组件。

转自:你真的懂前后端分离吗?

前后端分离的助力:

                                                                                    前端mv时代:

                      1.浏览器提供可能性:

                              局部刷新: ajax

                              前端路由: hashchange/history

                        2.框架及工具支持:

                             框架:vue/react

                              前端路由 vue-router/react-router

                               前端数据存储: vuex/redux

                         3.中间层:Node.js

                             环境:前端开发者不需要本地起后端环境

                             联调:清晰的对接方式,JSON 实现前后端来说都是比较纯粹的

                            效益:可渐进式,前期可以将请求全部转发后端服务器,而后可以逐步将 Node.js 层作为用户的直接数据交换层

                             职责分明,后端服务化,Node.js 层处理接口用户相关的页面响应 及 数据交换

                             可组合性,后端服务化,Node.js 负责组合拼装,实现接口可复用率

                        4.前后端分工调整为:

                              前端:接收数据/返回数据,处理渲染逻辑

                               后端:提供数据,处理业务逻辑

转自:实践中的前后端分离

前后端分离的好处:

关注点分离                 职责分离                   对的人做对的事                      更好的共建模式                 快速的反应变化

淘宝前后端分离的实战历史:

情景:老子一個人全包了啊啊啊..(独自搞定哦,牛逼)

Roles: PM, DBA, RD, FED, Designer, ...

Skills: Linux, MySQL, JAVA, JavaScript, HTML, CSS, ...

Tools: phpmyadmin, photoshop, powerpoint, ...

结果:产品上线了→代码维护时候就难受呀。。。

于是乎重构!为了更好的未来

下面来,WEB SERVER的架构改造:

后端MVC时代:




前端:那。。我呢?

这时的PM:前端你去套页面吧。(恩,完美的分工。。。)

到了互联网时代:根本顶不住了呀


没办法呀,前后端一起合作吧。。


好了,前端的代码出来了:


项目搞定了,可是前端的问题来了:

     ①前端代码越来越复杂

     ②无法统一协作模式,代码充满了约定

     ③JS跟CSS,依賴於後端產出的HTML

     ④有的数据來自AJAX,有的数据印在DOM上

     ⑤有的业务邏輯在前端,有的在Model层,更多的是在View层

好了,现在揭露本质:

      ①前后端依旧高度耦合

      ②前端依赖服务端开发环境

      ③在服务端View层高度耦合

      ④沟通成本高

      ⑤职责不清晰

VIEW层谁来維護?

     ①前端写Demo,后端套页面

              后端需要写HTML

               前端仍然确认后端写的HTML

      ②前端写View层,后端只管数据

               前端需要熟悉后端语言

                前端需要了解后端架构

可是还有问题呢:

     ① 无法良好的支持跨终端

      ②业务逻辑散落在应用中

      ③渲染逻辑强依赖后端页面

      ④只能用responsive design硬来

好吧,没什么好的办法,只能继续硬钢咯。。。。

    高度耦合的前后端分工

       ① 沟通成本上升

       维护成本上升

       无法正确且快速的响应变化

       ④代码的腐烂只是迟早的问题

恩恩。。

第一次前後端分離大戰爆发

  客户端mv时代出来了:


好了 ,分工吧。。。接口分離, 後端提供數據, 前端自己搞

MODEL层 - JavScript Object

VIEW层 - JavScript Template

业界满坑满谷的优秀方案

Backbone, EmberJS, KnockoutJS, AngularJS, React, etc.

好了,前后端职责清晰了:

后端:提供数据    处理业务逻辑    Server-side MVC架构  

前端:接收数据,返回数据   处理渲染逻辑   Client-side MV* 架构  代码跑在浏览器上

分離乾淨了,分工明確了,但是:

各层职责重叠,并且各玩各的

Client-side Model 是 Server-side Model 的加工

Client-side View 跟 Server-side是 不同层次的东西

Client-side的Controller 跟 Sever-side的Controller 各搞各的

Client-side的Route 但是 Server-side 可能没有

性能问题

     渲染,取值都在客户端进行,有性能的问题

    需要等待资源到齐才能进行,会有短暂白屏与闪动

     在移动设备低速网路的体验奇差无比

重用问题

     模版无法重用,造成维护上的麻烦与不一致

    逻辑无法重用,前端的校验后端仍须在做一次

    路由无法重用,前端的路由在后端未必存在

跨终端问题

    业务太靠前,导致不同端重复实现

    逻辑太靠前,造成维护上的不易

SEO问题

     渲染都在客户端,模版无法重用,SEO实现 麻烦

好了,再来,

第二次前后端分离大战爆发。。。

探讨:

重新定义前后端

传统认知的前后端


是依照 工作职责来划分的前后端

还是依照 硬体环境划分的前后端?

因為有了NODEJS

    我们有机会从工作职责上

     重新定义前后端的分层

重新定义的前后端


在服务器(JAVA) 与 浏览器(JS)的中间

架了一个中间层(NODEJS)

到底什么是node.js呢????

     前端熟悉的语言,學習成本低

    都是JS,可以前后端复用

    体质适合:事件驱动非阻塞I/O

    适合IO密集型业务

    执行速度也不差


好了好了,开始职责划分:


实例展示:

淘宝首页优化

                                     需求

                    静态资料展示,方便运营管理

                     更好的承载密集且庞大的流量

                                 解决方案

                    页面缓存与定时刷新,返回缓存资料

                    NodeJS产出静态页面到CDN,定时刷新

淘宝详情页优化

                                             需求

                         单日四亿PV,页面数据来自各个不同接口

                         为了不影响体验,先产生页面框架后

                         在发起多个异步请求取数据更新页面

                          这些多出来的请求带来的影响不小,尤其在无线端

                                         解决方案

                           在NodeJS端使用 Bigpiper 技术

                          合并请求,降低负担

                            分批输出,不影响体验

                                        接口性能优化

                               拆分大接口为独立小接口,并发请求

                               串行 => 并行,大幅缩短请求时间

                                            部属优化

                                一台NodeJS对多台JAVA服务器

                              合理的分配服务器带来最大的产出

                                          页面渲染优化

                               前后端共享模版    首屏服务器渲染

                               次屏浏览器渲染     局部刷新浏览器渲染

                                           单页面应用优化

                      前后端共享路由与模版       前端换页,浏览器端渲染

                     直接输入网址,服务器渲染     SEO问题迎刃而解

                                            可靠性优化

                            单元测试,页面测试,回归测试,持续集成

                                              更多的可能

转自:淘宝前后端分离实战

注:以上内容均为方便个人学习所做的总结笔记,详情请看原链接,有好建议欢迎留言,后续继续补充。。

觉得好的资料:

①:分布式之闲侃前后端分离的必要性

②:如何正确理解前后端分离?

③:前端发展史

④:前端发展历史

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容