​字​节​一​面​

devtools/2024/9/24 8:07:41/

数据开发
male
45min

1. 请尽可能详细地说明,cdn为什么能提高速度?cdn和http的关系是什么?你的回答中不要写出示例代码。

CDN(Content Delivery Network,内容分发网络)通过在全球范围内部署大量边缘节点,利用负载均衡、内容缓存等技术,能够显著提高网站访问速度。以下是CDN提高速度的原理以及CDN与HTTP的关系:

CDN提高速度的原理

  • 静态内容缓存:CDN服务器将网站的静态内容(如图片、CSS和JavaScript等)缓存在多个分布式节点上。当用户请求这些静态资源时,CDN服务器会根据用户的地理位置和网络情况选择离用户最近的节点来响应请求,从而减少网络延迟。
  • 带宽优化:CDN可以通过多种技术手段来优化带宽使用,例如采用压缩算法来减小文件大小,减少网络传输时间;使用并行连接来同时请求多个资源,提高下载速度;利用缓存和预加载技术来提前将资源传输到用户设备上,减少等待时间。
  • 动态内容加速:对于动态生成的内容,CDN可以通过缓存和加速技术来提高访问速度。CDN服务器会将动态内容缓存在节点上,当用户请求时,CDN服务器会尽量避免重复访问源服务器,而是直接从缓存中返回数据。
  • 负载均衡:CDN服务器会对用户的请求进行负载均衡,将请求分发到不同的服务器上进行处理。这样可以有效分担服务器的负载,提高网站的访问速度和稳定性。

CDN和HTTP的关系

  • HTTP缓存与CDN缓存:HTTP缓存是一种客户端缓存,当web浏览器向服务器发起资源请求时,服务器可以在响应报文头中包含缓存相关的信息。这些HTTP header会告诉浏览器是否以及如何缓存资源,再次请求时如果命中缓存将直接读取本地缓存不再发出请求。CDN缓存是一种服务端缓存,CDN服务商可以将源站上的资源缓到其各地的边缘服务器节点上。当用户访问该资源时,CDN再通过负载均衡将用户的请求调度到最近的缓存节点上,有效减少了链路回源,提高了资源访问效率及可用性,降低带宽消耗。
  • CDN在HTTP协议中的应用:CDN利用HTTP协议里的代理和缓存技术,用户在上网的时候不直接访问原网站,而是访问离他最近的一个CDN节点,节省了访问过程中的时间成本。

通过上述原理和关系,CDN能够显著提高网站的访问速度,优化用户体验,同时减轻源服务器的压力。

2. 请尽可能详细地说明,协商缓存会发送几次请求?第一次发送哪种请求?option请求是什么?你的回答中不要写出示例代码。

协商缓存机制涉及两次请求,第一次是正常请求资源,第二次是检查资源是否更新的条件请求。第一次请求是正常请求,第二次请求是条件请求,用于检查资源自上次请求以来是否发生了修改。

第一次请求

  • 请求类型:第一次请求是正常请求,即客户端向服务器请求资源。
  • 请求内容:客户端会发送一个GET请求来获取资源。
  • 服务器响应:服务器会返回资源及其相关信息,如Last-ModifiedETag

第二次请求

  • 请求类型:第二次请求是条件请求,即客户端在本地缓存资源后,再次请求时会在请求头中携带If-Modified-SinceIf-None-Match来询问服务器资源是否已更新。
  • 请求内容:客户端会在请求头中包含If-Modified-Since(上次请求资源的最后修改时间)或If-None-Match(资源的ETag值)。
  • 服务器响应
    • 如果资源自上次请求以来未发生修改,服务器返回状态码304(Not Modified),表示客户端可以继续使用缓存中的资源。
    • 如果资源已修改,服务器返回状态码200,并返回新的资源内容以及新的Last-ModifiedETag值。

Option请求

  • 定义OPTIONS请求用于获取目的资源所支持的通信选项,可以检测服务器支持哪些HTTP方法,或在CORS中发起预检请求以检测实际请求是否可以被服务器所接受。
  • 应用场景
    • 检测服务器所支持的请求方法。
    • 在CORS中,使用OPTIONS方法发起一个预检请求,以检测实际请求是否可以被服务器所接受。

协商缓存机制通过两次请求有效地减少了不必要的网络传输,提高了资源访问效率。第一次请求获取资源,第二次请求检查资源是否更新,从而决定是否需要从服务器重新获取资源。

3. 请尽可能详细地说明,script标签中async和defer的区别。script标签为什么要设计成阻塞html的渲染?你的回答中不要写出示例代码。

[](@replace=### async和defer的区别

  1. 执行时机

    • async:当<script>标签设置了async属性后,浏览器会在下载脚本的同时继续解析HTML文档。脚本下载完成后,浏览器会立即执行该脚本,无论它在文档中的位置如何。这意味着async脚本的执行顺序是不确定的,如果有多个async脚本,它们会按照下载完成的顺序执行。
    • defer:当<script>标签设置了defer属性后,浏览器同样会在下载脚本的同时继续解析HTML文档。但是,所有带有defer属性的脚本会在整个HTML文档解析完成后,但在DOMContentLoaded事件触发之前,按照它们在文档中出现的顺序执行。
  2. 阻塞行为

    • async脚本不会阻塞HTML的解析,但会阻塞DOMContentLoaded事件的触发,因为它们会在下载完成后立即执行。
    • defer脚本既不会阻塞HTML的解析,也不会阻塞DOMContentLoaded事件的触发,因为它们会在HTML解析完成后执行。

script标签阻塞HTML渲染的原因

<script>标签设计成阻塞HTML渲染的主要原因是为了确保脚本执行时的上下文环境(如DOM结构)是完整的。在早期的网页设计中,脚本经常用来操作DOM元素,如果在DOM元素还未完全加载时就执行脚本,可能会导致脚本运行错误。因此,浏览器默认会阻塞HTML的解析,直到<script>标签中的脚本执行完毕。

随着Web技术的发展,为了提高页面加载性能,引入了asyncdefer属性,允许开发者更精细地控制脚本的加载和执行时机,从而在不阻塞HTML解析的情况下执行脚本。

4. 算法:发布订阅、接雨水


http://www.ppmy.cn/devtools/104280.html

相关文章

VLAN 基本配置

一. 实验拓扑 二. 实验简介 交换机的VLAN端口可以分为Access、Trunk和Hybrid3种类型。Access 端口是交换机上用来直接连接用户终端的端口&#xff0c;它只允许属于该端口的缺省VLAN的帧通过。Access端口发往用户终端的帧一定不带VLAN标签。Trunk端口是交换机上用来连接其他交…

怎样写好提示词(Prompt) 二

在之前的文章中&#xff0c;我们介绍了如何写好提示词&#xff0c;今天我们在此基础上&#xff0c;再来探究如何写好提示词的几个小技巧。 加入思考过程 我们在写prompt的时候&#xff0c;有时候会让大模型回答一个比较难的问题&#xff0c;有时候大模型面对这个问题&#xf…

ceph-rgw zipper的设计理念(2)

本文简介 书接上文。本文以CreateBucket为例进行详细讲述设计理念以及接口变化趋势。 1、接收请求和协议处理请求 rgw_asio_frontend.cc 主要功能&#xff1a;回调函数注册和请求处理 void handle_connection(boost::asio::io_context& context,RGWProcessEnv& env…

我熟悉你的NLP焦虑,只因没有它

大家好&#xff0c;我是凡人。 最近凡人被一个NLP&#xff08;神经语言程序学[Neuro-Linguistic Programming]的英文缩写&#xff09;学习内容给震惊到了&#xff0c;熟悉NLP的同学都知道&#xff0c;NLP知识不仅庞大而且很有深度。 比如&#xff1a;机器信息就包含下图内容 肝…

《Cloud Native Data Center Networking》(云原生数据中心网络设计)读书笔记 -- 08网络自动化

云原生数据中心和老一代数据中心不同之处在于其核心概念是聚焦于高效运营。网络自动化就是达到此目标的关键因素。 要达到此目的&#xff0c;本章要解决诸如下述的一些问题&#xff1a; 什么是网络自动化以及为什么我们在乎它?为了学习网络自动化&#xff0c;我需要学习编程…

聊聊 OceanBase 资源管理

OceanBase 是分布式多租户架构数据库&#xff0c;其分布式集群从资源角度看可以分成集群、Zone、OB Server、资源池和租户等几个层次。 今天我们从集群和资源两个层次梳理 OceanBase 资源管理相关的概念。 OceanBase 集群管理 OceanBase 集群包含若干个Zone&#xff0c;一个Z…

Java基础(4)- IDEA

目录 一、Module 1.创建module 2.关闭modue 3.导入module 4.src灰色 二、Package 1.创建package 2.删除package 3.package取名规范 三、类 1.创建类 2.快捷语法 3.HelloWorld 四、IDEA基本设置说明 1.字体 2.提示的快捷键 五、常用快捷键 一、Module 1.创建mo…

118.杨辉三角

118.杨辉三角 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 输入: numRows 1 输出: [[1…