服务端渲染SSR的理解
服务端渲染SSR的理解
SSR服务端渲染Server Side Render就是当进行请求时,页面上的内容是通过服务端渲染生成的,浏览器直接显示服务端返回的HTML即可。
客户端渲染CSR
通常在构建一个普通的SPA单页应用时,就是构建的客户端渲染的应用,CSR客户端渲染Client Side Render就是当进行请求时,页面上的内容是通过加载的Js文件渲染出来的,Js文件动态运行在浏览器上面,服务端只返回一个HTML模板。
优点
- 使得服务器计算压力变轻。
- 做到了前后端分离,在团队开发中只要负责各自的任务即可,使开发效率有明显提升。
缺点
- 不利于
SEO、搜索引擎爬虫无法完整解析用户页面。 - 请求增多时用户等待时间变长,导致首屏渲染慢。
- 消耗的是用户浏览器的性能。
服务端渲染SSR
SSR服务端渲染Server Side Render就是当进行请求时,页面上的内容是通过服务端渲染生成的,浏览器直接显示服务端返回的HTML即可。对于传统服务端渲染,也称为后端模板渲染,如jsp或者php等,这是最早时期的web,是指客户端请求时,在服务器上使用模板引擎将模板与数据拼接成完整的HTML,再发送给客户端,客户端接收后直接解析HTML就可以在浏览器上展示出来,不需要额外的异步请求获取数据,如果要使web有交互性,客户端需要再用Js去操作DOM或者渲染其他动态的部分。
优点
- 更好的
SEO,由于搜索引擎爬虫抓取工具可以直接查看完全渲染的页面,如果SEO对站点至关重要,而页面又是异步获取内容,则可能需要服务器端渲染SSR解决此问题。 - 更快的内容到达时间
time-to-content,特别是对于缓慢的网络情况或运行缓慢的设备,无需等待所有的JavaScript都完成下载并执行,用户将会更快速地看到完整渲染的页面,通常可以产生更好的用户体验,并且对于那些内容到达时间time-to-content与转化率直接相关的应用程序而言,服务器端渲染SSR至关重要。
缺点
- 开发条件所限,浏览器特定的代码,只能在某些生命周期钩子函数
lifecycle hook中使用,一些外部扩展库external library可能需要特殊处理,才能在服务器渲染应用程序中运行。 - 涉及构建设置和部署的更多要求,与可以部署在任何静态文件服务器上的完全静态单页面应用程序
SPA不同,服务器渲染应用程序,通常需要处于Node.js server运行环境。 - 更大的服务器端负载,在
Node.js中渲染完整的应用程序,显然会比仅仅提供静态文件的server更加大量占用CPU资源CPU-intensive-CPU密集型,因此如果预料在高流量环境high traffic下使用,需要准备相应的服务器负载,并明智地采用缓存策略。
预渲染Prerendering
如果使用服务器端渲染SSR只是用来改善少数营销页面,例如/、/about、/contact等的SEO,那么你可能需要预渲染,无需使用web服务器实时动态编译HTML,而是使用预渲染方式,在构建时build time简单地生成针对特定路由的静态HTML文件。如果使用webpack,则可以使用prerender-spa-plugin轻松地添加预渲染。
优点
- 设置预渲染更简单,并可以将前端应用作为一个完全静态的站点。
缺点
- 只适合对于特定静态页面而应用。
总结
本质上对于渲染都是一样的,都是进行的字符串拼接生成HTML,两者的差别最终体现在时间消耗以及性能消耗上。客户端在不同网络环境下进行数据请求,客户端需要经历从Js加载完成到数据请求再到页面渲染这个时间段,导致了大量时间的消耗以及浏览器性能的消耗。而服务端在内网请求,数据响应快,不需要等待Js代码加载,可以先请求数据再渲染可视部分然后返回给客户端,客户端再做二次渲染,这样大部分消耗的是服务端的性能,客户端页面响应时间也更快。
SSR服务端渲染主要解决的是首屏渲染和SEO优化,是否需要SSR服务端渲染主要取决于SEO对于网站是否非常重要以及内容到达时间time-to-content对应用程序的重要程度。例如,如果你正在构建一个内部仪表盘,初始加载时的额外几百毫秒并不重要,这种情况下去使用服务器端渲染SSR将是一个小题大作之举。然而如果大量的访问流量来自于搜索引擎的抓取,那么服务端渲染SSR将是势在必行的解决方案,或者内容到达时间time-to-content要求是绝对关键的指标,在这种情况下服务器端渲染SSR可以帮助你实现最佳的初始加载性能。总而言之,开发需要根据实际场景寻找解决方案。
每日一题
https://github.com/WindrunnerMax/EveryDay
参考
https://ssr.vuejs.org/zh/
https://zhuanlan.zhihu.com/p/90746589
https://www.jianshu.com/p/10b6074d772c
https://github.com/yacan8/blog/issues/30
https://juejin.im/post/6890810591968477191
https://juejin.im/post/6844903959241424910
服务端渲染SSR的理解的更多相关文章
- 服务端渲染 SSR
1.概述 SSR:网站内容由服务端渲染,然后返回客户端(查看网页源代码,所有内容都在源代码里面). 2.SSR优势 (1)SSR利于SEO. (2)SSR减少请求量和客户端渲染时间.
- Vue 服务端渲染(SSR)
什么是服务端渲染? 简单理解是将组件或页面通过服务器生成html字符串,再发送到浏览器,最后将静态标记"混合"为客户端上完全交互的应用程序. 服务端渲染的优点 更好的SEO,搜索引 ...
- vue服务端渲染之nuxtjs
前言 本篇主要针对nuxtjs中的一些重要概念整理和代码实现! 在学习vue服务端渲染之前,先搞清楚几个概念: 什么是客户端渲染(CSR) 什么是服务端渲染(SSR) CSR和SSR有什么异同 客户端 ...
- 使用 Vue 2.0 实现服务端渲染的 HackerNews
Vue 2.0 支持服务端渲染 (SSR),并且是流式的,可以做组件级的缓存,这使得极速渲染成为可能.同时, 和 2.0 也都能够配合 SSR 提供同构路由和客户端 state hydration.v ...
- 服务端渲染技术NUXT
什么是服务端渲染 服务端渲染又称SSR (Server Side Render),是在服务端完成页面的内容,而不是在客户端通过AJAX获取数据. 服务器端渲染(SSR)的优势主要在于:更好的 SE ...
- Nuxtjs实现服务端渲染和静态化站点
本文将介绍如何使用Nuxtjs对vue项目进行ssr和静态化处理. Nuxtjs简单介绍 首先,我们简单了解下Nuxtjs框架,Nuxt.js是一个基于Vue的通用框架,主要用于解决Vue项目的服务端 ...
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十五║初探SSR服务端渲染(个人博客二)
缘起 时间真快,现在已经是这个系列教程的下半部 Vue 第 12 篇了,昨天我也简单思考了下,可能明天再来一篇,Vue 就基本告一段落了,因为什么呢,这里给大家说个题外话,当时写博文的时候,只是想给大 ...
- 实现ssr服务端渲染
前言 前段时间寻思做个个人网站,然后就立马行动了. 个人网站如何实现选择什么技术方案,自己可以自由决定. 刚好之前有大致想过服务端渲染,加载速度快,还有 SEO 挺适合个人网站的. 所以就自己造 ...
- 6.前端基于react,后端基于.net core2.0的开发之路(6) 服务端渲染(SSR)
0.源码地址 https://gitee.com/teambp/ScaffoldClient 这个地址下载对应源码. 1.服务端渲染是啥? 就是在服务器进行页面渲染(废话),当页面展示后,显示的就是 ...
- 使用 PHP 来做 Vue.js 的 SSR 服务端渲染
对于客户端应用来说,服务端渲染是一个热门话题.然而不幸的是,这并不是一件容易的事,尤其是对于不用 Node.js 环境开发的人来说. 我发布了两个库让 PHP 从服务端渲染成为可能.spatie/se ...
随机推荐
- [转帖](1.2)sql server for linux 开启代理服务(SQL AGENT),使用T-SQL新建作业
https://www.cnblogs.com/gered/p/12518090.html 回到顶部 [1]启用SQL Server代理 sudo /opt/mssql/bin/mssql-conf ...
- [转帖]【最佳实践】prometheus 监控 sql server (使用sql_exporter)
https://www.cnblogs.com/gered/p/13535212.html 目录 [0]核心参考 [简述] [1]安装配置 sql_exporter [1.1]下载解压 sql_exp ...
- [转帖]oracle rac后台进程和LMS说明
本文摘抄录oracle官方文档,oracle rac使用的后台进程,用以备忘,记录之. About Oracle RAC Background Processes The GCS and GES pr ...
- [转帖]influxdb 2.0.3 tar.gz的安装与配置
下载地址:https://dl.influxdata.com/influxdb/releases/influxdb2-2.0.3_linux_amd64.tar.gz 安装influxdb ### 解 ...
- [转帖]Jmeter学习笔记(十一)——定时器
https://www.cnblogs.com/pachongshangdexuebi/p/11571524.html 默认情况下,Jmeter线程在发送请求之间没有间歇.不设置定时器,短时间内会产生 ...
- [转帖]性能分析之TCP全连接队列占满问题分析及优化过程(转载)
https://www.cnblogs.com/wx170119/p/12068005.html 前言 在对一个挡板系统进行测试时,遇到一个由于TCP全连接队列被占满而影响系统性能的问题,这里记录下如 ...
- [转帖]网络传输性能netperf测试方法和下载
简介 Netperf是一种网络性能的测试工具,主要针对基于TCP或UDP的传输.Netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bulk data transfer)模式 ...
- [转帖]耗时几个月,终于找到了JVM停顿十几秒的原因
https://www.cnblogs.com/codelogs/p/16060792.html 原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介# 最近我们系 ...
- [转帖]kubelet 原理解析五: exec的背后
https://segmentfault.com/a/1190000022163850 概述 线上排查pod 问题一般有两种方式,kubectl log或者kubectl exec调试.如果你的 lo ...
- [转帖]Native Memory Tracking 详解(2):追踪区域分析(一)
https://www.modb.pro/db/529363 上篇文章 Native Memory Tracking 详解(1):基础介绍 中,分享了如何使用NMT,以及NMT内存 & OS内 ...