使用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 相关文章推荐
浅析jQuery(function(){})与(function(){})(jQuery)之间的区别
Jan 09 Javascript
页面加载完成后再执行JS的jquery写法以及区别说明
Feb 22 Javascript
js toFixed()方法的重写实现精度的统一
Mar 06 Javascript
Jquery Ajax方法传值到action的方法
May 11 Javascript
Linux下使用jq友好的打印JSON技巧分享
Nov 18 Javascript
jquery通过ajax加载一段文本内容的方法
Jan 15 Javascript
使用控制台破解百小度一个月只准改一次名字
Aug 13 Javascript
jquery实现全选、反选、获得所有选中的checkbox
Sep 13 Javascript
chrome浏览器如何断点调试异步加载的JS
Sep 05 Javascript
深入理解JavaScript继承的多种方式和优缺点
May 12 Javascript
微信小程序 密码输入(源码下载)
Jun 27 Javascript
jquery传参及获取方式(两种方式)
Feb 13 jQuery
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调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
2015/07/29 PHP
PHP中file_put_contents追加和换行的实现方法
2017/04/01 PHP
php获取目录下所有文件及目录(多种方法)(推荐)
2019/05/14 PHP
Ajax 数据请求的简单分析
2011/04/05 Javascript
仿新浪微博登陆邮箱提示效果的js代码
2013/08/02 Javascript
onmouseover和onmouseout的一些问题思考
2013/08/14 Javascript
JavaScript新窗口与子窗口传值详解
2014/02/11 Javascript
jQuery插件formValidator实现表单验证
2016/05/23 Javascript
AngularJs Javascript MVC 框架
2016/06/20 Javascript
jQuery层次选择器用法示例
2016/09/09 Javascript
Bootstrap页面缩小变形的快速解决办法
2017/02/03 Javascript
JavaScript callback回调函数用法实例分析
2018/05/08 Javascript
vue中,在本地缓存中读写数据的方法
2018/09/21 Javascript
PHP读取远程txt文档到数组并实现遍历
2020/08/25 Javascript
JavaScript实现轮播图效果
2020/10/30 Javascript
[00:06]Yes,it worked!小卡尔成功穿越时空加入战场!
2019/07/20 DOTA
python 实现堆排序算法代码
2012/06/05 Python
Python中__name__的使用实例
2015/04/14 Python
实例讲解Python中SocketServer模块处理网络请求的用法
2016/06/28 Python
利用Django内置的认证视图实现用户密码重置功能详解
2017/11/24 Python
Python单元测试unittest的具体使用示例
2018/12/17 Python
用Anaconda安装本地python包的方法及路径问题(图文)
2019/07/16 Python
Django Admin中增加导出CSV功能过程解析
2019/09/04 Python
python多进程并行代码实例
2019/09/30 Python
python 解压、复制、删除 文件的实例代码
2020/02/26 Python
JetBrains PyCharm(Community版本)的下载、安装和初步使用图文教程详解
2020/03/19 Python
CSS3实现淘宝留白的方法
2020/06/05 HTML / CSS
全球最大的服务市场:Fiverr
2017/01/03 全球购物
SCDKey德国:全球领先的数字游戏市场
2019/04/09 全球购物
写给妈妈的道歉信
2014/01/11 职场文书
兰兰过桥教学反思
2014/02/08 职场文书
个人综合鉴定材料
2014/05/23 职场文书
暑期教师培训方案
2014/06/07 职场文书
报表员工作失误检讨书范文
2014/09/19 职场文书
滴水洞导游词
2015/02/10 职场文书
农村环境卫生倡议书
2015/04/29 职场文书