vue学习笔记-01-前端的发展历史(从后端到前端,再到前后端分离,再到全栈)

  这篇文章是博主在看vue-前端发展简史的时候做的笔记,以供后续学习复习

文章目录

  • vue学习笔记-01-前端的发展历史(从后端到前端,再到前后端分离,再到全栈)
  • 1.后端为主的mvc时代
  • 2.基于ajax带来的spa时代
  • 3.前端为主的mv*时代
  • 4.node js带来的全栈时代
  • 5.总结

1.后端为主的mvc时代


springmvc流程图

优点

  • 一个很好的开发模式,降低代码的耦合,从架构上能让开发者明白代码应该写在哪里,为了让view更纯粹,可以使用thymeleaf,freemarker等模板引擎,使模板里面无法写入java代码,让前后端分工更加清晰

缺点

  • 前端开发重度依赖开发环境,开发效率底下,这种架构下,有两种协同模式,

    • 前端写demo,写好后让后端套模板,感觉像是前端写好静态页面,然后将页面交给后端,后端套成jsp,渲染数据啥的,很麻烦,套完了还需要前端确定,沟通成本挺大的
    • 前端负责浏览器端的所有开发和服务器端的view层模板开发,好处是ui相关的代码都是前端写,后端不用关注,不足就是前端需要重度绑定后端环境,环境成为影响前端开发的重要因素
  • 前端指责纠缠不清,模板引擎功能屌,依旧可以通过上下文变量来实现各种业务逻辑,只要前端弱势一些,就会被后端要求在模板层写出不少业务代码**,还有个重要的是灰色地带controller层,这个层是用来实现页面路由的,而这个页面路由本来应该是前端所关注的,但是却是由后端来实现的223**。此外controller本身也跟model纠缠不清,让人看了咬牙的业务代码经常出现controller层,坑爹。不过这些问题不能全部归于程序员的素养,不然jsp就够了223
  • 对前端发挥的局限性,性能优化之在前端做,空间非常有限,于是经常要后端来合作,但是由于后端框架限制,很难用comet,bigpipe等技术方案来优化性能

2.基于ajax带来的spa时代

  2005年-》ajax-》异步javascrip和xml被正式提出,js王者归来223(在这之前js都是在网页上贴狗皮药膏的223),于是开启了spa(single page application)单页面应用时代时代。

优点

  前端后端分工非常清晰,前后端关键协作点是ajax接口,看起来很美妙,但是回过头看看的话这和jsp差别不大,复杂度从服务器端的jsp里面移到了浏览器的js,使得浏览器变得很复杂,类似springmvc,这个时候开始出现浏览器端的分层架构。

缺点

  • 前后端接口的约定:如果后端接口一塌糊涂,或者说后端业务模型不够稳定,那么前端开发会很痛苦。不少团队也有类似尝试,通过接口规则,接口平台等方式来做,有了和后端一起沉淀的接口规则,还可以用来模拟数据,使得前后端可以在约定接口后实现高效并行开发
  • 前端开发的复杂度控制:spa应用大多以交互型为主,js代码超过十万行很正常(草),大量的js代码组织,与view层的绑定等,都不是容易的事。

3.前端为主的mv*时代

  • mvc(同步通信为主):model,view,controller
  • mvp(异步通讯):model,view,presenter
  • mvvm(异步通信为主):model,view,viewModel

大前端时代:后端:轻松

​ 为了降低前端开发复杂度,涌现了大量的前端框架,比如angular js,react,vue js,ember js等,这些框架总的原则是先按模型分层,比如templates,controllers,model,然后再在层内做切分如下图:

优点

  • 前后端职责清晰:前端工作在浏览器端,后端工作在服务器端,清晰的分工,可以让开发并行,测试数据的模拟不难,前端可以本地开发,后端则可以专注于业务逻辑的处理,输出用resful等接口
  • 前端开发的复杂度可控:前端代码很重,但合理的分层,让前端代码能各司其职,这一块值得赞赏,简单如模板的特性选择,就有很多研究,并非越强大越好,限制什么,留下哪些自由,代码如何组织,所有的一切设计,都值得话一本书讲讲。
  • 部署相对独立,可以快速改善产品体验

缺点

  • 代码不能复用,比如后端依旧要对数据做各种校验,校验逻辑无法复用浏览器端的代码,如果可以复用,那么后端的数据校验相对简单化。
  • 全异步,对seo不利,往往还要做服务器同步渲染的降级方案
  • 性能并非最佳,特别是移动互联网的环境下
  • spa不能满足所有需求,依旧存在大量多页面应用程序,url design 依旧需要后端配合,前端无法完全掌控

4.node js带来的全栈时代

​ 前端为主的MV*模式解决了很多很多问题,但如上所述,依旧存在不少不足之处。随着NodeJS的兴起,JavaScript 开始有能力运行在服务端。这意味着可以有一种新的研发模式:

在这种研发模式下,前后端的职责很清晰。对前端来说,两个UI层各司其职:

  • Front-end UI layer处理浏览器层的展现逻辑。通过CSS渲染样式,通过JavaScript添加交互功能,HTML的生成也可以放在这层,具体看应用场景。
  • Back-end UI layer处理路由、模板、数据获取、Cookie等。通过路由,前端终于可以自主把控URL Design,这样无论是单页面应用还是多页面应用,前端都可以自由调控。后端也终于可以摆脱对展现的强关注,转而可以专心于业务逻辑层的开发。

  通过Node, Web Server层也是JavaScript代码,这意味着部分代码可前后复用,需要SEO
的场景可以在服务端同步渲染,于异步请求太多导致的性能问题也可以通过服务端来缓解。前一-种模
式的不足,通过这种模式几乎都能完美解决掉。
  与JSP模式相比,全栈模式看起来是一种回归,也的确是-种向原始开发模式的回归,不过是一种螺旋上升式的回归。

基于NodeJS的全栈模式,依旧面临很多挑战:

  • 要前端对服务端编程有更进一步的认识。比如TCP/IP等网络知识的掌握。

  • NodeJS层与Java层的高效通信。NodeJS模式下,都在服务器端,RESTful HTTP通信未必高
    效,通过SOAP等方式通信更高效。一 切需要在验证中前行。
    对部署、运维层面的熟练了解,需要更多知识点和实操经验。

  • 大量历史遗留问题如何过渡。这可能是最大最大的阻力。

5.总结

​ 综上所述,模式也好,技术也好,没有好坏优劣之分,只有合适不合适,前后端分离的开发思想主要是基于SOC(关注度分离原则),上面几种模式,都是让前后端职责更加清晰,分工更加高效合理

vue学习笔记-01-前端的发展历史(从后端到前端,再到前后端分离,再到全栈)相关推荐

  1. vue学习笔记-02-前端的发展历史浅谈mmvm设计理念

    vue学习笔记-02-前端的发展历史浅谈mmvm设计理念 文章目录 1. MVVM模式的实现者 2.第一个vue程序 3.什么是mvvm? 4.为什么要用mvvm? 5.mvvm的组成部分 7.MVV ...

  2. 【狂神说Java】Vue学习笔记01:前端知识体系

    本文根据B站[狂神说Java]vue系列视频整理,如需观看视频,请点击链接跳转 [狂神说Java]Vue视频 2.前端知识体系 想要成为真正的"互联网Java全栈工程师"还有很长的 ...

  3. Vue学习笔记01——Vue开发基础

    一.Vue实例配置选项 选项 说明 data Vue实例数据对象 methods 定义Vue中的方法 components 定义子组件 computed 计算属性 filters 过滤器 el 唯一根 ...

  4. Vue学习笔记01:准备开发与调试环境

    文章目录 一.安装Vue.js (一)使用独立版本 1.开发版本 2.生产版本 3.案例演示 (二)使用CDN方式 1.采用 Staticfile CDN 2.案例演示 (三)使用NPM方式 1.安装 ...

  5. Vue学习笔记02——Vue路由

    Vue学习笔记01--Vue开发基础 一.初识路由 1.路由的作用 Vue的路由是前端路由,可以让组件之间互相切换. 2.vue-router.js文件 Vue的路由使用需要引入vue-router. ...

  6. Vue + Spring Boot 学习笔记01:实现用户登录功能

    Vue + Spring Boot 学习笔记01:实现用户登录功能 一.创建后端Spring Boot项目Book Management 二.创建前端Vue项目bm-vue 三.修改后端项目Book ...

  7. Vue学习笔记(四)—— 前端路由

    介绍 本文主要介绍路由的相关知识,当然主要是以Vue的路由为主要介绍对象. 有兴趣的朋友可以看看之前的文章: Vue学习笔记(一)-- 常用特性 Vue学习笔记(二)-- 组件开发 Vue学习笔记(三 ...

  8. 智能语音:好玩的语音控制是怎么实现的?学习笔记01

    智能语音:好玩的语音控制是怎么实现的?学习笔记01 智能音箱的技术架构 智能音箱主要涉及拾音.前端信号处理.语音识别.自然语言处理和语音合成等技术,现在一些产品甚至提供了声纹识别技术. 当然,智能音箱 ...

  9. Vue学习笔记(三)Vue2三种slot插槽的概念与运用 | ES6 对象的解构赋值 | 基于Vue2使用axios发送请求实现GitHub案例 | 浏览器跨域问题与解决

    文章目录 一.参考资料 二.运行环境 三.Vue2插槽 3.1 默认插槽 3.2 具名插槽 3.3 作用域插槽 ES6解构赋值概念 & 作用域插槽的解构赋值 3.4 动态插槽名 四.GitHu ...

最新文章

  1. Sublime Text2.0.2注册码
  2. python 字典操作 内存占用,python - 如何强行释放字典使用的内存? - SO中文参考 - www.soinside.com...
  3. Spring Cloud Greenwich 新特性和F版升级分享
  4. 【TensorFlow】tf.nn.softmax_cross_entropy_with_logits的用法
  5. JavaScript 函数参数
  6. Jmeter-3.0的源码导入eclipse并执行
  7. 1-3docker commit定制镜像
  8. pythongui界面小程序_python界面小程序
  9. 测试计划剔除 log剔除_我是如何在整个公司面前被剔除的(以及为什么这样做很好)...
  10. linux入门常识(三)
  11. 再看结构体对齐与小端联合问题
  12. (转)今天的人工智能比肩工业革命毫不夸张
  13. 算法:回溯五 数组全排列permutations
  14. dea模型java实例_Java数据流学习 - osc_deasqda4的个人空间 - OSCHINA - 中文开源技术交流社区...
  15. TortoiseSVN-1.9.4-中文语言包-官方下载地址
  16. 解决extremeComponents中文按拼音排序问题
  17. 【Error】 the public key is not available: NO_PUBKEY 4F4EA0AAE5267A6C
  18. MySQL数据库+jdbc -- 笔记
  19. 我是怎么画架构图的?
  20. 电气-接触器与空气开关

热门文章

  1. LeetCode 1764. 通过连接另一个数组的子数组得到一个数组
  2. LeetCode 1758. 生成交替二进制字符串的最少操作数(DP)
  3. 程序员面试金典 - 面试题 16.19. 水域大小(BFS/DFS)
  4. 程序员面试金典 - 面试题 16.06. 最小差(排序+双指针)
  5. 算法--二分查找--求平方根(循环法/递归法)
  6. mysql事务与jdbc事务_事务(mysql事务、jdbc事务)
  7. 5000并发的qps是多少_高并发架构设计
  8. apache mysql php 安装配置_Windows下Apache,MySql,PHP安装配置
  9. 2.MongoDB基本操作
  10. 元素(块、行内、行内块