Web性能优化

一、性能优化涉及点

CDNCDN的概念
CDN的作用
CDN的原理
CDN的使用场景
懒加载懒加载的概念
懒加载的特点
懒加载的实现原理
懒加载与预加载的区别
防抖与节流对节流与防抖的理解
实现节流防抖函数
回流与重绘回流与重绘的概念及触发条件
如何避免回流与重绘
如何优化动画
documentFragment是什么?用它与直接操作DOM的区别是什么
图片优化如何对项目中的图片进行优化
常见的图片格式及使用场景
webpack优化如何减少webpack打包时间
如何减少webpack打包体积
如何用webpack来优化前端性能
如何提高webpack的构建速度

二、 CDN

1、CDN的概念

      内容分发网络(Content Delivery Network,CDN)是一种网络架构,旨在提高用户对互联网上内容的访问速度和性能。CDN通过在全球各地部署大量的服务器节点,将内容缓存到离用户更近的服务器上,从而减少内容传输的距离,提高访问速度和响应时间。当用户请求访问某个网站或应用程序时,CDN会自动选择距离用户最近的服务器节点,从该节点提供内容,而不是直接从原始服务器获取内容。

2、CDN的作用

减少网络延迟和不稳定性
用户与业务服务器之间的物理距离可能很远,导致数据传输需要经过多次网络转发,从而增加了延迟和不稳定性。CDN通过在全球范围内部署服务器节点,使用户能够从距离更近的服务器获取内容,从而显著减少了传输延迟和提高了稳定性。

跨运营商转发优化
当用户与业务服务器所在的运营商不同时,请求需要在运营商之间进行互联转发,这可能会增加延迟和不稳定性。CDN提供了跨多个运营商的覆盖,使得用户可以从与其运营商更接近的CDN边缘节点获取内容,从而减少了跨运营商转发带来的问题。

提高服务器响应速度和可用性
业务服务器面对海量用户请求时,可能会面临网络带宽和处理能力的限制,导致响应速度下降和可用性降低。CDN通过缓存静态内容、负载均衡和智能路由等技术,可以将用户请求分发到最优的服务器节点上,从而分担了原始服务器的压力,提高了响应速度和可用性

3、CDN的原理

客户端请求资源: 用户在浏览器中输入网址或点击链接请求某个网页或资源。
DNS解析: 浏览器首先会进行DNS解析,将域名解析成对应的IP地址。如果该域名的DNS记录中包含了CDN服务商提供的DNS服务器信息,DNS解析可能会返回一个与用户位置最接近的CDN节点的IP地址。
请求路由: 用户的请求被发送到最近的CDN节点。
节点服务器处理请求: CDN节点服务器接收到用户请求后,会检查是否有缓存该资源的副本。如果有,它会直接从缓存中返回资源;如果没有,它会向源服务器请求资源。
资源获取: 如果资源存在于CDN节点的缓存中,则CDN节点会直接返回资源给用户;如果资源不在缓存中,则CDN节点会向源服务器请求资源。
数据传输: 源服务器将所请求的资源传输给CDN节点服务器。
数据返回: CDN节点服务器将获取到的资源返回给用户的浏览器。
内容传输完成: 用户在浏览器中收到并加载所请求的资源,完成访问过程。

4、CDN的使用场景

          静态加速:静态网页:CDN可以缓存静态网页(如HTML、CSS、JavaScript文件),并将其分发到全球各地的边缘节点,从而加速网页加载速度。
图片和视频:CDN能够存储和传送图片、视频等静态媒体文件,通过在用户附近的服务器上提供这些资源,减少了加载时间和带宽消耗。


        动态加速:动态内容:尽管动态内容通常不适合缓存,但CDN可以通过一些技术手段来加速动态内容的传输,比如动态页面的负载均衡、内容压缩和路由优化等。


        流媒体加速: 视频直播和点播:CDN能够提供高效的流媒体分发,将视频内容快速传输给全球观众,减少了视频卡顿和加载时间,提升了用户体验。音频流媒体:类似于视频,CDN也可以用于加速音频流的传输,如音乐流服务、网络广播等。

三、懒加载

1、懒加载的概念

懒加载是一种将资源标识为非阻塞(非关键)资源并仅在需要时加载它们的策略。这是一种缩短关键渲染路径长度的方法,可以缩短页面加载时间。

懒加载可以在应用程序的不同时刻发生,但通常会在某些用户交互(例如滚动和导航)上发生。

2、懒加载的特点
  • 减少无用资源的加载:懒加载可以明显减少服务器的压力和流量,避免加载用户不需要的资源。
  • 提升用户体验:通过延迟加载,避免了同时加载大量资源导致的长时间等待,提高了用户体验。‌13
  • 防止加载过多资源影响其他资源:懒加载可以防止加载过多图片而影响其他资源文件的加载,确保网站应用的正常使用。
3、懒加载的实现方式
  • 页面懒加载    使用打包工具见页面切分成多个模块,当页面即将展示时再加载对应文件
  • 图片懒加载 提升性能 减少对图片资源的请求,减少了对网络资源的占用,使得加载其他资源变得更快。与没有使用图片懒加载的页面相比,页面会更快。(图片数量越多、体积越大差异越明显) 2、降低成本 网络资源一般根据传输字节数收费,减少对图片资源的请求,减少了传输字节数,从而降低成本。 
  4、懒加载与预加载的区别

(1)概念:
        懒加载也叫延迟加载:JS图片延迟加载,延迟加载图片或符合某些条件时才加载某些图片。
        预加载:提前加载图片,当用户需要查看时可直接从本地缓存中渲染。

(2)区别:
        两种技术的本质:两者的行为是相反的,一个是提前加载,一个是迟缓甚至不加载。懒加载            对服务器前端有一定的缓解压力作用,预加载则会增加服务器前端压力。

(3)懒加载的意义及实现方式有:
      意义:
懒加载的主要目的是作为服务器前端的优化,减少请求数或延迟请求数。
实现方式:
1.第一种是纯粹的延迟加载,使用setTimeOut或setInterval进行加载延迟.
2.第二种是条件加载,符合某些条件,或触发了某些事件才开始异步下载。
3.第三种是可视区加载,即仅加载用户可以看到的区域,这个主要由监控滚动条来实现,一般会在距用户看到某图片前一定距离遍开始加载,这样能保证用户拉下时正好能看到图片。

(4)预加载的意义及实现方式有:
意义:
预加载可以说是牺牲服务器前端性能,换取更好的用户体验,这样可以使用户的操作得到最快的反映。
实现方式:
实现预载的方法非常多,比如:用CSS和JavaScript实现预加载;仅使用JavaScript实现预加载;使用Ajax实现预加载。
常用的是new Image();设置其src来实现预载,再使用onload方法回调预载完成事件。只要浏览器把图片下载到本地,同样的src就会使用缓存,这是最基本也是最实用的预载方法。当Image下载完图片头后,会得到宽和高,因此可以在预载前得到图片的大小(方法是用记时器轮循宽高变化)。

四、对节流与防抖的理解

1、节流

 节流函数会确保在指定的时间间隔内只执行一次函数,从而避免不必要的性能开销

function throttleFactory(t = 1000) {
  let samp = 0
  return function (fn) {
    let samp2 = new Date().getTime()
    if(samp2 - samp < t) return
    if(samp) {
      samp +=  Math.floor((samp2 - samp) / t) * t
    } else {
      samp = samp2
    }
    fn && fn()
  }
}
2、防抖

防抖函数会限制指定的时间间隔内函数已调用,再次调用防抖函数,则会重置先前的计时器,并为此函数调用启动一个新的计时器,直到规定时间内无重复调用,才执行函数

function debounceFactory(t = 1000) {
  let timer = null
  return function (fn) {
    if(!timer) {
      fn && fn()
    } else {
      clearTimeout(timer)
    }
    timer = setTimeout(()=> {
      timer = null
    }, t)
    
  }
}

  • 24
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值