从输入URL到页面加载完成,发生了什么,要进行肌肉记忆。
https://www.yuque.com/liugezhou/drrg7f/gav2aq
这两个请求的优化点我们从 资源的压缩和合并入手 以及打包构建工具的作用解决浏览器频发请求文件问题.
首先对webpack的基础有个了解:
https://cloud.tencent.com/developer/article/2143280
构建过程提速:(主要是针对CI/CD流程吧,手动打包不太在意构建过程速度)
babel优化
为了应对低版本的ES6转ES5的js语言特性,使用了babel-polyfill后,打包体积会很大,这个时候可以根据业务代码,在loader的的options配置中加入useBuiltIns为usage。
缓存 本地存储
CSS选择符是从右到左进行匹配的。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Lazy-load</title>
<style>
.img {
width: 200px;
height: 200px;
background-color: gray;
}
.pic {
border: 1px solid red;
width: 200px;
height: 200px;
}
</style>
</head>
<body>
<div class="container">
<!-- 10个div -->
<div class="img">
<img class="pic" alt="加载中" data-src="./images/9.png" />
</div>
</div>
</body>
<script>
const imgs = document.getElementsByTagName('img')
const viewHeight =
window.innerHeight || document.documentElement.clientHeight
console.log(viewHeight)
let num = 0
function lazyLoad() {
for (let i = 0; i < imgs.length; i++) {
let distance = viewHeight - imgs[i].getBoundingClientRect().top
if (distance >= 0) {
imgs[i].src = imgs[i].getAttribute('data-src')
num = i + 1
}
}
}
window.addEventListener('scroll', lazyLoad, true)
</script>
</html>
以 4 中的监听scroll为例。
事件节流-throttle、第一个说了算
在一段时间内无视后来产生的回调请求。
事件防抖-debounce、最后一个说了算
某段事件内,不管你触发了多少次回调,都只认最后一次。
可视化工具Performance工具
Lighthouse–页面性能报告
npm i -g lighthouse
lighthouse https://blog.liugezhou.online
我在使用此页面性能报告中,明显发现的性能指标有:图片推荐使用WebP、OSS资源推荐HTTP2、图片改为懒加载。