"上古时期”的Web编程模式到现代化的康庄大道

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shangrila_kun/article/details/89034234

“上古时期”的编程模式

这里我仅介绍使用jsp+servlet or jsp+ssh/ssm编程web项目的方式,其他像php,.net这种作者我也不会。
在那个时期,当时,我还是一个大二学生,刚学完java,学完了servlet,准备大干一番来做个项目了。可是前端页面谁来做了,身边也没人帮我做前端。那么我需要准备什么了:

1.自学了一遍HTML,CSS,JS。
2.开始构建静态页面。
3.静态页面转成JSP。
4.服务端开始使用servlet写控制器,实现内部逻辑,再调整到JSP页面,JSP页面从容器中取出控制器传送的值,并展示。
注:这种方式,痛苦不堪(又当爹又当妈,又搞前端,又搞后端),身为后端,还要兼顾前端的时,要调页面,要获取参数,导致精力很分散。

大三时,身边终于出现了有帮我写页面的同学了,可是了,这个时期,我们还不会前后端分离,我们的分工模式是什么了:

负责写前端的同学只会写静态页面,累哭。(jsp,java都不懂)
后端的同学(我)需要将静态页面转换为JSP,然后后端逻辑写好了跳转到JSP页面,从容器取值展示。
注:这种方式,痛苦减轻了,但是了还是要做些前端的工作。

  • 旧的开发模式
  1. 需求来了
  2. UI做出设计图
  3. 前端工程师做静态页面,写css,js
  4. 后端工程师将html页面套成jsp页面(前后端强依赖,后端必须要等前端的html做好才能套jsp。如果html发生变更,就更痛了,开发效率低)
  5. 集成出现问题
  6. 前端返工
  7. 后端返工
  8. 二次集成
  9. 集成成功
  10. 交付、部署
  • 在这种“上古时期”的Web编程模式下,问题极其多:
  1. 后端开发人员若不懂前端,在html转jsp,jsp与后端对接的时候,极其繁琐,麻烦,且容易出错,还需要前端人员一起解决。
  2. jsp上动态资源和静态资源全部耦合在一起,如果没有做缓存,那么对于用户的每一次请求,服务器都会收到各种各样的静态资源和动态资源的http请求,导致服务器的压力比较大,性能比较低。
  3. 这种模式在Web端(有网线,带宽高,网络稳定)还好,如果是移动端,像手机,pad(网络不稳定、流量贵)等设备请求资源的话,那用户体验将比较差,不仅慢、还费流量。所以,在上古时期一般网页都不会像今天这样出现这么高清的图片,这么多小视频等资源内容。
  4. 每次页面请求jsp时,都会先去访问servlet,再用输出流输出的html页面,效率没有直接使用html高。
  5. 如果后端出现bug,那么页面跳转就会出错,整个页面都将不会出现,用户体验差。
  6. 如果正式投入生产,发现前端存在bug,这个时候前端调了还得后端来配合该耦合的代码。
  • 这种模式下,用户访问web页面的过程是什么了

客户端发送请求->服务端的servlet或controller接收请求(后端的程序员还要自己写路由,决定跳转到哪个页面)->调用service,dao代码完成业务逻辑->返回jsp页面并展示动态内容。

  • 为什么性能会比较低了

我们针对单个项目中html,css,js,img,后端代码都耦合在一起,并部署在一台服务器上。并给项目配上域名:http://www.haoeasy.cn,当我们访问该域名,会出现什么了?浏览器会通过本地缓存中查找是否有该域名对应的ip地址,如果没有则通过本地的dns域名解析器找,本地dns域名解析器找不到,则向上一级域名解析服务器去找,等找到该域名对应的ip,则将请求发送给该服务器,对服务器请求的过程是采用tcp/ip协议的,tcp协议是用来保障发送方和接受方进行可靠通信的协议,需要进行三次握手,服务器接受到请求就需要返回发送方请求的资源。假如该域名对应下的资源有10个css,10个js,50张图片,且业务上需要对数据库进行10次交互,那么访问域名的第一次,在浏览器没有换成的情况下,至少需要对服务器发送80个tcp连接,如果有1000个用户同时访问,那么服务器瞬间要收到80000个tcp连接。(处理请求需要占用CPU、消耗内存、进行磁盘读写)这样有可能导致服务器宕机。如果我们用2台服务器进行前后端分开部署,那么1000个用户同时访问,在后端服务器上可能就只会产生10000个tcp连接。一下子减轻了很多。

  • 哪里有压迫,哪里有痛点,哪里就有聪明的程序员来解决

后端的程序员不干了,前端程序员你不能拿着和我一样的工资,干比我轻松这么多的事,你们得担起责任来。
于是,前端程序员需要学习什么了

  1. html、css、js,当然这些肯定要。
  2. 熟练使用至少三大前端框架中的一个,如 vue、Angular和 react
  3. gulp、 webpack 、vue-cli 、git
  4. 理解前端常用设计模式,如闭包、面向对象、MVC、MVVM、单项数据流、路由、单元测试、SSR、意大利面条、模块化、组件化、函数式、纯函数、高阶函数、不可变数据;
  5. 熟悉 HTTP,了解请求、响应、缓存、代理、反向代理 https 等;
    备注:是不是,后端程序员很聪明了,大笑。

其实,越是大型互联网公司,前端项目越是应该工程化,包括前端项目的版本管理,运维。桃花潭水深千尺啊,技术学无止境,当然,不学肯定要被淘汰。所以从事技术之人,玩就玩到极致,了解就了解极深。
多丰富的前端知识

现代的康庄大道

  • 现代化的编程模式是什么

浏览器发送http请求-> 从静态资源服务器上直接获取html页面(路由器由前端制定)-> html页面调用后端接口(ajax技术)-> 接口返回json数据格式的数据-> 前端获取数据并在页面上进行渲染。

  • 新的开发模式
  1. 需求来了
  2. UI做出设计图
  3. 前后端约定接口&数据&参数
  4. 前后端并行开发(无强依赖,可前后端并行开发,如果需求变更,只要接口&参数不变,就不用两边都修改代码,开发效率高)
  5. 前后端集成
  6. 前端页面调整
  7. 集成成功
  8. 交付、部署
  • 新的开发模式下,对前端开发人员的要求

把心思放到前端框架知识、模块化、设计模式、浏览器兼容、性能优化、前端工具等技术上。
重点追求页面的流畅度、用户体验、兼容性上。

  • 新的开发模式下,对后端开发人员的要求

把心思放在java基础,设计模式,jvm原理,spring+springmvc、spring boot原理及源码,linux,mysql事务隔离与锁机制,redis,http/tcp,多线程,分布式架构,弹性计算架构,微服务架构,java性能优化,以及相关的项目管理等等。
重点追求项目的高并发、高可用、高性能(三高)、安全、存储、业务等。

猜你喜欢

转载自blog.csdn.net/shangrila_kun/article/details/89034234