1- # 前后端分离、web与static服务器分离
1+ # 前后端分离、web 与 static 服务器分离
22
3- ## 1. 为什么需要 “前后端分离、web与static服务器分离 ”
3+ ## 1. 为什么需要 “前后端分离、web 与 static 服务器分离 ”
44
5- web前端的发展历史大致可以分为两个阶段 :` node ` 之前与 ` node ` 之后。在 [ nodejs] ( https://github.com/nodejs/node ) 出现之前,前端的发展一直比较缓慢,主要是因为:
5+ web 前端的发展历史大致可以分为两个阶段 :` node ` 之前与 ` node ` 之后。在 [ nodejs] ( https://github.com/nodejs/node ) 出现之前,前端的发展一直比较缓慢,主要是因为:
66
7- * ` html/css/js ` 从设计之初开始,都只为浏览器服务,并且在整个web程序中 ,是以后端为主,前端为辅,前端需要配合不同的后端做出调整(如不同后端语言的模板),因此前端程序往往是与后端程序耦合在一起的;
8- * 开发、调试、运行都始终摆脱不了浏览器,并且没有多少可选的工具(如 combo,都是由后端语言在服务器端实现的),不能自动化、工程化的构建前端的代码;
9- * 由于浏览器的运行方式,前端代码一直不能有效的做到模块化、组件化,项目也无法版本化管理,项目间也不能很好的共享代码;
10- * 浏览器运行速度低下,也是早期前端发展的一大障碍,但 [ chromium] ( https://chromium.googlesource.com/ ) 项目的出现,让前端的运行架上了高铁的速度。
7+ - ` html/css/js ` 从设计之初开始,都只为浏览器服务,并且在整个 web 程序中 ,是以后端为主,前端为辅,前端需要配合不同的后端做出调整(如不同后端语言的模板),因此前端程序往往是与后端程序耦合在一起的;
8+ - 开发、调试、运行都始终摆脱不了浏览器,并且没有多少可选的工具(如 combo,都是由后端语言在服务器端实现的),不能自动化、工程化的构建前端的代码;
9+ - 由于浏览器的运行方式,前端代码一直不能有效的做到模块化、组件化,项目也无法版本化管理,项目间也不能很好的共享代码;
10+ - 浏览器运行速度低下,也是早期前端发展的一大障碍,但 [ chromium] ( https://chromium.googlesource.com/ ) 项目的出现,让前端的运行架上了高铁的速度。
1111
12- 基于以上的原因,前端一直不能很好的开发大型应用,所以在web程序中 ,前端一直处于配角的角色。在 [ nodejs] ( https://github.com/nodejs/node ) 出现之后,前端的发展迎来了质的飞跃,带来了我们当时无法想象的便利与潜力。
12+ 基于以上的原因,前端一直不能很好的开发大型应用,所以在 web 程序中 ,前端一直处于配角的角色。在 [ nodejs] ( https://github.com/nodejs/node ) 出现之后,前端的发展迎来了质的飞跃,带来了我们当时无法想象的便利与潜力。
1313
14- * ` node ` 拓展了 ` javascript ` 的运行环境,并且能够开发服务器端程序,这让前端的开发和运行摆脱对浏览器和后端语言的依赖,让它们成为了可选项;
15- * ` node ` 使 ` javascript ` 拥有了操作本地文件、IO等权限 ,于是前端开发人员便可编写各类工具,前端便可做到自动化和工程化;
16- * 再结合 ` npm ` ,前端代码的模块化、组件化,项目版本化,项目间共享代码也就不是问题了。
14+ - ` node ` 拓展了 ` javascript ` 的运行环境,并且能够开发服务器端程序,这让前端的开发和运行摆脱对浏览器和后端语言的依赖,让它们成为了可选项;
15+ - ` node ` 使 ` javascript ` 拥有了操作本地文件、IO 等权限 ,于是前端开发人员便可编写各类工具,前端便可做到自动化和工程化;
16+ - 再结合 ` npm ` ,前端代码的模块化、组件化,项目版本化,项目间共享代码也就不是问题了。
1717
1818[ nodejs] ( https://github.com/nodejs/node ) 出现了之后,又陆续出现了扩展前端运行领域的工具,如
1919
20- * [ electron] ( https://github.com/electron/electron ) , [ nw.js] ( https://github.com/nwjs/nw.js ) : 让前端可以开发桌面软件;
21- * [ react-native] ( https://github.com/facebook/react-native ) : 让前端可以开发原生app 。
20+ - [ electron] ( https://github.com/electron/electron ) , [ nw.js] ( https://github.com/nwjs/nw.js ) : 让前端可以开发桌面软件;
21+ - [ react-native] ( https://github.com/facebook/react-native ) : 让前端可以开发原生 app 。
2222
23- 随着 ` node ` 的出现与前端的发展,工程化自动构建便成了开发人员的一个基本需求,这便是我要说的 “前后端分离、web与static服务器分离 ”;
23+ 随着 ` node ` 的出现与前端的发展,工程化自动构建便成了开发人员的一个基本需求,这便是我要说的 “前后端分离、web 与 static 服务器分离 ”;
2424
2525## 2. 前后端分离
2626
@@ -96,8 +96,8 @@ web前端的发展历史大致可以分为两个阶段:`node` 之前与 `node`
9696
9797### 2.2 数据流分离
9898
99- * 前后端数据交流使用 ` json ` 数据格式,并且推荐使用全 ` ajax ` 的方式获取数据,不用传统的模板交流或渲染数据,如 ` java > jsp ` 、` php > smarty ` ;
100- * 但有时候为了加快前端响应速度,也可以把 ` json ` 数据通过模板返回,但要避免使用后端模板进行逻辑判断渲染。
99+ - 前后端数据交流使用 ` json ` 数据格式,并且推荐使用全 ` ajax ` 的方式获取数据,不用传统的模板交流或渲染数据,如 ` java > jsp ` 、` php > smarty ` ;
100+ - 但有时候为了加快前端响应速度,也可以把 ` json ` 数据通过模板返回,但要避免使用后端模板进行逻辑判断渲染。
101101
102102```
103103<script>
@@ -107,26 +107,26 @@ var data = JSON.parse('通过后端模板返回的 json 数据');
107107</script>
108108```
109109
110- ## 3. web与static服务器分离
110+ ## 3. web 与 static 服务器分离
111111
112- * ` web 服务器 ` :存放运行后端 web 应用的程序,以及前端 ` html ` 文件(入口文件)
113- * ` static 服务器 ` :静态资源服务器,存放前端除 ` html ` 文件之外的其他资源文件,包括 ` js ` , ` css ` , ` images ` ...
112+ - ` web 服务器 ` :存放运行后端 web 应用的程序,以及前端 ` html ` 文件(入口文件)
113+ - ` static 服务器 ` :静态资源服务器,存放前端除 ` html ` 文件之外的其他资源文件,包括 ` js ` , ` css ` , ` images ` ...
114114
115115一般地,还是以 django 框架为例,当前端把代码构建好之后,静态资源传到服务器相应的 ` static ` 目录,` html ` 文件传到相应的 ` templates ` 目录,启动后端脚本就可运行了。两者不分离主要有以下几个缺点:
116116
117- * 前端构建过程中会产生大量的冗余文件,这对后端程序来说十分不友好,比如后端打包程序备份的时候,就会导致包很大;
118- * 不方便前端开发人员管理线上代码,并且前端人员能够直接接触到后端代码,也不够安全;
119- * 静态资源会占用 web 服务器的资源和带宽,当访问量变大的时候,web与static服务器分离是必然的 。
117+ - 前端构建过程中会产生大量的冗余文件,这对后端程序来说十分不友好,比如后端打包程序备份的时候,就会导致包很大;
118+ - 不方便前端开发人员管理线上代码,并且前端人员能够直接接触到后端代码,也不够安全;
119+ - 静态资源会占用 web 服务器的资源和带宽,当访问量变大的时候,web 与 static 服务器分离是必然的 。
120120
121- web与static服务器分离之后 ,前端开发人员便可无顾虑的备份前端代码,清除冗余代码等等。
121+ web 与 static 服务器分离之后 ,前端开发人员便可无顾虑的备份前端代码,清除冗余代码等等。
122122
123- * 大多数情况下,会有多个项目共用同一个 static 服务器,如此便需要在服务器划分多个目录来存放静态资源文件;
124- * 构建的过程中,构建工具需要保证 ` html ` 对 ` js/css/images... ` 路径的正确引用,以及 ` css ` 对 ` images... ` 路径的正确引用,以 [ lila] ( https://github.com/senntyou/lila ) 为例,需要配置 ` staticServerUrl ` 为 ` http://www.static.com/project1 `
123+ - 大多数情况下,会有多个项目共用同一个 static 服务器,如此便需要在服务器划分多个目录来存放静态资源文件;
124+ - 构建的过程中,构建工具需要保证 ` html ` 对 ` js/css/images... ` 路径的正确引用,以及 ` css ` 对 ` images... ` 路径的正确引用,以 [ lila] ( https://github.com/senntyou/lila ) 为例,需要配置 ` staticServerUrl ` 为 ` http://www.static.com/project1 `
125125
126126## 4. 后续
127127
128128更多博客,查看 [ https://github.com/senntyou/blogs ] ( https://github.com/senntyou/blogs )
129129
130130作者:[ 深予之 (@senntyou )] ( https://github.com/senntyou )
131131
132- 版权声明:自由转载-非商用-非衍生-保持署名([ 创意共享3.0许可证 ] ( https://creativecommons.org/licenses/by-nc-nd/3.0/deed.zh ) )
132+ 版权声明:自由转载-非商用-非衍生-保持署名([ 创意共享 3.0 许可证 ] ( https://creativecommons.org/licenses/by-nc-nd/3.0/deed.zh ) )
0 commit comments