使用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 相关文章推荐
input、button的不同type值在ajax提交表单时导致的陷阱
Feb 24 Javascript
说说JSON和JSONP 也许你会豁然开朗
Sep 02 Javascript
html超链接打开窗口大小的方法
Mar 05 Javascript
基于IE下ul li 互相嵌套时的bug,排查,解决过程以及心得介绍
May 07 Javascript
jqGrid随窗口大小变化自适应大小的示例代码
Dec 28 Javascript
JavaScript中统计Textarea字数并提示还能输入的字符
Jun 10 Javascript
禁用backspace网页回退功能的实现代码
Nov 15 Javascript
详细AngularJs4的图片剪裁组件的实例
Jul 12 Javascript
javascript编程开发中取色器及封装$函数用法示例
Aug 09 Javascript
通过封装scroll.js 获取滚动条的值
Jul 13 Javascript
vue2.0页面前进刷新回退不刷新的实现方法
Jul 31 Javascript
JS canvas实现画板和签字板功能
Feb 23 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
PHP生成随机用户名和密码的实现代码
2013/02/27 PHP
解析将多维数组转换为支持curl提交的一维数组格式
2013/07/08 PHP
php写入、删除与复制文件的方法
2015/06/20 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
PHP文件上传小程序 适合初学者学习!
2019/05/23 PHP
Javascript与vbscript数据共享
2007/01/09 Javascript
JavaScript中出现乱码的处理心得
2009/12/24 Javascript
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
2012/03/14 Javascript
jQuery中add()方法用法实例
2015/01/08 Javascript
Jquery插件实现点击获取验证码后60秒内禁止重新获取
2015/03/13 Javascript
JS定时器用法分析【时钟与菜单中的应用】
2016/12/21 Javascript
微信小程序 聊天室简单实现
2017/04/19 Javascript
vue2.0使用swiper组件实现轮播效果
2017/11/27 Javascript
Angular自定义组件实现数据双向数据绑定的实例
2017/12/11 Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
2018/05/04 Javascript
react 国际化的实现代码示例
2018/09/14 Javascript
移动端如何用下拉刷新的方式实现上拉加载
2018/12/10 Javascript
解决JQuery的ajax函数执行失败alert函数弹框一闪而过问题
2019/04/10 jQuery
JavaScript 自定义html元素鼠标右键菜单功能
2019/12/02 Javascript
javascript利用键盘控制小方块的移动
2020/04/20 Javascript
Python访问MySQL封装的常用类实例
2014/11/11 Python
python 回调函数和回调方法的实现分析
2016/03/23 Python
Python+微信接口实现运维报警
2016/08/27 Python
Python可变参数用法实例分析
2017/04/02 Python
Python3 中文文件读写方法
2018/01/23 Python
PYQT5实现控制台显示功能的方法
2019/06/25 Python
python多线程+代理池爬取天天基金网、股票数据过程解析
2019/08/13 Python
python 密码学示例——理解哈希(Hash)算法
2020/09/21 Python
微软瑞士官方网站:Microsoft瑞士
2018/04/20 全球购物
UML设计模式笔试题
2014/06/07 面试题
艺术应用与设计专业个人的自我评价
2013/11/19 职场文书
希特勒的演讲稿
2014/05/23 职场文书
2014年教育培训工作总结
2014/12/08 职场文书
教师业务学习材料
2014/12/16 职场文书
教师节倡议书2015
2015/04/27 职场文书
jQuery实现广告显示和隐藏动画
2021/07/04 jQuery