海边拾贝(四)- 性能优化篇
CDN的概念
点击查看详情
CDN
(全称Content Delivery Network
,内容分发网络),是一种网络传输机制,其特点是将一些静态资源存储在距离目标主机最近的服务器中,从而使得用户每次访问资源时只需要访问这台最近的服务器即可,从而加快用户访问速度
CDN
的作用:
- 性能方面:
CDN
托管了静态资源并对其进行分发,延迟更低,网页加载速度明显提高 - 安全层面:
CDN
有助于防范DDoS
、MITM
等网络攻击
图片懒加载
点击查看详情
图片懒加载即根据用户实际访问的内容按需加载,其原理是:当一个页面的图片数量很多时,由于src
的特性,浏览器就要等待所有图片加载完毕,这对于页面性能会有极大的浪费,而应用了图片懒加载后,只在用户滚动到对应区域时才开始加载该区域图片,从而实现按需加载,增加性能和用户体验
代码实现如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21<div class="container">
<img src="loading.gif" data-src="pic.png">
<img src="loading.gif" data-src="pic.png">
<img src="loading.gif" data-src="pic.png">
<img src="loading.gif" data-src="pic.png">
<img src="loading.gif" data-src="pic.png">
<img src="loading.gif" data-src="pic.png">
</div>
<script>
var imgs = document.querySelectorAll('img');
function lozyLoad(){
var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
var winHeight= window.innerHeight;
for(var i=0;i < imgs.length;i++){
if(imgs[i].offsetTop < scrollTop + winHeight ){
imgs[i].src = imgs[i].getAttribute('data-src');
}
}
}
window.onscroll = lozyLoad();
</script>
通过判断图片offset-top
与scrollTop+innerHeight
的大小,来将src
绑定图片实际src
回流和重绘
点击查看详情
- 回流:回流又称重排,指的是当文档中部分或全部内容发生变化时,浏览器会重新渲染部分或全部文档,一些导致回流的操作:
- 页面首次渲染
- 浏览器窗口大小变化
- 元素内容变化
- 元素尺寸或内容变化
- 添加或删除某些
DOM
元素 - 字体大小变化
- 重绘:重绘是指当页面中某些元素样式发生变化时,浏览器会对该元素进行重新绘制,这个过程就是重绘,一些导致重绘的操作:
background
、color
的修改box-shadow
、border
的修改
节流和防抖
点击查看详情
- 防抖:防抖是指多次触发函数时,只执行最后一次,防止用户多次重复操作造成资源浪费
- 节流:节流是指限定一个单位时间,在单位时间内该事件只能触发一次
防抖实现:1
2
3
4
5
6
7
8
9function debounce(func, wait) {
let timeout;
return function(...args) {
clearTimeout(timeout);
timeout = setTimeout(() => {
func.apply(this, args);
}, wait);
};
}
节流实现:1
2
3
4
5
6
7
8
9
10function throttle(func, wait) {
let lastTime = 0;
return function(...args) {
const now = Date.now();
if (now - lastTime >= wait) {
lastTime = now;
func.apply(this, args);
}
};
}
图片优化
点击查看详情
图片一直是前端加载性能的大头,现在讲讲前端图片优化的几种方式
- 格式选择:使用有损图片格式
JPEG
代替无损数据格式PNG
- 尺寸调整:将图片尺寸调整至合适大小有助于减小图片大小
- 延迟加载:图片懒加载
- 使用
CDN
:用CDN
分发静态资源 - 使用雪碧图:将多个图标集中在一张雪碧图中
webpack优化
点击查看详情
Tree shaking
:自动移除未使用的代码,从而增加打包速度- 代码分割:将代码模块化分割并实现按需加载,从而减少首屏加载时间
- 代码压缩:使用一些工具删除多余的代码、注释等,从而简化代码
CDN
加速:使用CDN
加速静态资源