2024年,还有不用这个技术的网站?

news2024/11/16 23:31:24

大家好,我是程序员鱼皮。

不知道大家有没有听说过 “服务端渲染” 这样一种技术?如今这个技术越来越流行,尤其对于以内容为核心的网站,使用服务端渲染可以大幅提升网站被搜索到的概率,所以很多企业级网站都用到了这个技术来开发,比如几个知名大站 —— B 站、C 站、G 站、P 站等等。

啥啥啥,不会有人不知道这些网站都是什么吧?

前段时间有位小伙伴专门吐槽我们开发的编程导航网站没有用服务端渲染:

看到这条评论,兄弟我有点儿难受了。说实话,我们这个网站不用服务端渲染,还不是因为。。。因为 嘛!

开个玩笑,当然也有一些其他的原因。。。

服务端渲染技术虽好,但也不是万金油。2024 年,如果你还没有了解过这个技术,或者不了解它正确的应用场景,那可就真的 out 了。下面鱼皮就给大家科普下这个技术。

揭秘服务端渲染

1、什么是客户端和服务端渲染?

网站渲染可以在服务端和客户端两种环境下进行:

客户端就是你的电脑,或者具体一点,可能是你电脑上打开的浏览器;而服务端就是机房里的服务器。

在客户端渲染中,客户端会先向服务器请求 HTML 文件,服务器会返回一个基础的 HTML 文件,其中包含必要的 JavaScript 脚本。这些脚本在浏览器端运行,动态请求后端的数据、生成网页内容并渲染到页面上。

以我们的 编程导航网站 为例,就使用了客户端渲染,使用 F12 网络控制台查看加载的网站内容。可以看到刚开始加载的 HTML 文档并不包含网站的数据,只有一个标题、以及一个 JS 脚本。

这特么看起来比我刚学网站开发的时候写的记事本还简单!

接下来,浏览器会执行该脚本,并触发后续的数据请求和加载流程,逐渐显示整个页面,所以看到请求的过程是断断续续的。

与客户端渲染相对,服务端渲染是一种将网页在 服务器端 生成并渲染为 HTML 内容的技术。在这种方式下,当用户请求一个网页时,服务器会提前调用后端来获取数据并生成完整的 HTML 文档,然后将其发送到客户端(浏览器)。浏览器接收到 HTML 后,直接展示页面内容,不用再动态地向后端发送请求来获取数据。

我们的 面试刷题网站 - 面试鸭 使用的就是服务端渲染。从下图可以看到,服务端返回的 HTML 文档中,就已经有完整的网站数据和样式了:

2、二者的优缺点

由于 Ajax、Vue、React 等技术的崛起,大多数学前端的同学开发的网站都是基于客户端渲染实现的,我说的没错吧?估计大家比较熟悉的词是 SPA、SPA、SPA,天天做 SPA~

客户端渲染的优点主要是:

  1. 开发方便灵活:开发者不需要区分哪些数据要在服务端加载、哪些数据要在客户端加载,也不用担心哪些 API 无法在服务端使用。
  2. 减少服务器压力:由于渲染工作由客户端(用户自己的电脑)完成,因此服务器的负载相对较小,只需要提供静态资源。

服务端渲染的好处是:

  1. 减少页面初始加载时间:首次加载时展示完整内容,减少白屏时间,不用等待 JavaScript 加载和执行后才能展示内容。
  2. 更有利于 SEO,因为搜索引擎爬虫能够直接抓取完整页面的内容,而不依赖于 JavaScript 的执行。

这两个技术各有优缺,所以不能说服务端渲染就一定更好。总结一下二者的适用场景:如果你的网站要做 SEO、希望被更多人搜索到,首选服务端渲染,但对服务器配置的要求就更高了;如果你不需要做 SEO,比如面向企业的网站、内部网站、个人学习用的网站,或者是较为复杂、充满各种动态交互的网站,用客户端渲染就好。

能够实现服务端渲染的技术很多,以前有 Java 的 JSP、PHP 等等,现在有基于 React 的 Next.js 和基于 Vue 的 Nuxt.js 框架,可以让你直接用前端的语法开发服务端渲染项目。我们自己的网站用的就是 Next.js,开发成本已经跟客户端网站差不多了。

Next.js 还是开源的

3、静态网站生成

除了服务端渲染和客户端渲染外,还有一种常用的技术 —— 静态网站生成。

静态网站生成是一种在 构建阶段 生成静态 HTML 文件的技术。注意,是在构建时(而不是用户请求时)就已经请求后端服务器获取了数据并且把页面生成好了,用户请求的时候服务器只需要把文件发出去就行,不用再做其他处理。

搜索引擎最喜欢的就是静态 HTML 文件,可以大幅提升 SEO 效果。此外,这些静态文件还可以通过内容分发网络(CDN 缓存)进行加速,进一步减少服务器的压力。

但静态网站生成的缺点也很明显,不适合内容动态变化的网站。而且随着内容的增多,每次构建要生成大量静态页面,时间会越来越长。

基于这些优缺点,静态网站生成适合内容数量有限的、内容基本不变的网站,比如个人博客。像 VuePress、Hugo、Hexo、Astro 都是主流的静态网站生成器。

鱼皮的编程宝典就是基于 VuePress 开发的,我把制作模板也开源到了 GitHub 上:https://github.com/liyupi/codefather

当然,有问题就有解决方案。随着静态网站内容越来越多,每次构建会越来越慢,这种情况下,可以采用增量静态生成技术。允许部分页面在构建之后进行更新,而无需重新构建整个站点。这种技术适用于那些大多数内容不变、但某些部分需要动态更新的网站。

比如我改了博客里的一篇文章,那么只需要重新生成这篇文章对应的 HTML 页面即可。这样一来,可以在享受静态网站高性能、SEO 友好特性的同时,及时更新网站的内容,并减少构建时间。

不过缺点就是网站架构更复杂、维护成本更高。但值得一提的是,很多大型网站为了做 SEO 优化,专门把动态网站转为静态 HTML。

4、结合使用

实际开发中,前面讲到的几种方式可以结合使用。

比如 部分预渲染 是一种将静态页面生成与客户端渲染结合的技术。

在构建阶段或请求阶段,页面的静态部分预先渲染,比如导航栏、页脚等。页面加载时,静态部分可以直接显示。比如刚访问面试鸭刷题网站的时候看到的效果如下,这些内容无论谁访问看到的都是一样的、不变的:

然后,通过 水合 过程,客户端的 JavaScript 接管已经渲染的静态内容,并继续处理动态交互。比如请求后端获取用户登录状态、并且加载出用户的信息:

这样一来,网站兼具了服务端渲染的 SEO 友好和快速初始加载、以及客户端渲染灵活动态交互的优点。

还有一个跟部分预渲染相似的概念叫 同构渲染 ,是指同一套代码可以在服务端和客户端运行,并在服务端渲染页面的初始内容,然后在客户端接管渲染和交互。

实际情况下鱼皮也更推荐用这种方式,鱼皮带大家开发的 最新项目 中,就会使用同构渲染开发一套前端万用项目模板。


OK,感谢你阅读到这里。大家做网站用到过服务端渲染或者静态网站生成技术么?欢迎评论区留言分享。

更多编程学习资源

  • Java前端程序员必做项目实战教程+毕设网站
  • 程序员免费编程学习交流社区(自学必备)
  • 程序员保姆级求职写简历指南(找工作必备)
  • 程序员免费面试刷题网站工具(找工作必备)
  • 最新Java零基础入门学习路线 + Java教程
  • 最新Python零基础入门学习路线 + Python教程
  • 最新前端零基础入门学习路线 + 前端教程
  • 最新数据结构和算法零基础入门学习路线 + 算法教程
  • 最新C++零基础入门学习路线、C++教程
  • 最新数据库零基础入门学习路线 + 数据库教程
  • 最新Redis零基础入门学习路线 + Redis教程
  • 最新计算机基础入门学习路线 + 计算机基础教程
  • 最新小程序入门学习路线 + 小程序开发教程
  • 最新SQL零基础入门学习路线 + SQL教程
  • 最新Linux零基础入门学习路线 + Linux教程
  • 最新Git/GitHub零基础入门学习路线 + Git教程
  • 最新操作系统零基础入门学习路线 + 操作系统教程
  • 最新计算机网络零基础入门学习路线 + 计算机网络教程
  • 最新设计模式零基础入门学习路线 + 设计模式教程
  • 最新软件工程零基础入门学习路线 + 软件工程教程

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无人机之遥控器防水性能篇

无人机遥控器的防水性能是评估其耐用性和适应不同环境能力的重要指标。随着无人机技术的不断发展,越来越多的遥控器在设计时融入了防水元素,以满足用户在不同天气条件下的使用需求。以下是对无人机遥控器防水性能的详细探讨: 一、防水等级与…

安装部署harbor及docker-compose的 实例

部署harbor python --version yum -y install python2-pip # 查看版本信息 pip list # 更新pip pip install --upgrade pip pip install --upgrade pip20.3 -i https://mirrors.aliyun.com/pypi/simple # 安装docker-compose pip install docker-compose --…

Java并发编程(21)—— CurrentHashMap源码分析

java 并发包中提供的 CurrentHashMap是一个线程安全且高效的HashMap ,也是面试的高频考点。 下面将围绕主题:ConcurrentHashMap 如何实现高效地线程安全?以及在Java8中它从设计实现上有哪些演进? 这篇文章一开始我以为会比较简单,但是在深入源码分析时,遇到了很大的阻碍,…

一文彻底搞懂大模型 - 语言模型的发展历程

语言模型的发展历程 语言模型(LM,Language Model)的发展历程可以清晰地划分为三个主要阶段:统计语言模型、神经网络语言模型以及基于Transformer的大语言模型。每个阶段的模型都在前一个阶段的基础上进行了改进和优化&#xff0c…

[000-01-008].第02节:Consul在实际中应用

我的后端学习大纲 SpringCloud学习大纲 1.使用Consul后&#xff0c;服务架构设计&#xff1a; 2.实现把支付服务provider8001注册到consul中 2.1.改POM&#xff1a; <!--SpringCloud consul discovery --> <dependency><groupId>org.springframework.cloud&…

超详细超实用!!!java开发之接口开发链接数据库(五)

云风网 云风笔记 云风知识库 日常项目接口开发&#xff0c;基本都是通过数据库获取存储数据通过接口反馈给前端&#xff0c;所以我们需要给项目连接上数据库 一、项目安装依赖 1、MySQL数据库 MySQL是一个关系型数据库管理系统&#xff0c;一般优势就是免费开源、易用、稳定性…

Spring 事务 数据库连接获取和释放原理

##调试demo Service public class CrmUserService {Autowiredprivate CrmUserDao crmUserDao;Autowiredprivate CrmLoginLogDao crmLoginLogDao;Transactionalpublic void getUser() {System.out.println("Service::"Thread.currentThread().getName());System.out.…

趣味算法------单一背包问题(01背包问题)贪心算法解决

目录 ​编辑 前言 例题 题目描述 输入输出格式 解题思路 具体代码 C语言代码 python代码 总结 前言 单一背包问题&#xff08;0-1 Knapsack Problem&#xff09;是组合优化中的一个经典问题&#xff0c;它可以形式化为&#xff1a;给定一组物品&#xff0c;每个物品都…

微信小程序SSL证书

微信小程序开发投入项目使用就需要用到SSL证书&#xff0c;主要原因SSL证书是让服务器的数据采取加密协议传输&#xff0c;避免来自中间人劫持或数据泄漏&#xff0c;所以在小程序交互数据过程中起到了关键性的作用。 为考虑到多个手机版本的兼容性&#xff0c;所以微信小程序…

Linux提升篇-Linux虚拟网络介绍

一、Linux虚拟网络-网桥 和tap/tun、veth-pair 一样&#xff0c;Bridge 也是一种虚拟网络设备&#xff0c;所以具备虚拟网络设备的所有特性&#xff0c;比如可以配置 IP、MAC 等。 除此之外&#xff0c;Bridge 还是一个交换机&#xff0c;具有交换机所有的功能。 对于普通的网…

移远通信精彩亮相IOTE 2024:探究技术融合,展望智慧未来

8月28-30日&#xff0c;IOTE 2024 第二十二届国际物联网展在深圳正式拉开帷幕&#xff0c;此次活动汇聚全球800家参展企业、10万来自工业、物流、基础建设、智慧城市、智慧零售领域的集成商、终端用户参观展会。 延续着2023年的辉煌成果&#xff0c;在2024 IOTE展上&#xff0c…

Mamba介绍,和Transformer对比

本文根据“一文看懂Mamba&#xff0c;Transformer最强竞争者”&#xff08;机器之心 编辑&#xff1a;Panda&#xff09;一文修改&#xff0c;并补充了一些新的观点。 在深度学习领域的广阔天地中&#xff0c;随着技术的不断进步&#xff0c;对更高效、更强大模型架构的探索从未…

Anaconda和Pycharm超详细安装教程(2024版本)!pycharm配置anaconda运行环境!

目录 一、anaconda下载安装 二、pycharm配置anaconda环境 工欲善其事&#xff0c;必先利其器。 安装包、激活码&#xff08;pycharm、anaconda、python&#xff09;点击领取 一、anaconda下载安装 1. Anaconda介绍 Anaconda 是一个基于 Python 的数据处理和科学计算平台&…

Dell 服务器 PowerEdge T440 驱动器故障

目录 1.故障&#xff1a;Dell 服务器 PowerEdge T440 驱动器指示灯闪烁 2.解决方案 1.故障&#xff1a;Dell 服务器 PowerEdge T440 驱动器指示灯闪烁 2024年8月30日 Dell PowerEdgeT440 驱动器指示灯琥珀色闪烁 查看 RAID5 磁盘组属性 显示 Virtual Disk 0:RAID5 降级 De…

Yolov10(yolov8代码里兼容版本)推理代码解析,抛去nms,大道至简

一、模型的输出头 下载官方的yolov8代码库https://github.com/ultralytics/ultralytics 打开ultralytics/nn/modules/head.py&#xff0c;主要需要看一下模型的输出头是如何做训练和预测推理。 v10检测头继承与常规的检测头Detect&#xff0c;初始化里重构了一下分类的输出头…

pacs图像打不开怎么办 --日常工作总结

先强调一下,我不是专门做图像入库和图像归档,我负责的是临床这边的影像,下面是占在我的业务日常分析总结的哈,(不太专业,勿喷) 我们经常会遇到在打开某个检查的时候,出现黑框,日志定位wado服务取不到图 这种情况一般分为 (1) 工作站,工作组,路由,存储卷配置缺失 ---对应的wad…

【C语言从不挂科到高绩点】05-流程控制语句-switch语句

Hello&#xff01;彦祖们&#xff0c;俺又回来了&#xff01;&#xff01;&#xff01;&#xff0c;继续给大家分享 《C语言从不挂科到高绩点》课程 本套课程将会从0基础讲解C语言核心技术&#xff0c;适合人群&#xff1a; 大学中开设了C语言课程的同学想要专升本或者考研的…

Linux上启动redis

1.默认启动方式:在系统的任意位置执行 redis-server即可启动 ps:这是前端界面启动&#xff0c;无法直接连接redis&#xff0c;想要连接的话只能另外启动一个窗口&#xff0c;因此下面我们介绍后台启动redis 2.指定配置启动&#xff1a; redis的配置文件位置&#xff1a…

二叉树的基本知识

&#xff08;写给未来遗忘的自己&#xff09; 1.二叉树的种类 1. 满二叉树&#xff1a;所有分支都有数&#xff08;都填满&#xff09; 2. 完全二叉树&#xff1a;除了最底层没填满外其他的都满了&#xff0c;而且最底层从左到右是存在数的位置是连续的 3.二叉搜索树&#xf…