简单的React SSR服务器渲染实现


Posted in Javascript onDecember 11, 2018

为什么要SSR

单页应用将UI层和内容都由javascript来渲染,搜索引擎或网页爬虫需要完成的HTML结构,因此单页应用如果只在客户端渲染,不利于SEO,此外尽管我们可以通过按需加载的形式来减少首页加载的js,但是通过js来渲染DOM的时候还是会有一定的时间延迟。

0.前言

服务端渲染在项目中不是刚需的东西,但有的时候也是需要做一个服务端渲染,项目要做服务端渲染当然是有很多好处的

  • 首屏加载快,相比SPA单页应用还要有优势。
  • SEO 优化 利于爬虫,爬取数据。

1. 简介

服务端渲染是指页面的渲染和生成是在服务端完成的,并将渲染好的页面返回客户端。

2. 安装

安装的时候版本都是最新版,而新的版本很多方法和API有弃用和更新的,导致最后项目无法运行。

npm install --save-dev koa
npm install --save-dev babel-core
npm install --save-dev babel-polyfill
npm install --save-dev babel-preset-latest-node
npm install --save-dev babel-preset-stage-2
npm install --save-dev babel-preset-react
# or
yarn add -dev koa
yarn add -dev babel-core
yarn add -dev babel-polyfill
yarn add -dev babel-preset-latest-node
yarn add -dev babel-preset-stage-2
yarn add -dev babel-preset-react

3.配置

安装完成后写一个启动文件 start.js:

// start.js
require('babel-core/register')({
  ignore: [/node_modules/],
  presets: [
    'stage-2',
    'react',
    [
      "latest-node",
      { "target": "current" }
    ]
  ]
});

require('babel-polyfill');
require('./../index');

在写一个入口文件index.js

// index.js
import Koa from 'koa';
import React from 'react';
import ReactDOMServer from 'react-dom/server';

const { renderToString } = ReactDOMServer;

const app = new Koa();

app.use(ctx => {
  ctx.body = renderToString(
    <div>
      <h1>Hello,World</h1>
    </div>
  );
});

app.listen(3000, () => {
  console.log('server run in 3000');
});

执行npm start启动项目

"scripts": {
  "start": "node ./src/start.js"
 },

4.结果

打开浏览器查看http://localhost:3000/ 

简单的React SSR服务器渲染实现

5.结束语

到这里就完成了一个简单的 React SSR,当然实现React服务端渲染还可以用别的方式,比如Next.js。

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

Javascript 相关文章推荐
HTML IMG标签 onload 内存溢出导致浏览器CPU占用过高
Mar 09 Javascript
popdiv
Jul 14 Javascript
javascript 函数参数限制说明
Nov 19 Javascript
让元素在网页中可拖动示例代码
Aug 13 Javascript
jQuery对于显示和隐藏等常用状态的判断方法
Dec 13 Javascript
js实现上一页下一页的效果【附代码】
Mar 10 Javascript
jQuery Ajax 上传文件处理方式介绍(推荐)
Jun 30 Javascript
微信小程序 欢迎页面的制作(源码下载)
Jan 09 Javascript
JavaScript基于面向对象实现的猜拳游戏
Jan 03 Javascript
详解Angular5路由传值方式及其相关问题
Apr 28 Javascript
JS实现普通轮播图特效
Jan 01 Javascript
JavaScript 声明私有变量的两种方式
Feb 05 Javascript
Vuex 单状态库与多模块状态库详解
Dec 11 #Javascript
微信小程序实现slideUp、slideDown滑动效果及点击空白隐藏功能示例
Dec 11 #Javascript
微信小程序实现两个页面传值的方法分析
Dec 11 #Javascript
jQuery使用bind动态绑定事件无效的处理方法
Dec 11 #jQuery
微信小程序实现的3d轮播图效果示例【基于swiper组件】
Dec 11 #Javascript
vue-cli 3.0 版本与3.0以下版本在搭建项目时的区别详解
Dec 11 #Javascript
微信小程序非swiper组件实现的自定义伪3D轮播图效果示例
Dec 11 #Javascript
You might like
php在多维数组中根据键名快速查询其父键以及父键值的代码
2011/05/07 PHP
PHPer 需要了解的 5 个 Composer 小技巧
2014/08/18 PHP
php基于闭包实现函数的自调用(递归)实例分析
2016/11/11 PHP
PHP截取发动短信内容的方法
2017/07/04 PHP
Yii框架参数配置文件params用法实例分析
2019/09/11 PHP
PHP7 新增常量
2021/03/09 PHP
js本身的局限性 别让javascript做太多事
2010/03/23 Javascript
改变javascript函数内部this指针指向的三种方法
2010/04/23 Javascript
使用jQuery实现的掷色子游戏动画效果
2014/03/14 Javascript
php的文件上传入门教程(实例讲解)
2014/04/10 Javascript
深入理解JavaScript系列(36):设计模式之中介者模式详解
2015/03/04 Javascript
使用jquery实现仿百度自动补全特效
2015/07/23 Javascript
css如何让浮动元素水平居中
2015/08/07 Javascript
详解Backbone.js框架中的模型Model与其集合collection
2016/05/05 Javascript
JavaScript实现无刷新上传预览图片功能
2017/08/02 Javascript
微信小程序movable view移动图片和双指缩放实例代码
2017/08/08 Javascript
jQuery Position方法使用和兼容性
2017/08/23 jQuery
Koa 中的错误处理解析
2019/04/09 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
基于vue+echarts 数据可视化大屏展示的方法示例
2020/03/09 Javascript
JS常用跨域方法实现原理解析
2020/12/09 Javascript
[44:51]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第二场
2018/04/05 DOTA
python处理DICOM并计算三维模型体积
2019/02/26 Python
利用Python库Scapy解析pcap文件的方法
2019/07/23 Python
numpy实现神经网络反向传播算法的步骤
2019/12/24 Python
美国隐形眼镜零售商:LensPure
2019/03/10 全球购物
微软马来西亚官方网站:Microsoft马来西亚
2019/11/22 全球购物
Prototype中如何为一个元素添加一个方法
2014/12/08 面试题
环境工程毕业生自荐信
2013/11/17 职场文书
铁路个人事迹材料
2014/01/30 职场文书
妇女儿童发展规划实施方案
2014/03/16 职场文书
销售竞赛活动方案
2014/08/23 职场文书
实验室安全管理制度
2015/08/05 职场文书
《女娲补天》读后感5篇
2019/12/31 职场文书
SpringBoot2零基础到精通之数据库专项精讲
2022/03/22 Java/Android
springboot用户数据修改的详细实现
2022/04/06 Java/Android