nodejs搭建前端开发中间层
nodejs搭建前端开发中间层
nodejs对前端影响
nodejs
的出现为前端行业带来了无限的可能性,让很多原来只负责客户端开发的同学也慢慢开始接触和使用服务器端技术.
虽然nodejs
带来了很多的好处,但是它也存在自身的局限性.和那些传统老牌的编程语言相比,如JAVA,PHP.nodejs并不能成为它们的替代品,而且在可预估的未来,也很难撼动那些老牌编程语言的地位.
nodejs
应用场景
- 前端工程化,比如rollup,webpack在工程化方向的探索
- nodejs中间层
- 客户端集成nodejs,比如electron
- 市面上一些不太复杂的应用选择nodejs作为后端编程语言
这篇文章主要介绍nodejs
作为中间层用于前端和后段交互更方便有效获取数据
nodejs作为中间层
传统的的开发模式由浏览器直接和Server
层直接通信,中间层的加入意味着在浏览器和Server
层之间额外添加了一层。
简单的模式如下
原来客户端直接向Server发送请求,
Server层收到请求后经过计算处理将结果返回给浏览器.
如今浏览器将请求发送给node层,
node层经过一轮处理后再向Server层发起请求.
Server层处理完毕将响应结果返回给node层,
node层最后将数据返回给浏览器.
因为node层的出现,Server层可以只用关注业务本身,而不必理会前端对字段的特殊要求。
node层可以向server层获取数据,
再通过对数据的计算整合转换成符合前端UI要求的数据格式.
另外整个应用如果采用微服务架构,
那么Server层会有很多台管理单独业务模块的服务器,
node层就很好的适配了微服务的架构,
它可以向多台服务器发起请求获取到不同模块的数据再整合转化发送给前端
代理转发
代理转发在实际中有很多广泛的应用.浏览器首先将请求发送给node服务器,请求收到后node服务器可以对请求做一些处理,比如将原来的路径变换一下,请求头的信息改变一下,再把修改后的请求发送给远程真实的服务器.
远程服务器计算出响应结果再返回给node服务器,node服务器仍然可以对响应做选择性处理再分返回给浏览器.
代理转发可以解决前端日常开发中经常遇到的跨域问题,另外它还屏蔽了远程真实服务器的细节,让浏览器只与node服务器通信.下面是简单的实践.
接口数据可靠性修复
有的时候服务端返回给我们的数据可能并不是前端想要的结构,所有用到的展现数据都是后端通过异步接口(AJAX/JSONP)的方式提供的,前端只管展现。但是后端经常提供后端的数据逻辑,在前端还需要去处理这些数据逻辑。
页面性能优化 和 SEO
有点时候我们做单页面应用,经常会碰到首屏加载性能问题,这个时候如果我们接了中间层nodejs的话,那么我们可以把首屏渲染的任务交给nodejs去做,次屏的渲染依然走之前的浏览器渲染。(前端换页,浏览器端渲染,直接输入网址,服务器渲染)服务端渲染对页面进行拼接直出html字符串,可以大幅提高首屏渲染的时间,减少用户的等待时间。这种形式应用最广的比如 Vue 的服务端渲染,里面也有相关的介绍。
其次对于单页面的SEO优化也是很好地处理方式,由于目前的ajax并不被搜索百度等搜索引擎支持,所以如果想要得到爬虫的支持,那么服务端渲染也是一种解决方法。
接口聚合
前端可能某个页面有很多个需要请求很多个api,有些可能还是串行的有依赖关系,因为其是异步的每个api首服务的影响比较大,
所有展示的内容可能不是同时展示的因此nodejs可以做一层路由,当命中这个路由的时候,就在其内部去访问真正应用层代码
加载这个页面所有的资源并且值过滤出需要的字段,将当前页面接口
处理完毕之后在返回给前端,用于ui展示,这样这个页面可能只需要
读取1-2接口就搞定展示,对于用户体验有着大大提升
数据缓存
缓存对于提升系统性能,减小数据库压力起到了无足轻重的作用.一般常用的缓存软件是redis,它可以被理解成数据存储在内存当中的数据库.由于数据放在内存中,读写速度非常快,能极快的响应用户的请求.
接口限流
node做中间层可以对前端无节制的访问做限制.比如有些恶意的脚本循环访问接口,一秒钟访问几十次增大了服务器的负载.
总结
nodejs
可能实现真正意义上的中间层,使得后台开发人员只关注
业务本身提供接口返回,前端人员可自定义接口,即需要什么读取什么接口
怎么展示怎么写接口,即使不同服务不同pool也可以实现。
当然、凡事都没有绝对,如果写的不好的,不仅没有好处,反而增加请求链路,是的接口访问更加糟糕