作为一名多年经验的前端,路过,来回答一下。
其实,这是一个前端技术发展与分工的一个过程。
最开始的时候,是没有前端这一角色的,你可以想象为从服务器端获取一个文件,扔到浏览器端显示,因为要配合浏览器端解析,文件内容格式就需要特殊约定,也即html。也就是所谓的web1.0时代,大概在95年之前,那时我还没接触互联网,所以没有经历过。
然后浏览器端有了最原始的交互需求,常见的就是点击一下,会看到一定的变化。很显然,源文件已经在用户侧浏览器端,服务端是做不到的,也就有了javascript,当然微软也为ie开发了对应的jscript。于此同时,人们对颜值要求越来越高,这个可以理解,最开始仅仅几个人玩(主要是科学家),后来随着www的新起,更多的人参与进来,一看"真丑"。参与的人多了,也就有人商量着使用css来解决"丑"的问题。也就是1995到1999年这段时间,主要是伴随着功能的完善,版本的迭代。那时,我还在读书,可能还没接触互联网,所以也没有经历过。
很显然,随着时间的推移,技术的发展,人们的需求越来越高,人们已经不满足这种"文件包"的方式,更希望今天看到的是这样,明天看到的是那样,我昨天操作过的记录可以保存到今天甚至以后继续操作,也就是对数据有了保存的需求。不在满足你给我什么我看什么,而是希望看到自己想要的。也就需要数据库操作,后端技术要求就高了,也就出现了以php,jsp,asp为代表的"3p",实现了动态页面。很显然,这些技术除了处理数据库,处理数据,以及页面逻辑也非常不错。后端技术得到了重视,相反前端技术则被忽略,后端技术蓬勃发展,这种重后端,轻前端的状态一直持续到2005年。此时我应该已经触碰到了电脑,不过那个时候主要是用来玩,浏览浏览网页啥的,没有深入研究过底层技术与实现。
ajax技术的新起,进入web2.0时代。前端技术伴随着浏览器大战,处于混乱不堪的局面,不论怎样,前端技术同后端技术一样得到了人们的重视,此时jquery应运而生。我也就是从2008-2009年的时候,开始接触互联网相关技术,当时是asp.net,主要以c#语言为主。也就是以后端为主,那时候才刚刚开始有了所谓的"前端",有了前后端分离的意识,那时候的前端分离,无非就是前端处理视图呈现和页面交互,通过ajax调用后端提供的各种接口,返回相应数据。殊不知,其实那个时候一些前端技术已经在开始酝酿,html5,css3,es5等等,都将推动后来web的繁荣,可以说前端相关技术引起了人们非常高的重视。我从2010年开始工作,其实在学校没怎么接触前端,以为都是asp.net那一套,拖拖拽拽就ok了,面试的给我说要考js,不过还好让我第二天去。于是那天晚上到网吧下载了一本javascript相关的书籍啃了一晚上,第二天去笔试,得了个65分刚够及格的分数。或许当时前端人员稀缺,给了我一个试用期的机会,后来顺利转正。一入前端深似海,于是开始系统的学习前端的相关技术。
前后端分离,是各自蓬勃发展,繁荣的表现。后端有自己的业务逻辑要处理,前端也有各自的呈现要处理,前端提供模板,后端负责渲染,你干你的,我干我的,分工明确。后端有成熟的mvc模式和架构,前端出于配合的地位。当时的网站主要以官网+后台管理的形式存在,多以后端为重,因为后端有大量的业务逻辑需要处理,所以在mvc架构下,有的前端也需要掌握一门后端语言,让前端接手处理渲染。其实,这时候的前后端配合不像一开始那么"亲密",开始"打架",前端说这里需要后端处理,后端说这里前端也可以处理,因为二者有相互渗透之嫌。比如,后端处理前端提供的静态页面模板,势必需要对其做一些了解,如果前端处理渲染,势必也要对后端是如何提供数据要有一定了解。程序猿本身作为一种物种,为了进化的需要,技多不压身,想必也会有所涉猎。于是乎,前后端就在这种撕逼与配合中各自前行。
"duang,duang,duang",nodejs重磅来袭,其实js运行在后端很早就有了,只是没有nodejs彻底,来得那么及时。为了应对前后端的撕逼,有一些公司其实之前就尝试过将php的模板渲染也纳入前端,后端只处理业务逻辑,提供数据。这样在前端和后端,出来了一个中间层由php来完成,以为添加了这道磨合剂就相安无事了。却发现提高了人工成本的同时,不过是把撕逼提到了另一个层面。随着nodejs的完善,相关npm模块日趋增多,为何不让node接手php那一层呢?于是node解脱了php的尴尬境地,又回归到它的本质。
一般业务复杂,大公司都会采取类似分离解藕的策略,前后端这种模糊的存在也还有其用武之地。
前后端分离之后,前后端得到相同的重视,前端有了更多的思考空间,也为了应对人们日益增长的个性化需求,同时前端相关技术也落地生根。前端开始有了独立的架构设计。随着移动端的新起,前端交互开始变得尤为重要,为了更好的交互体验,单页面客户端渲染开始流行,多页面服务器端渲染一个很重要的原因就是网络延时严重影响用户体验。随着用户访问量的激增,客户端渲染可以缓解服务器端的压力。
题主所说的又开始后端渲染,其实跟最原始的后端渲染还是有区别的,更多的是引入node这样的中间层渲染。
至于很多人说的是因为seo的缘故需要后端渲染,也是有的,其实当移动端新起的时候,seo的因素已经显得不那么重要。主要的还是随着技术的发展,业务的沉淀,系统化的思维本身就是"分离-合并"的过程。还有就是现在网络带宽,服务器集群等基础设施的完善,也会对相应的架构设计有一定的影响。
以上是根据自己亲身经历与实践,在手机上一个字一个字敲击而成,或有失偏颇,还望谅解,可留言评论交流。
网友解答:荣荣荣荣ge'r'ge'r