年前由于ppk对前端的模板化进行了一定的批评,并认为Angular应该是一个面向企业开发的框架。但是由于包括我在内的很多人并不认可,所以跟国内一些人进行相应的讨论。而问的根源实际上在于如何界定前后端。所以我将我讨论的内容总结成下面的文章,希望能提供一个参考。
讨论地址
在web开发领域内,我认为可以将所有的技术分成三大类,它们可以分别称为后端,前端,工具(同时分成前端工具,后端工具,其它工具)。
前端,后端,工具
- 在服务器端运行的技术统称是后端技术,服务器端即后端。
- 在浏览器端运行下的技术是前端技术,流览器端即前端。
- 工具是工具,辅助前后端。工具是可以前,可以后,也可以什么都不是。工具具有其灵活性。
工具,即可以用于前端也可以用于后端,也可以是独立于网站业务的各种工具
grunt, bower, yeoman等都是工具,可以针对前端,也可以针对后端,所以在我看来,他们不是简单的归类于前端或者后端的,他们是工具。
任何开发都是需要工具的。
但是工具有时候也是有明确的倾向性的
比如我们可以认为bower是前端工具,属于前端的工具链。
而从更广泛的角度讲apache, nginx, make, ant, git等都是web工具。
HTML不是区分前后端的界线
有些人认为前后端的分界在于html,这种看法实际上是不对的。
原因在于
- 早期的动态网页的工作主要是运行于服务器端的,并且生成html与业务都在后端,同时也没有js的支持。那个时期是不存在现代意义的前端技术的。
- 随着web技术的发展,现在大部分的web开发环境都开始支持html模板,
在这个时期前端技术得到了极大的发展,但是html的动态内容究竟应该由谁来处理处于模糊时期,所以大家也困惑于前端与后端应该如何划分。这也是我们目前所处的时期。 - 之后的前端技术将不会不断的将加,不但可以完全处理html,css这样的展现,并且可以处理很大一部分的后端业务,以后的前端开发将不需要将html
放在服务器端处理 - 另外,随着web技术的广泛应用,桌面技术与移动应用更多的采用html技术作为ui界面,而这种应用可能是没有后端的。所以就没有了所谓的后端的概念。
所以我们可以看出来几点:
- 最初是不存在前端技术的,只有cgi/后端脚本,浏览器端是没有过多的开发的,除了生成html。所以这个时期后端与html是一体的
.HTML是作为文档出现的,所以后端技术的唯一目的就是生成文档。 - 技术是演化的,前端技术在ajax技术普及后,才变的越来越重要,html5与css3之后达到了高峰,未来将会更加重要。但是html仍然很多是在后端处理的。
- 随着桌面与移动应用的加入,未来前端的技术栈会更加的广泛。这时html是完全本地化的,没有服务器,所以模板全部是在前端的。
因此可以看出来html是无法界定前后端的,因为后端可以吐html,前端也可以独立的处理html.
任何web应用都无法避免与html交流。所以说以html来明确界定前后端显得很困难,特别是一些旧技术还能吐html出来。
虽然我的倾向是将html独立到前端,但是我不认为html是前后端的分界线,特别是当有人喜欢将模板通过后端技术来解释的情况下.
前后端技术不具有明显的差异性
都可以有数据库,
都可以多线程(虽然目前还不行),
都可以做并行运算。
都可以处理html。
所以前后在技术层面本质上没有差别,更多的是概念上的差别。
目前浏览器技术完全可以运行于后台。
浏览器都可以运行于服务器,那么这个概念也是不变的。
所以前端与后端不是以你的技术区分的,而是根据你的运行环境来区分的。
例如:
- javascript用运在浏览器端叫前端脚本,运行于node就是后端脚本。
- 比如搜索引擎技术是对html文档的处理技术,但是搜索技术绝对不会被归到前端技术上
html一样可以在无联网的环境下运行,这时不存在前端与后端的概念。这时只有桌面或者app的概念。
运行环境是唯一的前后端分界线
因为html与技术本身都无法成为我们去区分前后端的标准,那么运行环境就成了我们可以区分的唯一指标,并且相对是比较准确的。
在浏览器端运行的技术都是前端技术:
dom, html, css, javascript, 相关的前端类库与框架
在http服务器端运行的技术就是后端技术:
php, java ee, ruby/rails, nodejs/sails/expressjs, python/django
特殊情况:由于node技术带来的便利性,很多javascript类似可以同时支持前端与后端。比如validator.js,web-errors.js。
这种复合技术即是前端也是后端,所以为全栈开发创造了更好的条件,从而我们可以推出javascript是目前最好的全栈开发语言。
因为我们还知道mongodb的控制台是直接支持javascript的。
前端与后端经渭分明,不用纠结于html,也不用纠结于模板了。
这样,我们的所有逻辑都是通的。
过渡性的普遍性
大部分东西是不能完全区分开的。这种现象我认为可以称之为过渡性。过渡性是所有事物的普遍现象。即使在概念明确的情况下,有些技术也是即可以看成是前端技术, 也可以看成是后端技术的。前面的javascript与html就是例子。