一、CSR客户端渲染的模式(vue、react)

页面由js渲染,js运行于浏览器端,所以称客户端渲染。
基于react的csr渲染流程:
浏览器下载html文档→下载js→运行react代码渲染页面→展示页面
优势:
1.前后端分离的架构,利于开发效率的提升

缺点:
1、TTFP 首屏渲染时间比较长(首屏加载速度慢)
2、不能SEO (搜索引擎优化) 。大多数搜索引擎的爬虫只能识别html中的内容,无法识别js中内容。

主流服务器渲染框架:
1.nuxt.js——vue
2.next.js——react

二、SSR服务器端渲染

流程:服务器生成html→浏览器从服务器下载html→页面展示
node:LTS是文档版本,Current是最新版本

用node创建一个http服务器:
cd project_name
1:npm init

生成一个package.json文件,使得文件夹变成一个node的包,一个node写的代码便于管理
2:安装express
npm install express --save

新增一个app.js文件

运行node app.js命令。
浏览器中访问:

结语:如果代码是由服务器来决定的,这种渲染方式就是服务器端渲染。
服务器生成内容→服务器给到浏览器→浏览器进行渲染显示。
页面上的内容是由服务器生成的。

三、在服务器端编写react组件

浏览器发送请求→服务器运行react代码生成页面→服务器返回页面浏览器显示
1.让服务器端支持react
在node http服务器目录下,安装react: npm install react --save
在node中使用common js的语法来进行react的引入
新建Home react组件

在index.js中引入home

修改package.json

2、安装webpack使得得以运行jsx编译为普通js
a.npm install webapck webpack-cli --save
b.新增一个webpack配置文件 webpack.server.js

安装babel支持:
npm install babel-loader @babel/core --save
安装preset的react包:
npm install @babel/preset-react --save
安装preset的stage-0包:
npm install@babel/preset-stage-0
安装env包
npm install @babel/preset-env --save
webpack.server.js内容:

c.webpack的编译打包
webpack --config webpack.server.js

修改package.json start处 指向 bundle.js

运行npm run start

增加了打包编译的配置后,现在页面上可以通过es6 moudle的形式进入引入和抛出

四:将HOME组件中的内容渲染到页面

1、添加react-dom。
npm install react-dom --save
2、从react-dom/server中引入renderToString 方法,并将home组件以标签的形式(jsx)传入该方法,有jsx语法就必须要react,所以在页面上引入react

短命令的配置:

运行npm run build, npm run start启动后页面正确展示了home组件中的内容。

优化src/index.js中的代码

五 阶段总结:react的服务器端渲染实际是建立在虚拟dom的机制上

在服务器端:react将虚拟dom通过renderToString 方法转为string,并传给浏览器。
// 客户端渲染中,React代码在浏览器上执行运行,消耗的是用户浏览器的性能。
// 服务器端渲染:
React代码在服务器上执行,消耗的是服务器端的性能。
弊端:React代码在服务器上执行,消耗的是服务器端的性能。

react极大的消耗了服务器端的性能。需要增加服务器来应付业务。

六: webpack的自动打包与服务器自动重启

why? 每次修改代码后都要运行npm run buildnpm run start
实现webpack自动打包:
webpack --config webpack.server.js --watch 命令中添加 --watch参数。


一直处于监听变化中。每当有文件变动,都会重新打包一次。

实现服务器自动重启:
全局安装第三方模块nodemon:npm install nodemon -g

修改start短命令为
"nodemon --watch build --exec node \"./build/bundle.js\"" (这里和同样功能的Supervisor的使用进行比较,加深记忆)


页面刷新实现自打包自启动。
再次基础上我们运行项目是需要启动两个窗口,一个运行npm run build 来监听代码的改变来自动打包,一个运行npm run start 来监听bundle文件的改变来自动重启服务。

启动服务的进一步简化:用 npm-run-all 实现一次性运行两个命令

全局安装npm install npm-run-all -g
修改package.json中的短命令:

实现同时启动服务器和监听文件
运行npm run dev

每当修改代码,页面刷新即可更新页面。

ssr与csr的优异相关推荐

  1. 【SSR和CSR】服务端渲染和客户端渲染区别?如何快速分辨页面是SSR还是CSR?

    首先,介绍一下 SPA.SEO.SSR 三者的区别 SPA(single page application)单页面应用,是前后端分离时提出的一种解决方案. 优点:页面之间切换快:减少了服务器压力: 缺 ...

  2. SSR和CSR的区别

    SSR和CSR的区别 SSR(Server Side Rendering) :传统的渲染方式,由服务端把渲染的完整的页面吐给客户端.这样减少了一次客户端到服务端的一次http请求,加快相应速度,一般用 ...

  3. web 开发里 SSR,CSR 和 SSG 的区别

    本文介绍这三种 Web 前端开发领域中的术语的区别. CSR - Client Side Rendering 一种在浏览器上执行 JavaScript 以生成 DOM 并在挂载后显示内容的方法. 页面 ...

  4. 关于 SSR、CSR、SSG 网页渲染技术的解关于 SSR、CSR、SSG 网页渲染技术的解读

    之前只听过 SSR 和 CSR 这两个概念,分别指网页是由服务端渲染还是客户端渲染后由浏览器生成相应页面的技术.最原始的网页一直是客户端通过 JavaScript 请求数据并操作 DOM 元素后生成最 ...

  5. SSG、SSR、CSR的区别

    现象: 访问页面从浏览器上输入url 到页面首屏完全展示这一过程所花的时间极短,而且在页面中点击链接切换路由的操作非常顺滑,几乎页面可以达到"秒切"的效果,根本不会有卡顿等待的情况 ...

  6. SSR(服务端渲染)于CSR(客户端渲染)

    SSR (Server Side Rendering,服务端渲染) 希望的是:服务端第一次只把渲染好的 HTML 发给客户端,这样客户端就能直接显示出来网页的样式,首次绘制(First Paint)就 ...

  7. 2022年的CSR和SSR

    早期的SSR 一般说前后端不分离,指的是早期的开发模式,即前端代码写完后嵌入到后端的JSP/PHP中.由后端服务渲染完数据后直接返回一个完整的HTML页面,里面的数据都已经渲染好了. 例如,如下是一个 ...

  8. 客户端渲染CSR、服务器端渲染SSR、预渲染Prerendering

    什么是客户端渲染 CSR 在进行SPA(单页面应用)开发时,大多数都会选择Vue.js.默认情况下,会生成vue组件,输出到浏览器,进行生成 DOM 和操作 DOM.使用vue.js开发的项目在浏览器 ...

  9. SSR 应用与原 CSR 应用变更同步问题实践

    在上一篇介绍<天猫汽车商详页的SSR改造实践>一文中提到过,为免影响线上应用,我们的一体化应用(后面简称称 SSR 应用)是在原 CSR 项目基础上另起的应用仓库. 背景 当商详业务有新需 ...

最新文章

  1. 有个程序员老公有多爽???
  2. python中元组_理解python中的元组
  3. JAVA连接数据库使用的API是什么呢,如何使用JDBC API在Java中建立数据库连接?
  4. 安装多个版本JDK相关问题
  5. Ubuntu 火狐浏览器不能上网解决办法
  6. 不安全的发布 java_如何在没有安全警告的情况下发布Java Web S...
  7. N*N匹马,N个赛道,求出最快N匹马的解法
  8. Python 网络爬虫的常用库汇总
  9. 做个全国一等奖的小车,其实不难(F题:智能送药小车方案分享)
  10. Taro+react开发(86):资源文件处理
  11. Android手机截屏
  12. 水滴公司启动医务社工高级人才培养计划
  13. 我又发现一个直接就能安装中文小红帽的方法
  14. Foundation 框架 NSArray、NSMutableArray排序
  15. iOS开发之UITableViewController指定刷新cell 或section
  16. JAVA学习-类与对象(韩顺平java-高级篇)
  17. 【中山大学】【东校区】【无线路由】【wr703n】【openwrt】电脑客户端的iptv网络电视在无线路由下不能打开的解决方法
  18. 二维码红包系统源代码
  19. 利用python的pyqt5和vtk库实现对gcode模型的全彩预览
  20. 计算机03年word做母亲节贺卡,制作图文并茂的作品---用word制作母亲节贺卡PPT课件...

热门文章

  1. 安卓获取设备及系统信息小结
  2. Scratch软件编程等级考试三级——20200620
  3. JVM中类装载的执行过程
  4. mysql绿色版安装、配置教程
  5. MyBatis框架常用依赖
  6. 利用moveit控制机械臂运动轨迹分析
  7. iOS 检测设备所连接的WiFi、4G等网络是否真的可以连通
  8. 基于数据统计的随机组建试卷的算法研究
  9. 如何在K8S中创建一个自定义Controller?
  10. 《Head First设计模式》读书笔记