开发模式有哪些?
# 开发模式
- 前后端不分离
- 前后端半分离
- 前后端完全分离
# 前后端不分离
在 Web 诞生之初,最开始的时候,使用的就是静态网页。
那个时候,网页的形式也非常简单,就一个静态的 html 页面。
之后,发现一个问题,有些网页仅仅是页面的内容不一样,但是页面的结构和样式是完全相同的。例如新闻详情、购物网站的物品详情页。
所以出现了动态网页的技术。数据是存储在数据库里面,服务器从数据库拿到数据,填充动态页面里面。
那个时候流行的技术就是 ASP、JSP、PHP,模板引擎也脱颖而出。
// 静态网页
<p>this is a test!!!</p>
2
使用模板引擎之后,我们就需要对我们的页面“挖坑”。根据所使用的模板引擎不同,“挖的坑”也不一样。
<p><%=data %></p>
服务器取到数据之后,就会将这个数据和挖坑的页面结合。
data: 今天在下雨
<p>今天在下雨</p>
2
这种开发方式从 Web 诞生之初一直持续了十多年的时间。首先我们前端工程师先书写静态页面,接下来找出可能会发生变化的地方,进行“挖坑”,之后,服务器取到对应数据之后,再将这个数据填充到页面里面。组装好页面之后,将这个页面返回给客户端。
所以,最早的时候,完整页面的渲染是在服务器渲染的。
这样开发也有问题,后端的技术很多:Java、PHP、C++、Go、Ruby、Python..
不同的语言,对应的模板引擎是不一样的。哪怕是同一个语言,也存在多种模板引擎。
- Java(JSP、Thymeleaf、Freemarker...)
- PHP(Smarty、Twig、HAML、Liquid...)
- Python(Jinja2、Mako、pyTenjin...)
这里就会涉及到一个问题,前端需要接触大量的模板引擎语法。
nodejs,作为 js 在服务器端的一种延伸,在诞生之初,也把后台的那一套东西捡过来了。
nodejs 也有对应的模板引擎。(Jade、Ejs、handlebars、swig...)
注:Jade 模板引擎由于商标的问题,现在已经改名为 Pug
接下来我们就来体验一下,早期的开发方式。
具体代码参阅相关章节示例代码。
# 前后端半分离
2005年,Ajax 技术的诞生,诞生了一种新的开发模式:单页应用。由单页应用兴起了前后端分离的概念。
前后端分离的概念,严格的讲,也分为两个阶段:前后端半分离和前后端完全分离。
要讲清楚前后端半分离,先得从后端开发说起。在做后端开发的时候,分为三层:表现层,业务层,持久层。
表现层其实又分为三个部分:MVC
- Model(数据)
- View(视图)
- Controller(控制器)
在前后端不分离的时代,这些工作全部都是后端的工作。
后端负责将 html 挖坑成模板(V)(只不过他们会偷懒,交给前端来做),然后C控制将M填充到V里面,形成完整的 html,然后返回给客户端。
前后端半分离,就是将MVC 中的V这一端完全交给前端,服务器不再负责页面渲染,只是负责书写数据接口。
整体流程:
首先客户端发送 http 请求,请求回来一个空壳页面
<body>
<div id="container"></div>
<script src="./index.js">
</body>
2
3
4
客户端渲染最大的缺点就是对搜索引擎不友好,因为第一次回来的是一次空壳。
首屏渲染问题。如果你的请求数据量很大,首屏会有一段时间的空白期。
总结如下:
- 搜索引擎问题
- 首屏渲染问题
后面,随着 nodejs 的出现,前后端可以进行完全分离。并且为了解决上述的问题,服务器端渲染又重新回到了大家的视线。
# 前后端完全分离
2009年,nodejs 出现了,意味着前端开发人员可以搭建服务器。
并且为了解决上述的问题,我们选择重新使用服务器端渲染。
但是,这一次的服务器端渲染,不是指在后端服务器进行渲染,而是在中间服务器(nodejs)上面进行渲染。