前端性能优化 | CDN缓存

news2024/12/23 9:08:44

前言

CDN(Content Delivery Network)是一种分布式的网络架构,通过在全球各地部署节点服务器来快速传输和分发网络内容。CDN的主要目标是提供快速、可靠的内容传输,以提升用户体验。

本文主要从以下方面讲解CDN

  • 什么是CDN
  • CDN的作用
  • CDN的原理
  • CDN的使用场景

一、什么是 CDN

1. CDN 的概念

CDN是内容分发网络(Content Delivery Network)的缩写,是一种通过在全球各地分布的服务器上存储和传输网络资源(如 HTML 页面、图片、视频、应用程序等)的技术架构。

image.png

2. CDN 系统的构成

  1. 原始服务器(Origin Server):也称为源服务器,是存储网站内容(如HTML、CSS、JavaScript、图片、视频等)的主要服务器。

  2. 节点服务器(Edge Servers):也称为边缘服务器或CDN节点,分布在全球各个地理位置。

  3. 节点选择器/调度器(Node Selector/Load Balancer):是CDN系统的核心组件之一,用于选择与用户最接近的节点服务器。

  4. 缓存(Cache):CDN节点服务器上的缓存用于存储网站内容的副本。当用户请求访问网站的内容时,CDN节点会先检查自己的缓存中是否存在所需内容的副本。

  5. 内容传输网络(Content Delivery Network):CDN网络是由一系列节点服务器组成的分布式网络,这些节点服务器相互连接,以实现内容的快速传输和访问。

  6. 内容管理系统(Content Management System):部分CDN系统还提供内容管理系统,用于帮助网站管理员管理和控制网站内容的分发、缓存和更新等操作。

这些组件共同协作,构成了一个完整的CDN系统,以提供快速、高效和可靠的内容分发服务。

二、CDN 的作用

CDN一般会用来托管Web资源 (包括文本、图片和脚本等),可供下载的资源(媒体文件、软件、文档等),应用程序 (门户网站) 等 。

  • 加速网站访问:通过将网站的动态内容缓存在离用户最近的节点服务器上,实现就近访问,减少内容传输的距离和网络延迟。大幅提高网站的访问速度,加快加载,提升用户体验。

  • 节约网络带宽:将网站的静态资源缓存在多个节点服务器上,当用户访网站时,大部分的资源可以从离用户较近的节点服务器上获取,少了对原始服务器的访问。减轻了源服务器的负载压力,节约了网络带宽的使用,提高了整体的网络效率。

  • 提高网站的可用性和稳定性:通过分布在全球各地的节点服务器,在原始服务器发生故障或服务不可用时,可以自动切换到其他可用的节点服务器,确保网站内容的可持续提供。这种容灾备份机制可以提高网站的可用性和稳定性,减少中断的风险。

  • 抵御网络攻击:由于CDN节点分布广泛,网络流量可以在多个节点服务器上进行均衡分散,有效减轻了源服务器的负载和DDoS攻击带来的影响。CDN还可以使用如防火墙、入侵检测系统等一些安全机制和防御措施,保护网站免受恶意攻击。

  • 提供高质量的视频内容传输:通过将视频内容缓存在离用户最近的节点服务器上,CDN可以提供更快速、稳定的视频播放体验,避免视频卡顿、加载缓慢等问题。

综上所述,CDN的作用是提供快速、可靠的内容分发服务,加速网站访问、节省网络带宽、提高可用性和稳定性,抵御网络攻击,提供高质量的视频内容传输,从而改善用户体验,提升网站的性能和效果。

三、CDN 的原理

image.png

以用户访问浏览器某网址(www.example.com) 时为例,CDN的加速流程通常包括以下几个步骤:

  1. 域名解析:当用户在浏览器中输入网址并按下回车键后,浏览器会向本地DNS服务器发送域名解析,本地DNS服务器会返回CDN的负载均衡器的地址。

  2. 负载均衡:浏览器根据负载均衡器的IP地址,向CDN负载均衡器发送请求。载均衡器的作用是选择一个最合适的CDN节点服务器来响应用户的请求。

  3. 缓存判断CDN节点服务器收到用户的请求后,会先判断请求资源是否缓存在其本地服务器上。如果有,则直接返回缓的资源,这样可以大大提高响应速度和节省带宽消耗。如果没有缓存的资源,则进入下一步。

  4. 源服务器回源:当节点服务器没有缓存所需的资源时,会向源服务器发送请求,获取资源的原始本。源服务器可以是网站的服务器、视频流媒体的视频源服务器等,根据不同的业务需求而定。

  5. 传输加速:源服务器将请求资源发送给节点服务器后,节点服务器会将资源按照缓存策略进行存储,并将资源回传给用户的浏览器。由于CDN节点服务器通常位于离用户更近的一方,因此传输时间较短,用户可以更快地获取请求的资源。

  6. 动态内容回源:对于一些动态生成的内容或需要实时更新的资源(如用户个人信息、实时天气数据等),CDN节点服务器需要及时回源更新这些内容,以保证数据的实时性和准确性。

总的来说,CDN加速流程包括域名解析负载均衡缓存判断源服务器回源传输加速动态内容回源等步骤。通过减少访问迟、节省带宽消耗和提供更好的用户体验,CDN可以提供快速、稳定和可靠的内容分发服务。

四、CDN 的使用场景

前端使用CDN可以使网站或应用的静态资源(如样式表、JavaScript文件、字体、图像等)从离用户更近的节点服务器加载,从而提高网页加载速度和用户体验。以下是前端使用CDN的几个常见实例:

1. 加载公共库和框架

许多前端开发者使用公共库和框架来加速开发和提供更好的用户体。常见的如jQuery、React、Vue.js等。通过使用CDN加载这些公库,可以将它们缓存在CDN的节点服务器上,提供更快速的加载和传输,无需在本地部署维护这些库的副本。

例如,使用CDN jQuery库:

<script src="https://cdn.jsdelivr/npm/jquery@3.60/dist/jquery.min.js"></script>

2. 加载图标字体

图标字通常用于网站的图标展示,如Font Awesome、Bootstrap等使用CDN加载这些图标字体,可以减少字体的加载时间和带宽消耗。例如,使用CDN加载Font图标字体:

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/font-awesome5.15.4/css/all.min.css" />

3. 加载样式

使用CDN加载常用的样式表文件,如Normalize.css、Bootstrap等,可以降低式表文件的加载时间和提高页的兼容性。例如,使用CDN加载Normalize样式表:

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/normalize@8.0.1/normalize.min.css" />

4. 加载JavaScript库和件

如果网站或应用使用了一些常见的JavaScript库和插件,如Moment.js、Swiper等,可以使用CDN加载它们,避免自行下载和部署这些文件。例如使用CDN加载Moment.js:

<script src="://cdn.jsdelivr.net/npm/moment@2.29.1/moment.min.js"></script>

5. 加载图片CDN

我们打开稀土掘金网站,随便打开一篇文章,我们可以很多图片都是从 CDN 服务器上请求来的,这极大的提高了图片的响应速度。

image.png

五、常用的前端 CDN 库

名称优势官网
jsDelivr基于 MaxCDN 的一个免费开源的 CDN 解决方案 http://www.jsdelivr.com
CDNJS提供非常完整的 JavaScript 库 http://www.cdnjs.com
BootCDN目前前端开源的项目几乎都涵盖了,支持http和https http://www.bootcdn.cn
Staticfile CDN基于 CDN 加速由七牛云提供包括 JS、CSS、image 和 swf 等静态文件的,支持http和https https://www.staticfile.org
jQuery CDN一个只有 jQuery 的 CDN http://code.jquery.com
百度云资源站基于百度云的资源站,各种开发语言的 SDK 均可以免费下载 https://cloud.baidu.com/doc/Developer/index.html

总结

CDN主要用于在全球范围内加速静态内容、动态内容和流媒体的传输。通过在各地部署节点服务器,将内容缓存到离用户更近的服务器上,从而提供更快速、可靠和高效的内容传输。

CDN缓存在前端性能优化中的主要用于加速静态资源加载减轻服务器负载,以及缓解网络拥塞等方面。合理利用CDN缓存,能够大幅提升网页性能,提高用户体验。

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

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

相关文章

利用GPT开发应用003:GPT分词和预测

文章目录 一、概率问题二、令牌&#xff08;分词&#xff09;三、预测 一、概率问题 像 GPT 这样的大型语言模型接收一个提示&#xff0c;并返回通常在上下文中有意义的输出。例如&#xff0c;提示可以是“今天天气很好&#xff0c;所以我决定”&#xff08;“The weather is n…

vite项目修改node_modules

问题详情 在使用某个依赖的时候遇到了bug&#xff0c;提交issue后不想一直等待到作者更新版本&#xff0c;所以寻求临时自己解决 问题解决 在node_modules里找到需要修改的依赖&#xff0c;修改想要修改的代码 修改后记得保存 然后在node_modules里找到.vite文件夹&#x…

便捷在线导入:完整Axure元件库集合,让你的设计更高效!

Axure元件库包含基本的工具组件&#xff0c;可以使原型绘制节省大量的重复工作&#xff0c;保持整个设计页面的一致性和标准化&#xff0c;同时显得专业。Axure元件库就像我们日常生活中的门把手、自行车踏板和桌子上的螺丝钉&#xff0c;需要组装才能使用。作为一名成熟的产品…

java集合(泛型数据结构)

1.泛型 1.1泛型概述 泛型的介绍 泛型是JDK5中引入的特性&#xff0c;它提供了编译时类型安全检测机制 泛型的好处 把运行时期的问题提前到了编译期间 避免了强制类型转换 泛型的定义格式 <类型>: 指定一种类型的格式.尖括号里面可以任意书写,一般只写一个字母.例如: …

职工医疗报销管理系统

目录 1 系统目标与范围说明... 0 1.1项目名称... 0 1.2问题说明... 0 1.3项目目标... 0 1.4项目范围... 0 1.5初步想法... 0 1.6可行性研究计划... 0 2 可行性分析报告... 1 2.1系统概述... 1 2.2可行性分析... 2 2.3结论意见... 2 3 项目开发计划... 2 3.1系统…

【笔记】Android Telephony 漫游SPN显示定制(Roaming Alpha Tag)

一、功能名词简介和显示规则 Alpha Tag&#xff1a;运营商名称标识符&#xff0c;也是用于标识运营商的一个名称。客户需求描述常用名词&#xff0c;对开发而言都是SPN/PLMN功能模块的内容&#xff0c;状态栏左上角的运营商名称显示。 SPN相关文章&#xff1a; 【笔记】SPN和…

Java on VS Code 2月更新|创建 Maven 模块支持,项目管理体验优化!

作者&#xff1a;Nick Zhu - Senior Program Manager, Developer Division At Microsoft 排版&#xff1a;Alan Wang 大家好&#xff0c;欢迎来到2024年2月的 Visual Studio Code Java 更新&#xff01;在本篇博客中&#xff0c;我们将分享项目管理体验的改进以及 Maven 多模块…

【MySQL | 第三篇】MySQL索引及两种索引分类方法总结

文章目录 3.MySQL索引及两种索引分类方法3.1索引的概念3.1.1相关定义3.1.2查询例子 3.2索引的底层3.2.1二叉树&#xff08;1&#xff09;满二叉树&#xff08;2&#xff09;完全二叉树&#xff08;3&#xff09;二叉查找树&#xff08;4&#xff09;二叉平衡树&#xff08;AVL&…

uniapp——nextTick(vue3)数据更新完之后加载

说明 将回调推迟到下一个 DOM 更新周期之后执行。在更改了一些数据以等待 DOM 更新后立即使用它。 代码 <view class"tabBox"><scroll-view scroll-x"true" :scroll-with-animation"true"><view class"box"><…

利用“定时执行专家”循环执行BAT、VBS、Python脚本——含参数指定功能

目录 一、软件概述 二、VBS脚本执行设置 三、触发器设置 四、功能亮点 五、总结 在自动化办公和日常计算机任务管理中&#xff0c;定时执行脚本是一项非常重要的功能。今天&#xff0c;我将为大家带来一款名为“定时执行专家”的软件的评测&#xff0c;特别是其定时执行VB…

leetCode刷题 5.最长回文子串

目录 1. 思路 2. 解题方法 3. 复杂度 4. Code 题目&#xff1a; 给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同&#xff0c;则该字符串称为回文字符串。 示例 1&#xff1a; 输入&#xff1a;s "babad" 输出&#x…

3.7 day2 Free RTOS

使用ADC采样光敏电阻数值&#xff0c;如何根据这个数值调节LED灯亮度。2.总结DMA空闲中断接收数据的使用方法 while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */adc_value HAL_ADC_GetValue(&hadc);TIM3->CCR3 adc_value * 999 / 4095;printf("%d …

Docker网络+原理+link+自定义网络

目录 一、理解Docker网络 1.1 运行tomcat容器 1.2 查看容器内部网络地址 1.3 测试连通性 二、原理 2.1 查看网卡信息 2.2 再启动一个容器测试网卡 2.3 测试tomcat01 和tomcat02是否可以ping通 2.4 只要删除容器,对应网桥一对就没了 2.5 结论 三、--link 3.…

探索考古文字场景,基于YOLOv7【tiny/l/x】不同系列参数模型开发构建文本考古场景下的甲骨文字符图像检测识别系统

甲骨文是一种非常历史悠久的古老文字&#xff0c;在前面我们基本上很少有涉及这块的内容&#xff0c;最近正好在做文字相关的项目开发研究&#xff0c;就想着基于甲骨文的场景来开发对应的检测识别系统&#xff0c;首先看下实例效果&#xff1a; YOLOv7是 YOLO 系列最新推出的Y…

dubbo3适配springboot2.7.3

版本详细 <dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo</artifactId><version>3.0.3</version> </dependency><parent><groupId>org.springframework.boot</groupId><artifactId&…

css 用flex做成田字型

哈喽&#xff0c;各位小伙伴&#xff01;今天给大家来css控制div完成田字型样式&#xff0c;来&#xff0c;看看下面的效果图&#xff1a; 一看就知道你们想要代码了&#xff0c;不急。代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head>&…

c++ 11 新特性 不同数据类型之间转换函数之reinterpret_cast

一.不同数据类型之间转换函数reinterpret_cast介绍 reinterpret_cast是C中的一种类型转换操作符&#xff0c;用于执行低级别的位模式转换。具体来说&#xff0c;reinterpret_cast可以实现以下功能&#xff1a; 指针和整数之间的转换&#xff1a;这种转换通常用于在指针中存储额…

【考研数学】武忠祥各阶段用书搭配+学习包

25考研数学全流程规划&#xff01;别等到二战了才知道这样学 本人属于基础很差相当于是零基础的考研党&#xff0c;经过一年备考成功上岸 中间花费了很多时间在考研数学备考信息检索上&#xff0c;写下这篇希望能帮助基础不好的学弟学妹们多节约一些时间复习&#xff01; 25…

容器+虚拟机双引擎,ZStack Edge云原生超融合打通业务最后一公里

企业数字化转型的焦点正在发生变化&#xff0c;云基础设施由资源到应用&#xff0c;数据中心从核心到边缘。面向云原生趋势&#xff0c;围绕应用升级&#xff0c;新一代超融合产品——云原生超融合应运而生。 云原生与边缘计算趋势催生云原生超融合 当前&#xff0c;企业客户…

【CSP试题回顾】201409-3-字符串匹配

CSP-201409-3-字符串匹配 关键点&#xff1a;<string>库函数的使用 length() 或 size(): 返回字符串的长度。 empty(): 检查字符串是否为空。 append() 或 : 向字符串的末尾添加字符或另一个字符串。 insert()在字符串的指定位置插入另一个字符串或字符。 std::str…