使用Node搭建reactSSR服务端渲染架构


Posted in Javascript onAugust 30, 2018

如题;本文所讲架构主要用到技术栈有: Node, Express, React, Mobx, webpack4, ES6, ES7, axios, ejs,  log4js, scss,echarts,ant desige

SSR的概念

Server Slide Rendering,缩写为 ssr,即服务器端渲染,因为是后端出身,所以其实早就明白是怎么回事,只是没这个具体名词的概念罢了,这个词被频繁提起也是拜近年来前端飞速发展所赐,主要针对 SPA应用,目的大概有以下几个:

解决单页面应用的 SEO

单页应用页面大部分主要的 HTML并不是服务器返回,服务器只是返回一大串的 脚本,页面上看到的大部分内容都是由脚本生成,对于一般网站影响不大,但是对于一些依赖搜索引擎带来流量的网站来说则是致命的,搜索引擎无法抓取页面相关内容,也就是用户搜不到此网站的相关信息,自然也就无流量可言。

解决渲染白屏

因为页面 HTML由服务器端返回的脚本生成,一般来说这种脚本的体积都不会太小,客户端下载需要时间,浏览器解析以生成页面元素也需要时间,这必然会导致页面的显示速度比传统服务器端渲染得要慢,很容易出现首页白屏的情况,甚至如果浏览器禁用了 JS,那么将直接导致页面连基本的元素都看不到。使用Express初始化Node服务

开始本项目首先你的电脑要安装有node,npm这个没什么好说的。其次本次Node服务用的框架是express;所以要安装: express-generator

然后使用express your-project初始化你的express项目

npm install express-generator -g
//执行这条命令全局安装express-generator,如果你不想全局安装把-g去掉即可

初始化express项目之后我们开始把react,webpack整合到这个node服务上。

初始化React项目并整合webpack

这里整合webpack使用的是webpack4的版本,如果你熟悉vue-cli(vue-cli3之前的版本)的话你应该会知道webpack配置有多少个文件,这里参考了vue-cli生成的webpack配置。

添加src文件夹

src文件夹下的内容都是整个react的一些核心配置,如请求处理,css样式,公共组件,路由,页面,stores全局状态数据。

配置.babelrc

因为用到ES6,ES7语法所以要配置.babelrc文件。这个文件东西不多下面直接贴出代码

{
 "presets": [["es2015", { "modules": false }], "react", "stage-0"],
 "plugins": [
 "transform-decorators-legacy",
 ["import", { "libraryName": "antd", "style": "css" }],
 "transform-runtime"
 ]
}

修改Node服务app.js

其实主要是加上这句:app.use('/', reactSSR); 其就是为了项目启动的时候开启热更新并渲染views中reactSSR.ejs这个模板引擎文件从而达到服务端渲染的目的。

项目结构

这里把项目主要的文件夹结构放到最后。

使用Node搭建reactSSR服务端渲染架构

项目GitHub地址: https://github.com/Uwah/node-react

后期部署上服务器之后会找个时间更新博客,主要是用到pm2

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js实现页面转发功能示例代码
Aug 05 Javascript
javascript中的=等号个数问题两个跟三个有什么区别
Oct 23 Javascript
javascript浏览器兼容教程之事件处理
Jun 09 Javascript
jquery实现将获取的颜色值转换为十六进制形式的方法
Dec 20 Javascript
javascript常用方法总结
May 14 Javascript
JavaScript实现邮箱地址自动匹配功能代码
Nov 28 Javascript
微信小程序五星评分效果实现代码
Apr 06 Javascript
JavaScript运动框架 解决速度正负取整问题(一)
May 17 Javascript
微信小程序实现弹出菜单功能
Jun 12 Javascript
Angularjs实现页面模板清除的方法
Jul 20 Javascript
tsconfig.json配置详解
May 17 Javascript
vue 取出v-for循环中的index值实例
Nov 09 Javascript
webpack4+Vue搭建自己的Vue-cli项目过程分享
Aug 29 #Javascript
JS实现的input选择图片本地预览功能示例
Aug 29 #Javascript
简述vue状态管理模式之vuex
Aug 29 #Javascript
jQuery实现的简单手风琴效果示例
Aug 29 #jQuery
angularjs实现对表单输入改变的监控(ng-change和watch两种方式)
Aug 29 #Javascript
jQuery实现的淡入淡出图片轮播效果示例
Aug 29 #jQuery
JS实现数组的增删改查操作示例
Aug 29 #Javascript
You might like
如何在Ubuntu下启动Apache的Rewrite功能
2013/07/05 PHP
ThinkPHP中的create方法与自动令牌验证实例教程
2014/08/22 PHP
PHP MYSQL实现登陆和模糊查询两大功能
2016/02/05 PHP
自己的js工具_Form 封装
2009/08/21 Javascript
js压缩工具 yuicompressor 使用教程
2010/03/31 Javascript
一个简单的jQuery插件制作 学习过程及实例
2010/04/25 Javascript
dwz 如何去掉ajaxloading具体代码
2013/05/22 Javascript
Windows8下搭建Node.js开发环境教程
2014/09/03 Javascript
使用微信内置浏览器点击下拉框出现页面乱跳转现象(iphone),该怎么办
2016/01/04 Javascript
关于验证码在IE中不刷新的快速解决方法
2016/09/23 Javascript
快速掌握jQuery插件开发
2017/01/19 Javascript
Canvas实现动态的雪花效果
2017/02/13 Javascript
微信小程序 密码输入(源码下载)
2017/06/27 Javascript
微信小程序 同步请求授权的详解
2017/08/04 Javascript
React Native 截屏组件的示例代码
2017/12/06 Javascript
快速解决brew安装特定版本flow的问题
2018/05/17 Javascript
对angular2中的ngfor和ngif指令嵌套实例讲解
2018/09/12 Javascript
Vue源码解析之Template转化为AST的实现方法
2018/12/14 Javascript
element-ui表格合并span-method的实现方法
2019/05/21 Javascript
python使用socket向客户端发送数据的方法
2015/04/29 Python
python 采集中文乱码问题的完美解决方法
2016/09/27 Python
python numpy格式化打印的实例
2018/05/14 Python
解决Python安装后pip不能用的问题
2018/06/12 Python
浅谈python实现Google翻译PDF,解决换行的问题
2018/11/28 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
2019/09/10 Python
动态设置django的model field的默认值操作步骤
2020/03/30 Python
Python数据模型与Python对象模型的相关总结
2021/01/26 Python
印度婴儿用品在线商店:Firstcry.com
2016/12/05 全球购物
德国运动鞋网上商店:Afew Store
2018/01/05 全球购物
linux面试题参考答案(3)
2012/09/13 面试题
楼面经理岗位职责范本
2014/02/18 职场文书
老龙头导游词
2015/02/11 职场文书
房地产销售主管岗位职责
2015/02/13 职场文书
2015年幼师工作总结
2015/04/28 职场文书
高温慰问简报
2015/07/21 职场文书
2019西餐厅创业计划书范文!
2019/07/12 职场文书