Node后端数据渲染

引言:对于前端开发者来说,在大型Web应用开发中,很多时候并不需要完全重新设计整个应用后台的架构,更多的情况下需要结合Node的能力帮助我们解决前后端分离开发模式下无法解决的问题。本文带我们学习通常前后端分离的开发模式下有哪些问题,利用Node端的服务又是如何帮助我们解决这些问题的。
本文选自《现代前端技术解析》。

SPA场景下SEO的问题

  通常情况下,SPA应用或前后端分离的开发模式下页面加载的基本流程是,浏览器端先加载一个空页面和JavaScript脚本,然后异步请求接口获取数据,渲染页面数据内容后展示给用户。那么问题来了,搜索引擎抓取页面解析该页面HTML中关键字、描述或其他内容时,JavaScript尚未调用执行,搜索引擎获取到的仅仅是一个空页面,所以无法获取页面上中的具体内容,这就比较影响搜索引擎收录页面的内容排行了。尽管我们会在空页面的里面添加keyword和description的内容,但这肯定是不够的,因为页面关键性的正文内容描述并没有被搜索引擎获取到。

  如果使用Node后端数据渲染(有人称之为直出,后文中也称之为直出层),在页面请求时将内容渲染到页面上输出,那么搜索引擎获取到的HTML就已经包含页面完整的内容,页面也就更容易被检索到了。

前端页面渲染展示缓慢的问题

  除了SEO问题,在前后端分离的开发模式下页面在JavaScript执行渲染之前是空白的(或提示用户加载中)。如图6-3所示,用户在看到数据时已经花费的网络等待时间:DOM下载时间 + DOM解析时间 + JavaScript文件请求时间 + JavaScript部分执行时间 + 接口请求时间 + DOM渲染时间。这时用户看到页面数据时已经是三次串行网络资源请求之后的事情了。

           
                  前后端分离方式页面渲染主要流程

  然而,如果使用后端直出来进行数据渲染,首先SEO的问题不复存在,用户浏览器加载完DOM的内容解析后即可立即展示,网络加载的问题也得到解决。其他的逻辑操作(如事件绑定和滚动加载的内容)则可按需、按异步加载,从而大幅度减少展示页面内容花费的时间。那么一般Node后端数据渲染的整个流程又是怎样的呢?

  图6-4为目前一般后台页面数据直出的通用架构设计,直出层接受前端的路由请求,并在Node端的Controller层异步请求服务接入层接口,获得Model数据并进行组装拼接,然后提取相对应的Node端View模板渲染出HTML输出给用户浏览器,而不用通过前端JavaScript请求动态数据后渲染。不仅如此,直出层根据不同的浏览器userAgent,也可以提取不同的模板渲染页面返回给不同的用户浏览器,所以这种实现方式不仅非常适合大型应用服务的实现场景,而且可以方便地实现网站的响应式内容直出。

         
                      Node直出层开发Web架构

  本文选自《现代前端技术解析》,点此链接可在博文视点官网查看此书。
                     
  想及时获得更多精彩文章,可在微信中搜索“博文视点”或者扫描下方二维码并关注。
                       

时间: 2024-10-25 18:31:57

Node后端数据渲染的相关文章

细说后端模板渲染、客户端渲染、node 中间层、服务器端渲染(ssr)

细说后端模板渲染.客户端渲染.node 中间层.服务器端渲染(ssr) 前端与后端渲染方式的发展大致经历了这样几个阶段:后端模板渲染.客户端渲染.node 中间层.服务器端渲染(ssr). 1. 后端模板渲染 前端与后端最初的渲染方式是后端模板渲染,就是由后端使用模板引擎渲染好 html 后,返回给前端,前端再用 js 去操作 dom 或者渲染其他动态的部分. 这个过程大致分成以下几个步骤: 前端请求一个地址 url 后端接收到这个请求,然后根据请求信息,从数据库或者其他地方获取相应的数据 使用

实现前后端数据交互的方法

前端工程师的职责:1.UI重构  2.在正确的区域渲染出服务端的数据. 毕竟,我们要构建一个大的web应用,必然不是普普通通的静态页面构成. 下文将罗列前端工程师应该必备的同后端打交道的常用技能. 1.服务端渲染 谈起服务端渲染,对于动态服务而言,这个世界上跑的大多数页面都经过服务端的数据渲染,接口->前端赋值->模板渲染. 这些都是在服务器完成,在我们查看源码的时候,可以看到完整的html代码,包括每个数据值. 常用的php模板:Smarty,Blade,Mustache. 如果使用Node

前后端数据交互方法

在此介绍几种常用的前后端数据交互方法,并给出使用建议.以提高前后端协同开发的效率. 此文章适合前后端协同开发经验不足的新手阅读. 目录: HTML赋值 JS赋值 script填充JSON AJAX获取JSON WebSocket实时传输数据 总结 HTML赋值 输出到 Element 的 value 或 data-name <input type="hidden" value="<?php echo $user_avatar;?>" /> &

angularjs学习笔记--$http、数据渲染到表格、路由、依赖注入、provider

1—$http 可以从服务器中获取更大的数据集,这里使用angularjs的内置服务称为$http.使用angularjs的依赖注入为phoneList组件的控制器提供服务. 在我们的控制器中使用angularjs的$http服务,向我们的web服务器发出http请求,以获取文件中的数据. app/phone-list/phone-list.component1.js: angular.module('phoneList').component('phoneList',{ templateUrl

关于前端和后端数据交互问题

作者:NimoChu链接:https://www.zhihu.com/question/26532621/answer/33144979来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 重新修改答案后整理了一份<前后端数据交互方法> 在此介绍几种常用的前后端数据交互方法,并给出使用建议.以提高前后端协同开发的效率. 目录: 1. HTML赋值2. JS赋值3. script填充JSON4. AJAX获取JSON5. WebSocket实时传输数据6. 总结 1.

前后端数据交互

前后端数据交互以及连接数据库流程: 首先需要在后台建立数据库,并且连接数据库,打开apache服务器确保所有文件代码在服务器中运行 这里是封装好的连接数据库通用模式(一定要确保数据库是否连接成功) 1:前端jsp页面设置form表单或是可以让用户提交用户信息的格式,确定需要传递的参数name让用户输入,通过点击按钮后submit()提交到后台: (这里是引用了bootsrap的模态框) 通过ajax传递参数(引用已经封装好的ajax) 自己封装好的ajax: function ajax(opti

Mapnik读取PostGIS数据渲染图片

__author__ = 'Administrator' # encoding: utf-8 import sys import datetime import mapnik m = mapnik.Map(256,256,"+proj=latlong +datum=WGS84") #m.background = mapnik.Color('steelblue') # set background colour to 'steelblue'. s = mapnik.Style() r =

【springMVC】简单的前后端数据交流

最最常见两种,一则返回视图模板(文档),二则为json数据.就使用一个源代码文件来看看springmvc是怎么做到的. 1.UserController.java源代码文件 (这里额外的使用了fastjson架包来将对象解析为json) package com.zay; import com.alibaba.fastjson.JSON; import org.springframework.stereotype.Controller; import org.springframework.web

spring mvc 前后端数据交互笔记(解决httprequest400,415问题)

1:前端发送数据,后端返回界面 A:浏览器 $.ajax({     url: "/rest/userController/login",     type: "post",     data: {"username": "chenhao", "password": "123456"} }); B:服务端 @RequestMapping("/login") publi