阿珊和她的猫 level
获赞
891
粉丝
527
关注
40
看过 TA
2862
广州软件学院
2021
前端工程师
IP属地:广东
前端开发工程师、蓝桥云课作者、技术博主、已过四六级
私信
关注
虚拟 DOM 的 diff 算法是比较新旧虚拟 DOM 树的差异,并确定需要更新的部分。它能够高效地更新 UI,并最小化对真实 DOM 的操作,从而提高性能。Diff 算法的基本思想是通过遍历新旧虚拟 DOM 树的节点,并比较它们的类型、属性和内容来找到差异。根据差异的类型,可以执行相应的操作,如添加、更新或删除节点。以下是简要的 diff 算法的步骤:https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&uuid=6ba5d46dd6254d20809b2e18c249cbb9比较根节点:首先比较新旧虚拟 DOM 树的根节点,确定它们是否相同类型的节点。如果不相同,直接替换整棵树;如果相同,进入下一步。比较子节点:逐个比较新旧虚拟 DOM 树的子节点。该过程使用了两个技术:首先是"Key"算法,通过给列表中的每个元素添加唯一的标识(Key),以便更准确地找到新增、删除或移动的元素;其次是"优化"算法,通过尽量少地操作真实 DOM,如移动元素而非重新创建,从而提高性能。递归比较:对于有子节点的元素,递归地进行步骤 1 和步骤 2,以便深度比较整个树的结构。Diff 算法的核心优势是在更新过程中最小化对真实 DOM 的操作。而对真实 DOM 的直接操作是昂贵的,因为每次操作都会触发浏览器的重排和重绘。通过将更新操作批量应用,以及通过只更新变化的部分,Diff 算法能够大大减少对真实 DOM 的操作次数,从而提高性能。
0 点赞 评论 收藏
分享
0 点赞 评论 收藏
分享
缓存穿透是指当一个请求查询/访问一个不存在于缓存中的数据时,该请求会穿透缓存层,直接访问后端数据库或其他数据存储系统。这可能导致对后端系统的过度负载,并且每个请求都需要从后端获取数据,无法利用缓存提供的性能优势。在前端防止缓存穿透问题的常见方法包括:https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&uuid=5f0bf65b3be04ac8a2beb28f857943a6输入合法性验证:在接收到请求之前,对请求的输入进行合法性验证。例如,对于用户输入的查询参数或请求的标识符,进行验证并确保其符合预期的格式和范围。如果请求的数据不存在或无效,可以提前进行处理,返回适当的响应,而不是单纯地将请求传递到后端。布隆过滤器(Bloom Filter):布隆过滤器是一种概率型数据结构,用于快速判断一个元素是否存在于集合中。在进行查询之前,可以使用布隆过滤器对缓存键进行检查,以过滤掉在缓存中一定不存在的键。这样可以减少对后端系统的不必要查询,同时提高缓存的命中率。缓存空值(Cache Miss):对于请求中查询的数据,即使在后端不存在该数据,也在缓存中存储一个空值作为响应。这样,在下次查询时,可以直接从缓存中获取空值作为响应,而不需要再次查询后端系统。这种方式可以减少对后端系统的请求次数,并加快响应速度。设置热门数据的预热策略:对于一些热门的数据或常用的查询,可以在系统启动或低峰期预先将其加载到缓存中。这样可以确保这部分数据在真正被请求时已经存在于缓存中,减少缓存穿透的可能性。使用缓存层/中间件:引入缓存层或中间件作为前端和后端之间的代理,用于处理查询请求和缓存的查询结果。缓存层可以缓存不同类型的数据,并根据缓存策略和配置决定是否向后端查询数据。这样可以集中管理缓存逻辑,并提供更高效的数据访问。
0 点赞 评论 收藏
分享
ETag(Entity Tag)是一个由服务器生成的用于标识资源的唯一标识符。https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&uuid=5f0bf65b3be04ac8a2beb28f857943a6ETag 在浏览器缓存中的作用是协商缓存的一部分。当浏览器发送请求时,会将上一次请求返回的 ETag 值通过 If-None-Match 请求头字段发送给服务器。服务器使用这个值与当前资源的 ETag 进行比较,以判断资源是否发生了变化。如果服务器发现资源的 ETag 值与浏览器发送的匹配,并且资源没有发生变化,服务器会返回状态码 304 Not Modified,表示资源未修改。浏览器收到这个响应后,可以直接从缓存中获取资源,而无需重新下载。ETag 能够精确地确定资源是否发生了变化,相对于 Last-Modified(最后修改时间)来说更加准确。如果资源的内容发生了任何改变,服务器会为该资源生成新的 ETag 值,而 Last-Modified 只能以秒级别的精度表示时间,可能无法捕捉到非常小的修改。在大多数情况下,浏览器会使用 Cache-Control 和 ETag(或 Last-Modified)一起使用,以提供更精确和可靠的缓存控制。当 Cache-Control 的缓存过期策略失效时,浏览器会使用 ETag 和服务器进行协商,以便确定是否可以使用缓存的副本。如果服务器返回 304 Not Modified,浏览器就可以直接使用缓存,并避免重新下载资源。这样可以减少网络带宽的使用,并提高页面加载速度和性能。
0 点赞 评论 收藏
分享
当在浏览器中输入网址并按下回车键时,以下是大致的执行过程:https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&uuid=02b1742be4564f04b7e1bdf3b39333d7DNS解析:浏览器首先将输入的网址发送给DNS服务器,以获取该网址对应的IP地址。DNS服务器会查询其数据库,在找到匹配的域名时返回对应的IP地址给浏览器。TCP连接建立:浏览器使用获取到的IP地址与服务器建立TCP连接。这涉及到使用TCP三次握手的过程,确保客户端与服务器之间的可靠连接。发起HTTP请求:一旦建立了TCP连接,浏览器会发送HTTP请求到服务器。请求包含请求方法(例如GET、POST)、请求的URL、HTTP版本以及其他可能的请求头信息,如用户代理、Cookie等。服务器处理请求:服务器收到HTTP请求后,会根据请求的URL和其他请求信息来处理请求。服务器可能会读取请求中的参数,查询数据库,执行相应的逻辑处理,并生成HTTP响应。HTTP响应:服务器生成完整的HTTP响应后,将其返回给浏览器。响应包括一个状态码表示请求的结果(例如200表示成功,404表示资源未找到等),响应的内容,以及其他响应头信息,如Content-Type、Content-Length等。接收和解析响应:浏览器接收到服务器的HTTP响应后,开始解析响应。它会检查状态码,根据响应头中的Content-Type确定响应内容的类型,并将响应的内容保存下来。渲染页面:如果响应的内容是HTML页面,浏览器会开始解析HTML,并构建DOM树。然后,将CSS文件加载和解析为样式规则,并将其应用于DOM树,生成渲染树。最后,浏览器使用渲染树将页面内容绘制到用户的屏幕上。关闭TCP连接:一旦页面完全加载并渲染完成,浏览器会关闭与服务器之间的TCP连接。但是,如果页面中存在其他的资源(如图片、脚本、样式表等),浏览器可能会继续发送HTTP请求获取这些资源。
0 点赞 评论 收藏
分享
TCP(传输控制协议)是一种面向连接的协议,它使用三次握手进行连接的建立,以及四次挥手进行连接的关闭。三次握手:https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&uuid=02b1742be4564f04b7e1bdf3b39333d7第一步:客户端发送连接请求报文段(SYN)给服务器,并选择一个随机的初始序列号(ISN1)。第二步:服务器收到连接请求报文段后,如果同意连接,将发送确认报文段(SYN+ACK)。服务器会选择另一个随机的初始序列号(ISN2),并将其作为确认号,并将自己的初始序列号(ISN2)一起发送给客户端。第三步:客户端接收到服务器的确认报文段,会发送确认报文段(ACK),确认号设置为服务器的初始序列号加1(ISN2+1)。服务器接收到客户端的确认报文段后,连接建立成功。经过三次握手,客户端和服务器就建立了可靠的连接,可以开始进行数据传输。四次挥手:https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&uuid=02b1742be4564f04b7e1bdf3b39333d7第一步:客户端发送关闭连接请求报文段(FIN)给服务器,表示不再发送数据。客户端仍可以接收服务器发送的数据。第二步:服务器收到客户端的关闭请求后,发送确认报文段(ACK)作为确认,并进入半关闭状态。服务器此时不再发送数据给客户端,但仍可以接收来自客户端的数据。第三步:当服务器不再发送数据时,会发送自己的关闭请求报文段(FIN)给客户端,表示数据发送完毕。第四步:客户端收到服务器的关闭请求后,发送确认报文段(ACK),确认服务器的关闭请求。此时客户端进入 TIME_WAIT 状态,等待一段时间后关闭连接。服务器收到客户端的确认后,关闭连接。经过四次挥手,客户端和服务器都完成了关闭连接的操作,释放了连接资源。需要注意的是,三次握手和四次挥手中的每个步骤都需要双方的确认,确保连接的可靠性和数据的完整性。这些握手和挥手过程可以保证数据在传输过程中的可靠性和有序性,确保数据能够正确地被发送和接收。
0 点赞 评论 收藏
分享
CDN代表内容分发网络(Content Delivery Network),它是一种分布式的网络架构,通过将资源存储在位于全球各地的多个服务器节点上,提供高速、可靠的内容传输服务。CDN的作用是在全球范围内缩短网络请求的距离,提高网站或应用程序的性能和可靠性。在前端性能优化中,CDN发挥了重要的作用:https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&uuid=02b1742be4564f04b7e1bdf3b39333d7提供较低的延迟:由于CDN服务器位于全球各地,它们离用户更近,可以减少请求的传输时间和延迟。当用户请求一个资源时,CDN会尝试从离用户最近的节点返回资源,从而提供更快的响应时间和更好的用户体验。分担服务器负载:CDN通过将网站的静态内容(如图片、CSS、JavaScript文件等)缓存在全球各地的边缘节点上,减轻了原始服务器的负载压力。这意味着原始服务器可以更好地处理动态内容的请求,提高了网站的整体性能和可扩展性。降低带宽消耗:CDN能够在边缘节点缓存静态资源,并提供智能的缓存机制,当用户再次请求相同资源时,可以直接从缓存中获取,而不必再次向原始服务器请求。这样可以降低带宽消耗,减少网络流量,并提高整体的可用带宽。提高数据传输的可靠性:CDN通过多个服务器节点存储资源的副本,提供冗余和容错机制,可以提高数据传输的可靠性。即使某个节点出现故障,其他节点仍然可以提供服务,不会影响用户的访问体验。
0 点赞 评论 收藏
分享
浏览器缓存是浏览器在本地存储Web资源(如HTML文件、CSS样式表、JavaScript脚本、图像等)的副本,以便在之后的页面访问中能够直接从本地获取这些资源,而无需再次从服务器下载。浏览器缓存可以提供以下优点和在以下场景下使用:https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&uuid=02b1742be4564f04b7e1bdf3b39333d7提高性能:浏览器缓存能够显著提高网页加载速度。当浏览器首次访问一个网页时,它会下载并缓存其中的资源。在之后的访问中,如果资源未发生变化,则可以直接从缓存中读取,减少了网络请求和等待时间,提高了页面加载速度。减少网络流量:通过使用浏览器缓存,可以减少对服务器的请求次数和相应的网络流量。对于重复访问相同页面的用户,他们可以从缓存中获取资源,而无需再次下载。这对于移动设备以及网络速度较慢的情况下特别有益,可以减少数据传输量,降低用户流量消耗和延迟。降低服务器负载:如果浏览器从缓存中获取资源,而不是向服务器发送请求,那么服务器的负载将减少。这可以使服务器更有效地处理其他请求,并减少响应时间和带宽消耗。支持离线浏览:某些Web应用或网页可以利用浏览器缓存来实现离线浏览功能。一旦页面及其所需的资源被缓存在本地,用户在离线状态下仍然可以访问和浏览该页面。
0 点赞 评论 收藏
分享
OSI(Open Systems Interconnection)七层模型是一种网络协议体系结构,用于描述计算机网络中各个层级的功能和相互之间的关系。它由国际标准化组织(ISO)于1984年提出,并成为了网络通信领域的参考模型。下面是OSI七层模型的各个层级及其功能:https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&uuid=02b1742be4564f04b7e1bdf3b39333d7物理层(Physical Layer): 物理层负责传输比特流,处理物理介质、电器特性和传输速率等物理细节。它定义了连接物理网络的接口标准,并处理数据的传输和接收。在这一层级上的设备包括网络适配器、连线和中继设备。数据链路层(Data Link Layer): 数据链路层负责将原始比特流组织成数据帧(Data Frame),并在物理介质上可靠地传输。它负责错误检测和纠正,以及对数据进行分割和重组。这一层级处理的是局域网(LAN)等较短距离网络的数据传输和访问控制。网络层(Network Layer): 网络层负责将数据包(Packet)从源主机发送到目标主机。它处理路径选择和逻辑寻址,使用IP地址确定数据报文的路径,并通过路由器实现数据包的转发。这一层级上的协议有IP(Internet Protocol)。传输层(Transport Layer): 传输层负责提供端到端的可靠数据传输和错误恢复。它使用端口号标识不同的应用程序,将数据分段并管理传输控制协议(TCP)和用户数据报协议(UDP)等协议。会话层(Session Layer): 会话层负责建立、管理和终止会话(Session)中的通信连接。它提供了数据交换的会话控制和同步功能,确保通信的可靠性和顺序。表示层(Presentation Layer): 表示层负责数据的表示和格式化,以便不同系统之间的数据交换和解释。它处理数据的压缩、加密、解密和数据格式转换等任务。应用层(Application Layer): 应用层提供用户与网络应用程序之间的接口。它包含各种应用协议,如HTTP(超文本传输协议)、SMTP(简单邮件传输协议)等,用于特定的应用需求。
0 点赞 评论 收藏
分享
RESTful API(Representational State Transfer API)是一种使用HTTP协议定义和交互的Web服务接口。RESTful API与传统的API相比有以下几个不同点:https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&uuid=02b1742be4564f04b7e1bdf3b39333d7设计思想:RESTful API基于资源的概念,它将应用程序的功能和数据都视为资源,并使用统一的资源标识符(URI)进行访问和操作。传统API则更加基于过程,通过暴露特定的操作和方法来实现功能。基于HTTP协议:RESTful API使用HTTP协议作为通信协议,充分利用HTTP的方法(如GET、POST、PUT、DELETE等)和状态码来表示对资源的不同操作。通过使用HTTP的语义和特性,RESTful API能够提供统一的接口规范和易于理解的操作方式。无状态性:RESTful API是无状态的,即每个请求都是独立的,服务器不会保存客户端的状态信息。客户端需要在每个请求中提供所有必要的信息,包括身份验证、参数等。这使得RESTful API具有可扩展性和可移植性。数据交互格式:RESTful API通常使用基于文本的数据交互格式,如JSON(JavaScript Object Notation)或XML(eXtensible Markup Language)来传输数据。这些格式具有广泛的支持和解析工具,易于解析和生成。资源链接:RESTful API通过链接不同的资源,实现资源之间的关联和导航。资源之间使用超链接(Hyperlink)来表示关系,客户端可以通过这些链接进行导航和获取相关资源。
0 点赞 评论 收藏
分享
DNS(Domain Name System)是一种用于将域名转换为IP地址的分布式命名系统。它充当了互联网上的'电话簿',将易记的域名映射到对应的IP地址,以便通过域名访问网络资源。DNS的主要作用如下:https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&uuid=02b1742be4564f04b7e1bdf3b39333d7域名解析:DNS的主要作用是将人类可读的域名(例如www.example.com)解析为计算机可理解的IP地址(例如192.0.2.1)。当用户在浏览器中输入一个域名时,浏览器会向DNS服务器发送查询请求,DNS服务器会返回与域名对应的IP地址。IP地址管理:DNS还负责记录和管理与域名相关联的IP地址。通过DNS,可以轻松地更改和维护与特定域名关联的IP地址,而不需要更改所有使用该域名访问的客户端配置。分布式和层级化:DNS是一个分布式的系统,由许多相互连接的域名服务器组成。它采用层级化的结构,将全球范围内的域名系统划分为多个区域,每个区域下有多个域名服务器。这种结构使得域名解析能够高效地进行,并提供系统的可靠性和容错能力。缓存和性能优化:DNS服务器可以缓存解析结果,当多个用户查询相同的域名时,可以直接从本地缓存中获取结果,减少了向上层域名服务器的查询次数,提高了域名解析的效率。逆向解析:除了将域名解析为IP地址,DNS还支持逆向解析,即将一个IP地址转换为对应的域名。这在一些安全、网络管理和日志分析等方面非常有用。
0 点赞 评论 收藏
分享
关注他的用户也关注了:
牛客网
牛客企业服务