前端ssr跟ssg的区别

news/2024/11/30 0:37:07/

前端渲染方案SSR / SSG

前端SSR(Server-side Rendering)与SSG(Static Site Generation)是两种不同的技术,用于提高网站性能和用户体验。

SSR:服务端渲染 Server Side Render,PHP / Java / Python 后台基本能力,生成 HTML 模板,交由浏览器渲染。

SSG:页面静态化 Static Side Generation,把 node 提前渲染成 HTML

前端SSR与SSG的区别前端SSR(Server-side Rendering)与SSG(Static Site Generation)是两种不同的技术,用于提高网站性能和用户体验。SSR技术是在服务器端生成完整的HTML页面,并将其发送给客户端。当客户端请求一个页面时,服务器端会动态生成该页面并将其发送给客户端。这种技术有助于提高网站的搜索引擎优化(SEO)和用户体验,因为页面在服务器端生成,客户端可以快速呈现页面。SSG技术是在构建阶段生成静态HTML页面,并存储在服务器端。当客户端请求一个页面时,服务器端直接发送预先生成的HTML页面。这种技术提高了网站的速度,因为服务器端不需要动态生成页面,客户端可以立即呈现页面。

总的来说,SSR技术更适用于需要动态生成页面的网站,例如含有个性化内容或动态数据的网站。而SSG技术更适用于不需要动态生成页面的静态网站,例如个人博客或静态展示网站。

前端SSR实现需要在服务器端使用技术,例如Node.js,使用框架,例如Express或Nest.js,以及渲染库,例如React或Vue.js。下面是一个使用React和Node.js实现SSR的简单示例:

在服务器端创建一个React组件,该组件将动态生成HTML。

创建一个Node.js服务器,该服务器将接收客户端请求并使用React组件生成完整的HTML页面。

在服务器端的Node.js服务器上安装必要的依赖项,例如React,Express等。

创建一个路由处理程序,该处理程序将在客户端请求一个页面时调用React组件,并生成HTML页面。

在客户端请求页面时,服务器端将动态生成完整的HTML页面并发送给客户端。


```javascript
// server.js
const express = require('express');
const React = require('react');
const renderToString = require('react-dom/server').renderToString;const app = express();app.get('/', (req, res) => {const html = renderToString(<html><head><title>SSR Example</title></head><body><div id="root">Hello World!</div></body></html>);res.send(`<!DOCTYPE html><html><head><title>SSR Example</title></head><body><div id="root">${html}</div></body></html>`);
});app.listen(3000, () => {console.log('Server is listening on port 3000');
});
上面的代码创建了一个Express应用程序,并在根路径上提供了一个响应。该响应使用React渲染一个HTML字符串,并将其包含在完整的HTML页面中。请注意,上面的代码仅提供了一个简单的示例,实际的实现可能更复杂,取决于您的需求。在实际项目中,您可能需要处理数据请求,状态管理,路由等。前端实现ssg首先,了解什么是静态站点生成器 (SSG, Static Site Generator)。它是一种生成静态网页的工具,通过将动态数据与静态模板结合,生成预先渲染的静态 HTML 文件。实现静态站点生成器的步骤如下:选择合适的技术栈:选择一个合适的静态站点生成器框架。设计模板:设计模板来控制静态站点的布局,样式和交互。编写数据:编写需要展示的数据,可以是 markdown 文件,JSON 文件等。生成静态站点:使用静态站点生成器把模板和数据结合,生成静态站点。部署站点:将生成的静态站点部署到 Web 服务器上,供用户访问。```typescript
import type { NextPage, GetStaticProps } from 'next'// 避免 TS 报错,预定义 SSG 数据结构
type HomeProps = {list: string[]
}const Home: NextPage<HomeProps> = (props) => {// 取出 SSG 数据const { list = [] } = propsreturn (<><p>hello user!</p>{list.map((item: any) => <p key={item}>{item}</p>)}</>)
}export default Home// 实现 SSG
export const getStaticProps: GetStaticProps = async () => {const { data, status } = await getAjaxData();// return 出的内容可以通过组件的 Props 取到return {props: {list: data}};
};

前端服务器渲染 (SSR, Server-Side Rendering) 和前端静态站点生成器 (SSG, Static Site Generator) 的优缺点如下:

优点:

SSR:

搜索引擎友好,因为它的内容在服务器端渲染,可以被搜索引擎爬取到。加载速度快,因为第一次渲染在服务器端完成,客户端只需要加载预渲染的 HTML。可以使用任意的 JavaScript 框架,因为它支持客户端 JavaScript 框架。

SSG:

部署方便,只需要静态文件,可以直接部署在任何 Web 服务器上。更快的构建速度,因为没有在运行时进行渲染,可以在预先生成静态文件。资源开销小,因为它不需要使用服务器资源进行渲染,可以节省资源。

缺点:

SSR:

服务器资源需求高,因为需要在服务器端渲染每个请求,所以服务器需要充足的资源。编写复杂的代码,因为它需要在服务器端和客户端实现。缓存困难,因为每个请求都需要渲染。

SSG:

搜索引擎

http://www.ppmy.cn/news/798195.html

相关文章

【深度学习】生成对抗网络理解和实现

一、说明 本篇说明GAN框架是个啥。并且以最基础的数据集为例,用代码说明Gan网络的原理;总的老说,所谓神经网络,宏观上看,就是万能函数,在这种函数下,任何可用数学表述的属性,都可以映射成另一种可表示属性。 二、生成对抗网络定义 生成对抗网络 (GAN) 是一种算法架构…

ss命令说明

ss命令是一个基于网络套接字的工具&#xff0c;用于显示和分析TCP、UDP、UNIX域套接字等网络连接状态。它可以显示连接的本地地址和端口、远程地址和端口、连接状态、带宽使用情况、进程ID等信息。 下面是一些常用选项和用法&#xff1a; ss -t&#xff1a;显示所有TCP连接。…

RabbitMQ笔记--消息中间件,rabbitmq安装及简单使用

1.消息中间件 消息&#xff1a;指在应用间传送的数据。 消息队列中间件&#xff1a;指利用高效可靠的消息传递机制进行与平台无关的数据交流&#xff0c;并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型&#xff0c;可以在分布式环境下扩展进程间的通…

笔记本声音调大

文章目录 笔记本的右下角声音和播放器声音都调到最大之后声音还是很小。 控制面板-硬件和声音-声音-扬声器-均衡器&#xff1a;设置-现场。

怎么把音频的声音调大?

怎么把音频的声音调大&#xff1f;我们平时会经常使用到音频文件&#xff0c;但声音大小不一&#xff0c;可能会让我们感到不适应。如果太大&#xff0c;甚至会使人吓一跳&#xff1b;如果太小&#xff0c;则难以听清楚。为了轻松聆听音频&#xff0c;我们需要将声音调整到合适…

【计算机组成与体系结构Ⅰ】实验6 熟悉Vivado及MINISYS-1实验系统

一、实验目的 1&#xff1a;熟悉Vivado的开发环境及开发流程&#xff0c;掌握Vivado中Verilog HDL文本输入设计方法&#xff0c;包括仿真、综合、实现与下载。熟悉Minisys开发板的功能和使用方法。 2&#xff1a;学会可配置IP核的设计与封装方法&#xff0c;深入理解与门逻辑…

阿里云AliYun物联网平台使用-申请免费试用及完成初始配置

一、项目简介 本专栏文章将围绕阿里云物联网平台&#xff0c;实现其设备向云平台的数据上传&#xff0c;客户端获取云平台数据。设备通过NBIOT技术实现无线采集&#xff0c;定时上传。 二、阿里云平台申请 阿里云物联网平台试用申请地址 进入上述超链接网址&#xff1a; 由于是…

最直白详细:“1字节(byte)”等于多少“位(bit)”

1byte等于8bit。数据存储是以“字节”&#xff08;Byte&#xff09;为单位&#xff0c;数据传输大多是以“位”&#xff08;bit&#xff09;为单位&#xff0c;一个位就代表一个0或1&#xff08;即二进制&#xff09;&#xff0c;每8个位&#xff08;bit&#xff09;组成一个字…