2019独角兽企业重金招聘Python工程师标准>>>

文章目录 [隐藏]

  • 1. 在服务器端渲染
  • 2. 在浏览器端渲染
  • 3. 大前端模式

最近在捣腾前端的东西,学习了一下前端知识。因这方面的知识太浅薄了,这篇简陋的博客就当抛砖引玉。

在Web开发中,前端攻城狮和后端攻城狮是不同的物种,一个追求任何场景下都美丽动人,一个追求巨大压力下举重若轻。但两者又必须密切分工合作,才能使得项目顺利进行。分工的核心在于在哪里渲染页面。不同的渲染位置决定了不同分工模式。

渲染是把数据填充进模板,按模板定制的样式把数据展示出来。如下图所示知乎的例子,图左上方的模板定制了我们看到的样子,其中?表示没有数据,这时将一个用户的数据(图左下方)填充进模板,便得到了我们看到的页面(图右边)。这个过程就是渲染。一共有三种渲染的方式。

1. 在服务器端渲染

浏览器发送请求到服务器端,服务器端处理请求并准备好数据,然后将数据写进前端编写的模板中,从而生成html文件,将生成的html发回给浏览器。这样浏览器上就显示页面了。

<table class="table"><tr><td>项目名称</td><td>组长姓名</td></tr><% for(var i = 0; i < project.length; i ++){ %><% } %><tr><td><%= project[i]['project'] %></td><td><%= project[i]['leadername'] %></td></tr ><% } %></table>

上面是一个模板。这份模板是一个html文件,其中带有数据绑定命令"<td><%= project[i]['project'] %></td>"。当后端程序整理好数据,在服务器端将数据填充模板,渲染出页面。如下代码所示,app.render(模板,project)语句的意思是,在服务器端将projectdata填充进模板生成页面,并将其发送给浏览器。

      app.get("/show",function(req,res){
            projectdata = preparedata();
            render(模板,projectdata);
      })

这个模式有一个问题——不能实现部分更新。即使用户点了一个按钮,产生了很细微的数据变动,也需要后端重新渲染整个页面再将页面发往浏览器端。如果页面存在大量的静态的部分,这种方式无疑不是高效的。

同时,前端工程师们需要用模板定义展现形式,后端工程师们需要用模板输出数据。久而久之,模板就会越来越复杂,越来越不可维护。

2. 在浏览器端渲染

现在一个趋势是渲染移动到浏览器完成。浏览器端发送请求后从服务器端接受到了模板和 J S代码。浏览器执行接受到的 JS 代码,JS 代码会从服务器请求数据,并将数据填充到模板中。下面的代码在页面加载完之后从接口 /online/projectlang 获取项目语言的数据,并将其写入html页面。 

$(document).ready(function(){$.ajax({url:"/online/projectlang",type:'get',dataType:'json',success:function(data){var list = '';for(int i = 0 ; i < data.length; i ++){var item = "<li><a href=\'#\'>"+ data[i] + "</a></li>";list += item;}$("#projectlang").append(list);},;error:function(xhr, status, error){console.log("projecthot ajax "+ error);},});})

这段代码执行的效果如下图所示。
      

利用运行在浏览器端的Javascript语言,前端工程师能够从后端服务器获取数据,进而按照业务逻辑渲染页面。这时候后端工程师只需要开发稳定的 API 提供数据就可以了。这种模式虽然依然是B/S模式,但开发的场景却和C/S模式比较相近。在浏览器端渲染的好处在于前端完全控制了模板,后端只需要开发相应的 API, 分工比较明确。并且支持部分页面更新。同时同一套后端服务可以同时支持不同的展示模式,比如同一套后端服务还可以支持移动开发。

当然啦,浏览器渲染也存在一些问题。其中最大的问题是对 SEO 不友好。搜索引擎的爬虫程序必须像浏览器一样执行 JS 代码才能获得页面的内容,从而提高了爬虫爬取页面的难度。

3. 大前端模式

借助神器Node.js,前端工程师终于把磨爪伸进服务器了。Node.js是一个来自老毛子的高性能异步服务器。如果只是一个服务器,Node.js并不出奇。一般服务器需要提供一种编程语言的runtime,方便开发者进行开发。Node.js因为异步的关系选择了异步性能很好的Javascript,就是前端工程师经常在页面上写的那个Javascript。这时前端工程师们一看,呀,这玩意我会呀。因此利用Node.js,前端工程师不再局限在浏览器,可以在服务器写Javascript代码了。这时前端工程师可以按需要,选择在浏览器端或者服务器端完成渲染。这个模式我们可以称之为大前端模式。

大前端模式下,前端工程师有更大的灵活性进行开发,从而可以避免前面两种模式的弊端,发挥他们的长处。但是,世间无十全十美之事,大前端模式也有自己的弊端。前端工程师们被赋予了服务器写代码的能力,也就需要承担服务器编程的责任。能力越大责任也就越大嘛。在服务器写代码,前端工程师必须承担日志、安全和负载均衡等后端工程师才需要承担的责任。大前端攻城狮相当于把前端攻城狮和后端攻城狮两种物种的基因杂揉在一起创造出来的混元体,其稀有程度可想而知。这也就是现在精通Node.js程序员少的原因。

以前第一种模式占主流地位,而现在第二种模式慢慢地受到了大家的关注。至于第三种模式,据我了解,目前只有淘宝一家在进行这方面的尝试(ps:美团酒店也在进行这方面的尝试,感谢“必填”网友提供的信息)。我个人比较喜欢第二种模式。第一种模式太老了。第三种模式对工程师要求太高,毕竟前端工程师和后端工程师的技能树差异比较大。但开发领域没有银弹,不同的场景需要选择不同的模型。

转载于:https://my.oschina.net/zhangyafei/blog/683896

前端和后端分工的三种模式相关推荐

  1. 前端请求后端数据的三种方式!

    在前后端分离的开发项目中,前后端联调的时候会出现这样那样的问题,尤其是在调取数据的程序上面,有时候前端给的前端给到后端的明明是正确的但就是无法拿到正确的数据,下面小千就来给大家详解一下常见的三种数据传 ...

  2. 前端请求后端数据的三种方式

    在前后端分离的开发项目中,前后端联调的时候会出现这样那样的问题,尤其是在调取数据的程序上面,有时候前端给的前端给到后端的明明是正确的但就是无法拿到正确的数据,下面小千就来给大家详解一下常见的三种数据传 ...

  3. LVS三种模式的区别及负载均衡算法

    转载自  LVS三种模式的区别及负载均衡算法 LVS简介 LVS(Linux Virtual Server)即Linux虚拟服务器,是一个虚拟的服务器集群系统,由章文嵩博士在1998年5月成立,在li ...

  4. vue 路由的三种模式

    路由模式解析 这里要讲vue-router的路由模式,首先要了解的一点就是路由是由多个URL组成的,使用不同的URL可以相应的导航到不同的位置.如果有进行过服务器开发或者对http协议有所了解就会知道 ...

  5. 应用负载均衡之LVS(一):基本概念和三种模式

    本文转载地址:https://www.cnblogs.com/f-ck-need-u/p/8451982.html 本文目录: 1. LVS简介 2. LVS-ipvs三种模式的工作原理 2.1 VS ...

  6. web服务器与网页表单通信,前端与后端通信的几种方式

    只有知道了历史,才能更好的把握现在和未来. 在项目中,通常前端开发主要完成两件事情,一是界面搭建,一是数据交互. 下面是我总结前端与后端交互的几种方式,本文只作简单介绍,不做深入了解. 一.AJAX ...

  7. web设计师和前端设计师的互动—前端工程师应该具备的三种思维

    如果你是一个天才工程师(马上可以离开),可以独立完成一个很多事情,你可以是一个怪咖,因为我相信没有一个人不会不佩服你.但现实归现实,多数人都不是天才,而我们在职场上也不是单打独斗,我们需要团队合作,需 ...

  8. 深入学习SAP UI5框架代码系列之七:控件数据绑定的三种模式 - One Way, Two Way和OneTime实现原理比较

    这是Jerry 2021年的第 8 篇文章,也是汪子熙公众号总共第 279 篇原创文章. 系列目录 (0) SAP UI5应用开发人员了解UI5框架代码的意义 (1) SAP UI5 module懒加 ...

  9. 【虚幻引擎UE】UE5 三种模式调用API详解(案例基于免费Varest插件)

    [虚幻引擎UE]UE5 三种模式调用API详解(案例基于免费Varest插件) 想通过UE5 调用API实现GET和POST, 可以通过自己编写C++方法, 或基于相关HTTP请求插件, 如Vares ...

  10. 微信小程序开发的三种模式

    摘要:截止到2018年6月底,正式上线发布的微信小程序已超过100万个.而越来越多的公司也已经在做微信小程序开发,许多人会觉得"微信小程序开发是开发者们的专利".答案是否定的,今天 ...

最新文章

  1. Python进程池,线程池,协程池
  2. 面试时算法题的解答思路
  3. leetcode457. 环形数组循环
  4. 论文浅尝 | Global Relation Embedding for Relation Extraction
  5. 数据库-MySQL-数据库设计-主键与索引
  6. [一步一步MVC]第二回:还是ActionFilter,实现对业务逻辑的统一Authorize处理 OnActionExecuting内如何获取参数...
  7. 【Cf #503 C】Sergey's problem(有趣的构造)
  8. JavaScript高级程序设计4.pdf
  9. 互联网日报 | 美团外卖日订单量突破4000万个;《王者荣耀》动画番剧启动;360金融更名为360数科...
  10. Perl_Tkx_Canvas绘图功能函数介绍
  11. seaborn颜色报错 ValueError: Invalid RGBA argument: [‘#f9802d‘, ‘#f26b15‘, ‘#fdc48f‘]
  12. 一牛网:最新6月手机综合性能评测
  13. PHP in_array 函数,解决大量数据判断in_array的效率慢,in_array 效率优化
  14. distill介绍及优秀博客记录
  15. 53个全球免费学术资源数据库整理,查资料写论文必备【开学必备】
  16. 怎么让笔记本合上后显示屏不灭
  17. java全栈系列之JavaSE-面向对象(接口定义与实现)042
  18. @Primary 和 @Qualifier
  19. 数字价值观察室 实录 | 数字化在企业内部的“对立”和“统一”
  20. 基于howler.js开发的音乐播放器

热门文章

  1. #C语言学习笔记#猴子偷桃问题
  2. 进化算法的产生与发展
  3. 全栈工程师是什么,为什么需要全栈工程师?
  4. 如何选择适合你的兴趣爱好(六十一),瓷器
  5. 【项目实例】使用C#开发纽曼USB来电通来电弹屏客户端小结
  6. 七月份的尾巴是狮子座
  7. 使用CSDN-markdown编辑器入门
  8. 计算机磁盘的卷是什么意思,磁盘卷和分区的不同是什么?
  9. Spring MVC的数据绑定(简单数据绑定+POJO类型绑定)
  10. php 公众号管理系统源码,SmartWx微信公众号管理系统 v2.0