静态网站生成器与服务器端渲染有啥区别

49554aab51d83ff7a82c9cb359a0431d.jpeg

在将网站部署到服务器之前,在构建阶段生成HTML页面被称为“静态网站生成(Static Site Generation)”。这种方法涉及使用网站模板创建预构建页面,并在用户请求时立即交付给他们。以下是静态生成网站的一些好处:

更快的页面加载时间:静态生成的网站具有更快的页面加载时间,适合网络连接较慢的用户。

改进的SEO(搜索引擎优化):静态网站更容易被搜索引擎爬虫索引,提高了您网站在网络上的可见性。

成本效益:企业可以通过静态生成的网站节省托管和维护成本,因为这些网站不需要服务器端处理。

如何使用Next.js实现静态网站生成

Next.js使得实现静态网站生成变得简单。在本节中,我将向您展示如何使用getStaticProps函数为您的网站生成静态页面。

getStaticProps函数是一种技术,它指示Next.js在构建时使用返回的props预渲染页面。这意味着数据获取和页面内容的生成是提前完成的,存储为静态文件,并在用户请求时提供。以下是在Next.js项目中使用getStaticProps函数的示例:

export default function Home({ data }) {return (<main>{data.map((car) => (<div key={car.id}><p>{car.name}</p><p>{car.type}</p><img src={car.image} alt="car" /></div>))}</main>);
}
export const getStaticProps = async () => {const { data } = await Supabase.from("cars").select();return {props: {data: data,},};
};

在这段代码中,getStaticProps函数从Supabase获取数据,Supabase是一个用于数据库和身份验证服务的后端即服务工具。然后,它返回包含获取的数据的props属性,传递给Home组件进行渲染。

服务器端渲染:是什么?

服务器端渲染(Server-side rendering)是在服务器上生成完整的HTML内容,然后将完全渲染的页面传递给用户的浏览器。让我们来看一些服务器端渲染提供的好处。

  • 改进的SEO:服务器端渲染使页面易于被搜索引擎索引,而不像客户端渲染那样,爬虫必须先执行一些JavaScript代码才能访问页面的HTML内容。

  • 更快的加载时间:服务器端渲染消除了客户端等待JavaScript加载和执行后才显示页面HTML内容的需要。这显著提升了您网站的用户体验。

  • 安全性:服务器端渲染可以帮助保护您应用程序中的敏感数据免受恶意行为者的侵害。由于数据从未暴露给客户端,因此无法被截取或盗取。

Next.js使实现服务器端渲染变得简单。在本节中,我将向您展示如何使用getServerSide函数生成服务器渲染的页面。

getServerSideProps函数是一种技术,它指示Next.js在服务器上使用返回的props预渲染页面。这意味着数据获取和页面内容的生成在服务器上提前完成,并在用户请求时提供给用户。以下是在Next.js项目中使用getServerSideProps函数的示例:

export default function Home({ data }) {return (<main>{data.map((car) => (<div key={car.id}><p>{car.name}</p><p>{car.type}</p><img src={car.image} alt="car" /></div>))}</main>);}
export const getServerSideProps = async () => {const { data } = await Supabase.from("cars").select();return {props: {data: data,},};
};

在这段代码中,getServerSideProps函数从Supabase获取数据。然后,它返回包含检索到的数据的props属性,该属性传递给Home组件进行渲染。

静态网站生成与服务器端渲染对比

既然你已经了解了静态网站生成和服务器端渲染是什么,那么让我们来看看在使用Next.js时它们在加载时间和代码大小方面的比较。为了说明这一点,我使用了一个名为Pingdom的网络工具来分析一个汽车租赁应用的加载时间和页面大小。

通过静态网站生成,该网站展示了令人印象深刻的初始加载时间为2.58秒,代码大小为5.1 MB。

37c0b2ff4c21f8636c99715832bdadf6.png

相比之下,使用服务器端渲染时,网站加载时间为4.72秒,代码大小为5.1 MB。

3107fc2bd5a5cc016c4303545e5763f1.png

尽管在这个比较中代码大小是相同的,但它们可能会因所使用的库和资源而有所不同。静态生成的网站通常通过消除在初始渲染过程中不需要的一些代码来减小代码大小。

何时使用静态网站生成和服务器端渲染?

对于主要包含静态信息且需要高流量的网站,使用静态网站生成是合适的选择。而对于内容经常变动且需要强大的搜索引擎优化的网站,应该使用服务器端渲染。但是如果您的网站不需要搜索引擎优化,比如网页仪表盘、内容管理工具或程序管理工具,客户端渲染(Client-Side Rendering)将是最简单和轻量级的选择。

结束

我们已经讨论了静态网站生成和服务器端渲染,并进行了许多比较。现在,你拥有了创建快速加载页面、对搜索引擎友好并为所有用户提供出色用户体验的知识和技能,无论他们的网络连接速度如何。通过应用从本文中获得的知识,你可以为你的项目做出明智的渲染方法决策。

由于文章内容篇幅有限,今天的内容就分享到这里,文章结尾,我想提醒您,文章的创作不易,如果您喜欢我的分享,请别忘了点赞和转发,让更多有需要的人看到。同时,如果您想获取更多前端技术的知识,欢迎关注我,您的支持将是我分享最大的动力。我会持续输出更多内容,敬请期待。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/256055.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【从零开始学习JVM | 第五篇】快速了解运行时数据区

前言&#xff1a; 当谈论 Java 程序的运行机制时&#xff0c;JVM&#xff08;Java 虚拟机&#xff09;的运行时数据区是一个必不可少的话题。JVM 运行时数据区是 Java 程序在运行过程中分配内存和管理数据的重要区域&#xff0c;它包括了方法区、堆、虚拟机栈、程序计数器和本地…

【Spring 源码】 贯穿 Bean 生命周期的核心类之 AbstractAutowireCapableBeanFactory

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

小白学习java理解栈手写栈——第四关(青铜挑战)

内容1.理解栈的基本特征2.理解如何使用数组来构造栈3.理解如何使用链表来构造栈 1.栈的基础知识 1.1栈的特征 栈和队列是比较特殊的线性表&#xff0c;又称为访问受限的线性表。栈是很多表达式、符号等运算的基础&#xff0c;也是递归的底层实现&#xff0c;理论上递归能做的…

linux学习之详解文件

目录 1.先认识文件 2.c语言中常用文件接口 fopen&#xff08;打开文件&#xff09; 3.系统接口操作文件 open write 文件的返回值以及打开文件的本质 理解struct_file内核对象 了解文件描述符&#xff08;fd&#xff09;分配规则 重定向 dup接口 标准错误流 文件缓冲…

数据库:JDBC编程

基本概念 JDBC编程就是通过Java代码来操作数据库 api 数据库是一个类别&#xff1a;MySQL&#xff0c;Oracle&#xff0c;sql server&#xff0c;sqlite 代码操作数据库的前提&#xff1a;数据库提供api&#xff0c;我们要调用api才能完成操作 &#xff08;api&#xff1a…

C++刷题 -- 链表

C刷题 – 链表 文章目录 C刷题 -- 链表1.删除链表的倒数第 N 个结点2.链表相交3.环形链表 1.删除链表的倒数第 N 个结点 https://leetcode.cn/problems/remove-nth-node-from-end-of-list/ 快慢指针的应用 fast指针先移动N步&#xff0c;slow依然指向head&#xff1b;然后fa…

Halcon threshold_sub_pix (Operator)

read_image(Image,fabrik) threshold_sub_pix(Image,Border,35) dev_display(Border)Image是输入的原始图像&#xff0c;Threshold是设定的阈值&#xff0c;Width和Height是像素值计算区域的大小&#xff0c;ThresholdedRegion是经过分割后得到的二值化结果。 在对图像进行二值…

Docker-compose容器编排与容器监控

一、Docker-compose 1、概念&#xff1a; Docker-Compose 是 Docker 官方的开源项目&#xff0c;负责实现对Docker容器集群的快速编排。 2、作用&#xff1a; Docker-Compose可以管理多个Docker容器组成一个应用。需要定义一个yaml格式的配置文件 docker-compose.yml&#…

PostGIS学习教程十一:投影数据

PostGIS学习教程十一&#xff1a;投影数据 地球不是平的&#xff0c;也没有简单的方法把它放在一张平面纸地图上&#xff08;或电脑屏幕上&#xff09;&#xff0c;所以人们想出了各种巧妙的解决方案&#xff08;投影&#xff09;。 每种投影方案都有优点和缺点&#xff0c;一…

LabVIEW使用单板RIO开发远程监控电源信号

LabVIEW使用单板RIO开发远程监控电源信号 设计和构建用于智能电网的本地功耗分析系统&#xff0c;主要服务于领先的电力监控设备设计者和制造商。随着智能电网投资的增加&#xff0c;对于能够有效处理替代电源&#xff08;如太阳能和风能&#xff09;间歇性功率水平的技术需求…

揭秘强化学习:Python 实践指南

一、说明 强化学习 (RL) 是机器学习和人工智能 (AI) 的一个子领域&#xff0c;专注于开发能够通过与环境交互进行学习的智能代理。与传统的监督和无监督学习不同&#xff0c;强化学习主要关注动态、顺序环境中的决策。它在人工智能中具有重要意义&#xff0c;特别是在自主代理必…

数字与数学基础问题

关卡名 数字与数学基础问题 我会了✔️ 内容 1.数字里统计的处理技巧 ✔️ 2.必须熟练掌握溢的处理方法 ✔️ 3.掌握进制的处理方法 ✔️ 1. 数字统计专题 统计一下特定场景下的符号&#xff0c;或者数字个数等是一类非常常见的问题 。如果按照正常方式强行统计&#xf…